[Top] [All Lists]

Re: [PATCH] do not count pages in holes with sparsemem

To: Atsushi Nemoto <>
Subject: Re: [PATCH] do not count pages in holes with sparsemem
From: Franck Bui-Huu <>
Date: Thu, 27 Jul 2006 11:00:25 +0200
Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=beta;; h=received:message-id:date:reply-to:user-agent:mime-version:to:cc:subject:references:in-reply-to:content-type:content-transfer-encoding:from; b=KXdXECXv/BUDirNB6IH8QkJ6p6acXvGrgRKoZksJOM4ekOJkJtPtIRh7SGxn3KZ9VGLsMkuxaCuK21c4c8WjFn8xiXCV60d0QlFdo3zaQQh1YfafMiPQLyuDbsYdTLUjmrrT3J54RoLbJC/EKezzQ/vOPiXaG2HmmD138aI9GXE=
In-reply-to: <>
Original-recipient: rfc822;
References: <> <> <> <>
Reply-to: Franck <>
User-agent: Thunderbird (X11/20060614)
Atsushi Nemoto wrote:
> On Wed, 26 Jul 2006 16:33:45 +0200, Franck Bui-Huu <> 
> 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 ?


-- >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);

<Prev in Thread] Current Thread [Next in Thread>