mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* sparsemem usage
@ 2006-08-02 13:44 moreau francis
  2006-08-02 14:25 ` Andy Whitcroft
  2006-08-02 15:24 ` Alan Cox
  0 siblings, 2 replies; 14+ messages in thread
From: moreau francis @ 2006-08-02 13:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: apw

My board has a really weird mem mapping.

MEM1: 0xc000 0000 - 32 Mo
MEM2: 0xd000 0000 - 8 Mo
MEM3: 0xd800 0000 - 128 Ko

MEM3 has interesting properties, such as speed and security,
and I really need to use it.

I think that sparsemem can deal with such mapping. But I
encounter an issue when choosing the section bit size. I choose
SECTION_SIZE_BITS = 17. Therefore the section size is
equal to the smallest size of my memories. But I get a
compilation error which is due to this:

#if (MAX_ORDER - 1 + PAGE_SHIFT) > SECTION_SIZE_BITS
#error Allocator MAX_ORDER exceeds SECTION_SIZE
#endif

I'm not sure to understand why there's such check. To fix this
I should change MAX_ORDER to 6.

Is it the only way to fix that ?

Thanks

Francis



^ permalink raw reply	[flat|nested] 14+ messages in thread
* Re : Re : sparsemem usage
@ 2006-08-03  9:07 moreau francis
  2006-08-03  9:19 ` KAMEZAWA Hiroyuki
  2006-08-03  9:47 ` Andy Whitcroft
  0 siblings, 2 replies; 14+ messages in thread
From: moreau francis @ 2006-08-03  9:07 UTC (permalink / raw)
  To: Alan Cox; +Cc: linux-kernel, apw

Alan Cox wrote:
>
> Mapping out parts of a section is quite normal - think about the 640K to
> 1Mb hole in PC memory space.

OK. But I'm still worry. Please consider the following code

       for (...; ...; ...) {
                [...]
                if (pfn_valid(i))
                       num_physpages++;
                [...]
        }

In that case num_physpages won't store an accurate value. Still it will be
used by the kernel to make some statistic assumptions on other kernel
data structure sizes.

Francis
        




^ permalink raw reply	[flat|nested] 14+ messages in thread
* Re: Re : sparsemem usage
@ 2006-08-10 15:05 KAMEZAWA Hiroyuki
  2006-08-10 15:23 ` Re : " moreau francis
  0 siblings, 1 reply; 14+ messages in thread
From: KAMEZAWA Hiroyuki @ 2006-08-10 15:05 UTC (permalink / raw)
  To: moreau francis; +Cc: apw, alan, linux-kernel

On Thu, 10 Aug 2006 14:46:01 +0000 (GMT)
moreau francis <francis_moreau2000@yahoo.fr> wrote:
> 
> Why not implementing page_exist() by simply using mem_map[] ? When
> 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)
>  
putting a special value to a page struct at mem_map + pfn ?

> and it should work for sparsemem too and other models that will use
> mem_map[].
> 
> Another point, is page_exist() going to replace page_valid() ?
what is page_valid() here ? pfn_valid() (in current kernel) ?

> 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 ?
> 
I welcome to do that if implementation is sane.
pfn_valid() --- check there is a page struct
page_exist() --- check there is a physical memory.

but discussing without patch is not very good. please post your patch.
Then we can discuss more concrete things.

-Kame


^ permalink raw reply	[flat|nested] 14+ messages in thread
* Re: Re : sparsemem usage
@ 2006-08-10 15:21 Andy Whitcroft
  2006-08-10 15:37 ` Re : " moreau francis
  0 siblings, 1 reply; 14+ messages in thread
From: Andy Whitcroft @ 2006-08-10 15:21 UTC (permalink / raw)
  To: moreau francis; +Cc: KAMEZAWA Hiroyuki, alan, linux-kernel

moreau francis wrote:
> KAMEZAWA Hiroyuki wrote:
>> On Thu, 10 Aug 2006 14:40:52 +0200 (CEST)
>> moreau francis <francis_moreau2000@yahoo.fr> wrote: 
>>>> BTW, ioresouce information (see kernel/resouce.c)
>>>>
>>>> [kamezawa@aworks Development]$ cat /proc/iomem | grep RAM
>>>> 00000000-0009fbff : System RAM
>>>> 000a0000-000bffff : Video RAM area
>>>> 00100000-2dfeffff : System RAM
>>>>
>>>> is not enough ?
>>>>
>>> well actually you show that to get a really simple information, ie does
>>> 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.
>>>
>> becasue memory map from e820(x86) or efi(ia64) are registered to 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.)
>>  
> 
> Why not implementing page_exist() by simply using mem_map[] ? When
> 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[].

The mem_map isn't a pointer, its a physical structure.  We have a 
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.

> Another point, is page_exist() going to replace page_valid() ?
> 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 ?

Whilst I can understand that not knowing if a page is real or not is 
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.

-ap

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2006-08-11  8:28 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-08-02 13:44 sparsemem usage moreau francis
2006-08-02 14:25 ` Andy Whitcroft
2006-08-02 15:12   ` Re : " moreau francis
2006-08-02 15:36     ` Andy Whitcroft
2006-08-03  9:56       ` Re : " moreau francis
2006-08-02 15:24 ` Alan Cox
2006-08-02 15:33   ` Re : " moreau francis
2006-08-02 16:33     ` Alan Cox
2006-08-03  9:07 Re : " moreau francis
2006-08-03  9:19 ` KAMEZAWA Hiroyuki
2006-08-03  9:47 ` Andy Whitcroft
2006-08-10 15:05 KAMEZAWA Hiroyuki
2006-08-10 15:23 ` Re : " moreau francis
2006-08-10 15:21 Andy Whitcroft
2006-08-10 15:37 ` Re : " moreau francis
2006-08-11  8:26   ` Andy Whitcroft

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®