Andy Whitcroft wrote:moreau francis wrote:KAMEZAWA Hiroyuki wrote:The mem_map isn't a pointer, its a physical structure. We have aOn Thu, 10 Aug 2006 14:40:52 +0200 (CEST)Why not implementing page_exist() by simply using mem_map[] ? When
moreau francis <francis_moreau2000@xxxxxxxx> wrote:
becasue memory map from e820(x86) or efi(ia64) are registered toBTW, ioresouce information (see kernel/resouce.c)well actually you show that to get a really simple information, ie does
[kamezawa@aworks Development]$ cat /proc/iomem | grep RAM
00000000-0009fbff : System RAM
000a0000-000bffff : Video RAM area
00100000-2dfeffff : System RAM
is not enough ?
a page exist ?, we need to parse some kernel data structures like
ioresource (which is, IMHO, hackish) or duplicate in each architecture
some data to keep track of existing pages.
iomem_resource,
we should avoid duplicates that information. kdump and memory hotplug
uses
this information. (memory hotplug updates this iomem_resource.)
Implementing "page_is_exist" function based on ioresouce is one of
generic
and rubust way to go, I think.
(if performance of list walking is problem, enhancing ioresouce code is
better.)
allocating mem_map[], we can just fill it with a special value. And
then when registering memory area, we clear this special value with
the "reserved" value. Hence for flatmem model, we can have:
#define page_exist(pfn) (mem_map[pfn] != SPECIAL_VALUE)
and it should work for sparsemem too and other models that will use
mem_map[].
ok
special value to tell you if the page is usable within that, thats
called PG_reserved. If this page is reserved the kernel can't touch it,
can't look at it.
can't we introduce a new special value, such as "PG_real" ?
Another point, is page_exist() going to replace page_valid() ?Whilst I can understand that not knowing if a page is real or not is
I mean page_exist() is going to be something more accurate than
page_valid(). All tests on page_valid() _only_ will be fine to test
page_exist(). But all tests such:
if (page_valid(x) && page_is_ram(x))
can be replaced by
if (page_exist(x))
So, again, why not simply improving page_valid() definition rather
than introduce a new service ?
perhaps unappealing, I've yet to see any case where we need or care.
Changing things to make things 'nicer' interlectually is sometimes
worthwhile. But what is the user here.
The only consumer you have shown is show_mem() which is a debug
function, and that only dumps out the current memory counts. Its not
clear it cares to really know if a page is real or not.
I understand your point of view, but even if it's a debug function,
it must exist and report correct information. And my point is that
I think it should be really easy to implement :) that by using
a new "special value". Can you confirm that it's really easy to
implement that ?