Skip to contentSkip to conversation

how to tell if arbitrary kernel memory address is backed by physical memory?

DISCUSSION Chris Friesen 2 participants 4 messages Apr 16, 2009 – Apr 17, 2009 Memory management

lore
Share & tools
lore
#0 lore raw

Hi all,

Quick question to the memory management folks.

Is there a portable way to tell whether a particular virtual address in the lowmem address range is backed by physical memory and is readable?

For background...we have some guys working on a software memory scrubber for an embedded board. The memory controller supports ECC but doesn't support scrubbing in hardware. What we want to do is walk all of lowmem, reading in memory. If a fault is encountered, it will be handled by other code.

Thanks,

Chris

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#1 lore raw
Quoted 9 lines · Chris Friesen

Quick question to the memory management folks.

Is there a portable way to tell whether a particular virtual address in the lowmem address range is backed by physical memory and is readable?

For background...we have some guys working on a software memory scrubber for an embedded board. The memory controller supports ECC but doesn't support scrubbing in hardware. What we want to do is walk all of lowmem, reading in memory. If a fault is encountered, it will be handled by other code.

Virtual address in the lowmem address range? lowmem address ranges exist for physical addresses.

If you walk lowmem (physical) then you will never see a missing page.

So I guess you have a process that wants to determine if its memory is present? See

man 2 mincore

which describes a glibc call that shows which pages of a process are present.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#2 lore raw
Quoted 10 lines · Christoph Lameter
Quoted 7 lines · Chris Friesen

Is there a portable way to tell whether a particular virtual address in the lowmem address range is backed by physical memory and is readable?

For background...we have some guys working on a software memory scrubber for an embedded board. The memory controller supports ECC but doesn't support scrubbing in hardware. What we want to do is walk all of lowmem, reading in memory. If a fault is encountered, it will be handled by other code.

Quoted 4 lines

Virtual address in the lowmem address range? lowmem address ranges exist for physical addresses.

If you walk lowmem (physical) then you will never see a missing page.

We have a mips board that appears to have holes in the lowmem mappings such that blindly walking all of it causes problems. I assume the allocator knows about these holes and simply doesn't assign memory at those addresses.

We may have found a solution though...it looks like virt_addr_valid() returns false for the problematic addresses. Would it be reasonable to call this once for each page before trying to access it?

Chris

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>

#3 lore raw
Quoted 3 lines · Chris Friesen

We have a mips board that appears to have holes in the lowmem mappings such that blindly walking all of it causes problems. I assume the allocator knows about these holes and simply doesn't assign memory at those addresses.

Yes memory is registered in distinct ranges during boot.

Quoted 3 lines

We may have found a solution though...it looks like virt_addr_valid() returns false for the problematic addresses. Would it be reasonable to call this once for each page before trying to access it?

Sure. Note that virt_addr_valid only ensures that there is a page struct for that address. You may need to ensure that PageReserved(page) is false if you want to make sure that you have actual memory there that is valid to use.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>