Atsushi Nemoto wrote:
> On Wed, 26 Jul 2006 16:33:45 +0200, Franck Bui-Huu <vagabon.xyz@gmail.com>
> wrote:
>> I don't think that's correct to mark them as "reserved". Basicaly
>> "reserved" means that it belongs to the kernel (code or data), these
>> holes are not and we will end up to have wrong value as you pointed
>> out.
>>
>> Having quick look at sparsemem code, I don't think that it expects
>> to have holes inside a section, do it ? If so you probably have to
>> fix up your section size...
>
> Yes, for such small holes, sparsemem and flatmem is same. We can use
> smaller section size to save more memory, but I suppose it will be a
> bit slower.
>
I'm suprised that sparsemem code doens't check for holes inside
sections. I would feel really more confortable to use sparsemem if a
check like the following patch exists. We could safely use pfn_valid()
in _any_ cases and if holes exist inside sections then the user have
to fix up its section sizes.
what do you think ?
Franck
-- >8 --
diff --git a/mm/sparse.c b/mm/sparse.c
index 86c52ab..4c29a13 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -119,6 +119,13 @@ void memory_present(int nid, unsigned lo
{
unsigned long pfn;
+ if (start & (PAGES_PER_SECTION-1) || end & (PAGES_PER_SECTION-1)) {
+ printk(KERN_ERR "SPARSEMEM: memory area (%lx-%lx) creates a "
+ "hole inside a section, fix your SECTION_SIZE_BITS "
+ "value...\n", start, end);
+ BUG();
+ }
+
start &= PAGE_SECTION_MASK;
for (pfn = start; pfn < end; pfn += PAGES_PER_SECTION) {
unsigned long section = pfn_to_section_nr(pfn);