Messages in this thread | | | Date | Wed, 20 Apr 2011 18:05:02 +0100 | Subject | Re: Background memory scrubbing | From | Robert Whitton <> |
| |
On Wed 20/04/11 6:45 PM , Rik van Riel <riel@redhat.com> wrote:
> On 04/20/2011 03:58 AM, Robert Whitton wrote: > > > for each PFN from 256 to the highest valid PFN > > { > > if (pfn_valid(PFN)) > > { > > page = pfn_to_page(PFN) > > va = kmap(page) > > atomic_scrub(va, PAGE_SIZE) > > kunmap(page) > > } > > > > sleep(for_a_while) > > } > > What exactly does atomic_scrub do?
atomic_scrub is part of the edac subsystem see arch/x86/include/asm/edac.h. It simply does a locked add of zero to each DWORD in the specified range.
(a shame that for 64 bit platforms it doesn't use QWORDS but that's just an optimisation)
> > > This code works absolutely fine up to a short distance beyond the 16MB > boundary (specifically it seems to always fail on my hardware at PFN > 4105). At this point despite the fact that kmap returns a valid virtual > address (and it is the virtual address that I expect - 0xffff880001009000) > I get the kernel oops - "unable to handle kernel paging request". > > Looks like you might be making some of the kernel code that > is running at that moment unreachable, leading to a kernel > page fault. > > ______________________________________________________________________ > This email has been scanned by the MessageLabs Email Security System. > For more information please visit http://www.messagelabs.com/email [1] > ______________________________________________________________________ > > > > Links: > ------ > [1] > http://webmail.eclipse.net.uk/parse.php?redirect=http://www.messagelabs.com > /email >
| |