From: Mike Kravetz <kravetz@us.ibm.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Andrew Morton <akpm@osdl.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
hch@infradead.org, linuxppc-dev@ozlabs.org,
Paul Mackerras <paulus@samba.org>,
Michael Kravetz <mkravetz@us.ibm.com>,
cbe-oss-dev@ozlabs.org
Subject: Re: Bug: early_pfn_in_nid() called when not early
Date: Wed, 13 Dec 2006 15:17:17 -0800 [thread overview]
Message-ID: <20061213231717.GC10708@monkey.ibm.com> (raw)
In-Reply-To: <200612131920.59270.arnd@arndb.de>
On Wed, Dec 13, 2006 at 07:20:57PM +0100, Arnd Bergmann wrote:
> After a lot of debugging in spufs, I found that a crash that we encountered
> on Cell actually was caused by a change in the memory management.
>
> The patch that caused it is archived in http://lkml.org/lkml/2006/11/1/43,
> and this one has been discussed back and forth, but I fear that the current
> version may be broken for all setups that do memory hotplug with sparsemen
> and NUMA, at least on powerpc.
I believe you are correct. At least the memory hotplug code for powerpc
is currently broken (caused crash!).
> - both early_pfn_{in,to}_nid and early_node_map are in the __init
> section and may already have been freed at the time we are calling
> memmap_init_zone().
Well that is the root of the problem for powerpc. I believe that
__meminit attribute on memmap_init_zone() has no definition if
CONFIG_MEMORY_HOTPLUG is defined. This is so that it can be called
after boot. But, this also implies that memmap_init_zone() can not
call any routines in the __init section.
> The patch below is not a suggested fix that I want to get into mainline
> (checking slab_is_available is the wrong here), but it is a quick fix
> that you should apply if you want to run a recent (post-2.6.18) kernel
> on the IBM QS20 blade. I'm sorry for not having reported this earlier,
> but we were always trying to find the problem in my own code...
Thanks for the debug work! Just curious if you really need
CONFIG_NODES_SPAN_OTHER_NODES defined for your platform? Can you get
those types of memory layouts? If not, an easy/immediate fix for you
might be to simply turn off the option.
> --- linux-2.6.orig/mm/page_alloc.c
> +++ linux-2.6/mm/page_alloc.c
> @@ -1962,7 +1962,8 @@ void __meminit memmap_init_zone(unsigned
> for (pfn = start_pfn; pfn < end_pfn; pfn++) {
> if (!early_pfn_valid(pfn))
> continue;
> - if (!early_pfn_in_nid(pfn, nid))
> + if (!slab_is_available() &&
> + !early_pfn_in_nid(pfn, nid))
> continue;
> page = pfn_to_page(pfn);
> set_page_links(page, zone, nid, pfn);
I know you don't recommend this as a fix, but it has the interesting
quality of doing exactly what we want for powerpc. When
slab_is_available() we are performing a 'memory add' operation
and there is no need to do the 'pfn_in_nid' check. We know that
the range of added pages will all be on the same (passed) nid.
--
Mike
WARNING: multiple messages have this Message-ID (diff)
From: Mike Kravetz <kravetz@us.ibm.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: cbe-oss-dev@ozlabs.org, linuxppc-dev@ozlabs.org,
linux-mm@kvack.org,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Andy Whitcroft <apw@shadowen.org>,
Michael Kravetz <mkravetz@us.ibm.com>,
hch@infradead.org, Jeremy Kerr <jk@ozlabs.org>,
linux-kernel@vger.kernel.org, Paul Mackerras <paulus@samba.org>,
Andrew Morton <akpm@osdl.org>
Subject: Re: Bug: early_pfn_in_nid() called when not early
Date: Wed, 13 Dec 2006 15:17:17 -0800 [thread overview]
Message-ID: <20061213231717.GC10708@monkey.ibm.com> (raw)
In-Reply-To: <200612131920.59270.arnd@arndb.de>
On Wed, Dec 13, 2006 at 07:20:57PM +0100, Arnd Bergmann wrote:
> After a lot of debugging in spufs, I found that a crash that we encountered
> on Cell actually was caused by a change in the memory management.
>
> The patch that caused it is archived in http://lkml.org/lkml/2006/11/1/43,
> and this one has been discussed back and forth, but I fear that the current
> version may be broken for all setups that do memory hotplug with sparsemen
> and NUMA, at least on powerpc.
I believe you are correct. At least the memory hotplug code for powerpc
is currently broken (caused crash!).
> - both early_pfn_{in,to}_nid and early_node_map are in the __init
> section and may already have been freed at the time we are calling
> memmap_init_zone().
Well that is the root of the problem for powerpc. I believe that
__meminit attribute on memmap_init_zone() has no definition if
CONFIG_MEMORY_HOTPLUG is defined. This is so that it can be called
after boot. But, this also implies that memmap_init_zone() can not
call any routines in the __init section.
> The patch below is not a suggested fix that I want to get into mainline
> (checking slab_is_available is the wrong here), but it is a quick fix
> that you should apply if you want to run a recent (post-2.6.18) kernel
> on the IBM QS20 blade. I'm sorry for not having reported this earlier,
> but we were always trying to find the problem in my own code...
Thanks for the debug work! Just curious if you really need
CONFIG_NODES_SPAN_OTHER_NODES defined for your platform? Can you get
those types of memory layouts? If not, an easy/immediate fix for you
might be to simply turn off the option.
> --- linux-2.6.orig/mm/page_alloc.c
> +++ linux-2.6/mm/page_alloc.c
> @@ -1962,7 +1962,8 @@ void __meminit memmap_init_zone(unsigned
> for (pfn = start_pfn; pfn < end_pfn; pfn++) {
> if (!early_pfn_valid(pfn))
> continue;
> - if (!early_pfn_in_nid(pfn, nid))
> + if (!slab_is_available() &&
> + !early_pfn_in_nid(pfn, nid))
> continue;
> page = pfn_to_page(pfn);
> set_page_links(page, zone, nid, pfn);
I know you don't recommend this as a fix, but it has the interesting
quality of doing exactly what we want for powerpc. When
slab_is_available() we are performing a 'memory add' operation
and there is no need to do the 'pfn_in_nid' check. We know that
the range of added pages will all be on the same (passed) nid.
--
Mike
WARNING: multiple messages have this Message-ID (diff)
From: Mike Kravetz <kravetz@us.ibm.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: cbe-oss-dev@ozlabs.org, linuxppc-dev@ozlabs.org,
linux-mm@kvack.org,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Andy Whitcroft <apw@shadowen.org>,
Michael Kravetz <mkravetz@us.ibm.com>,
hch@infradead.org, Jeremy Kerr <jk@ozlabs.org>,
linux-kernel@vger.kernel.org, Paul Mackerras <paulus@samba.org>,
Andrew Morton <akpm@osdl.org>
Subject: Re: Bug: early_pfn_in_nid() called when not early
Date: Wed, 13 Dec 2006 15:17:17 -0800 [thread overview]
Message-ID: <20061213231717.GC10708@monkey.ibm.com> (raw)
In-Reply-To: <200612131920.59270.arnd@arndb.de>
On Wed, Dec 13, 2006 at 07:20:57PM +0100, Arnd Bergmann wrote:
> After a lot of debugging in spufs, I found that a crash that we encountered
> on Cell actually was caused by a change in the memory management.
>
> The patch that caused it is archived in http://lkml.org/lkml/2006/11/1/43,
> and this one has been discussed back and forth, but I fear that the current
> version may be broken for all setups that do memory hotplug with sparsemen
> and NUMA, at least on powerpc.
I believe you are correct. At least the memory hotplug code for powerpc
is currently broken (caused crash!).
> - both early_pfn_{in,to}_nid and early_node_map are in the __init
> section and may already have been freed at the time we are calling
> memmap_init_zone().
Well that is the root of the problem for powerpc. I believe that
__meminit attribute on memmap_init_zone() has no definition if
CONFIG_MEMORY_HOTPLUG is defined. This is so that it can be called
after boot. But, this also implies that memmap_init_zone() can not
call any routines in the __init section.
> The patch below is not a suggested fix that I want to get into mainline
> (checking slab_is_available is the wrong here), but it is a quick fix
> that you should apply if you want to run a recent (post-2.6.18) kernel
> on the IBM QS20 blade. I'm sorry for not having reported this earlier,
> but we were always trying to find the problem in my own code...
Thanks for the debug work! Just curious if you really need
CONFIG_NODES_SPAN_OTHER_NODES defined for your platform? Can you get
those types of memory layouts? If not, an easy/immediate fix for you
might be to simply turn off the option.
> --- linux-2.6.orig/mm/page_alloc.c
> +++ linux-2.6/mm/page_alloc.c
> @@ -1962,7 +1962,8 @@ void __meminit memmap_init_zone(unsigned
> for (pfn = start_pfn; pfn < end_pfn; pfn++) {
> if (!early_pfn_valid(pfn))
> continue;
> - if (!early_pfn_in_nid(pfn, nid))
> + if (!slab_is_available() &&
> + !early_pfn_in_nid(pfn, nid))
> continue;
> page = pfn_to_page(pfn);
> set_page_links(page, zone, nid, pfn);
I know you don't recommend this as a fix, but it has the interesting
quality of doing exactly what we want for powerpc. When
slab_is_available() we are performing a 'memory add' operation
and there is no need to do the 'pfn_in_nid' check. We know that
the range of added pages will all be on the same (passed) nid.
--
Mike
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2006-12-13 23:17 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-13 18:20 Bug: early_pfn_in_nid() called when not early Arnd Bergmann
2006-12-13 18:20 ` Arnd Bergmann
2006-12-13 18:20 ` Arnd Bergmann
2006-12-13 23:17 ` Mike Kravetz [this message]
2006-12-13 23:17 ` Mike Kravetz
2006-12-13 23:17 ` Mike Kravetz
2006-12-13 23:21 ` Benjamin Herrenschmidt
2006-12-13 23:21 ` Benjamin Herrenschmidt
2006-12-13 23:21 ` Benjamin Herrenschmidt
2006-12-13 23:37 ` Arnd Bergmann
2006-12-13 23:37 ` Arnd Bergmann
2006-12-13 23:37 ` Arnd Bergmann
2006-12-13 23:58 ` Paul Mackerras
2006-12-13 23:58 ` Paul Mackerras
2006-12-13 23:58 ` Paul Mackerras
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061213231717.GC10708@monkey.ibm.com \
--to=kravetz@us.ibm.com \
--cc=akpm@osdl.org \
--cc=arnd@arndb.de \
--cc=cbe-oss-dev@ozlabs.org \
--cc=hch@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@ozlabs.org \
--cc=mkravetz@us.ibm.com \
--cc=paulus@samba.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.