Re: Background memory scrubbing

From: Rik van Riel
Date: Wed Apr 20 2011 - 12:45:40 EST


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?

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.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/