* [PATCH 0/2] fix memmap init for handling memory hole v2
@ 2009-02-12 7:19 KAMEZAWA Hiroyuki
2009-02-12 7:22 ` [PATCH 1/2] clean up for early_pfn_to_nid KAMEZAWA Hiroyuki
2009-02-12 7:24 ` [PATCH 2/2] fix memmap init for handling memory hole KAMEZAWA Hiroyuki
0 siblings, 2 replies; 10+ messages in thread
From: KAMEZAWA Hiroyuki @ 2009-02-12 7:19 UTC (permalink / raw)
To: linux-kernel; +Cc: linux-mm, kosaki.motohiro, akpm, davem, heiko.carstens
This set is a replacement for
mm-fix-memmap-init-to-initialize-valid-memmap-for-memory-hole.patch (dropped)
I think this version is much cleaner than previous one.
This is a fix for routines in boot, so this can add a terrible error.
Please test when you have time. I tested on x86-64+fake NUMA.
-Kame
== from this problem.
What's happening is that the assertion in mm/page_alloc.c:move_freepages()
is triggering:
BUG_ON(page_zone(start_page) != page_zone(end_page));
Once I knew this is what was happening, I added some annotations:
if (unlikely(page_zone(start_page) != page_zone(end_page))) {
printk(KERN_ERR "move_freepages: Bogus zones: "
"start_page[%p] end_page[%p] zone[%p]\n",
start_page, end_page, zone);
printk(KERN_ERR "move_freepages: "
"start_zone[%p] end_zone[%p]\n",
page_zone(start_page), page_zone(end_page));
printk(KERN_ERR "move_freepages: "
"start_pfn[0x%lx] end_pfn[0x%lx]\n",
page_to_pfn(start_page), page_to_pfn(end_page));
printk(KERN_ERR "move_freepages: "
"start_nid[%d] end_nid[%d]\n",
page_to_nid(start_page), page_to_nid(end_page));
...
And here's what I got:
move_freepages: Bogus zones: start_page[2207d0000] end_page[2207dffc0] zone[fffff8103effcb00]
move_freepages: start_zone[fffff8103effcb00] end_zone[fffff8003fffeb00]
move_freepages: start_pfn[0x81f600] end_pfn[0x81f7ff]
move_freepages: start_nid[1] end_nid[0]
My memory layout on this box is:
[ 0.000000] Zone PFN ranges:
[ 0.000000] Normal 0x00000000 -> 0x0081ff5d
[ 0.000000] Movable zone start PFN for each node
[ 0.000000] early_node_map[8] active PFN ranges
[ 0.000000] 0: 0x00000000 -> 0x00020000
[ 0.000000] 1: 0x00800000 -> 0x0081f7ff
[ 0.000000] 1: 0x0081f800 -> 0x0081fe50
[ 0.000000] 1: 0x0081fed1 -> 0x0081fed8
[ 0.000000] 1: 0x0081feda -> 0x0081fedb
[ 0.000000] 1: 0x0081fedd -> 0x0081fee5
[ 0.000000] 1: 0x0081fee7 -> 0x0081ff51
[ 0.000000] 1: 0x0081ff59 -> 0x0081ff5d
So it's a block move in that 0x81f600-->0x81f7ff region which triggers
the problem.
--
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>
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 1/2] clean up for early_pfn_to_nid 2009-02-12 7:19 [PATCH 0/2] fix memmap init for handling memory hole v2 KAMEZAWA Hiroyuki @ 2009-02-12 7:22 ` KAMEZAWA Hiroyuki 2009-02-13 6:14 ` KOSAKI Motohiro 2009-02-13 22:20 ` Andrew Morton 2009-02-12 7:24 ` [PATCH 2/2] fix memmap init for handling memory hole KAMEZAWA Hiroyuki 1 sibling, 2 replies; 10+ messages in thread From: KAMEZAWA Hiroyuki @ 2009-02-12 7:22 UTC (permalink / raw) To: KAMEZAWA Hiroyuki Cc: linux-kernel, linux-mm, kosaki.motohiro, akpm, davem, heiko.carstens From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Declaration of early_pfn_to_nid() is scattered over per-arch include files, and it seems it's complicated to know when the declaration is used. I think it makes fix-for-memmap-init not easy. This patch moves all declaration to include/linux/mm.h After this, if !CONFIG_NODES_POPULATES_NODE_MAP && !CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID -> Use static definition in include/linux/mm.h else if !CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID -> Use generic definition in mm/page_alloc.c else -> per-arch back end function will be called. Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> --- arch/ia64/include/asm/mmzone.h | 4 ---- arch/ia64/mm/numa.c | 2 +- arch/x86/include/asm/mmzone_32.h | 2 -- arch/x86/include/asm/mmzone_64.h | 2 -- arch/x86/mm/numa_64.c | 2 +- include/linux/mm.h | 19 ++++++++++++++++--- mm/page_alloc.c | 8 +++++++- 7 files changed, 25 insertions(+), 14 deletions(-) Index: mmotm-2.6.29-Feb11/include/linux/mm.h =================================================================== --- mmotm-2.6.29-Feb11.orig/include/linux/mm.h +++ mmotm-2.6.29-Feb11/include/linux/mm.h @@ -1047,10 +1047,23 @@ extern void free_bootmem_with_active_reg typedef int (*work_fn_t)(unsigned long, unsigned long, void *); extern void work_with_active_regions(int nid, work_fn_t work_fn, void *data); extern void sparse_memory_present_with_active_regions(int nid); -#ifndef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID -extern int early_pfn_to_nid(unsigned long pfn); -#endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ #endif /* CONFIG_ARCH_POPULATES_NODE_MAP */ + +#if !defined(CONFIG_ARCH_POPULATES_NODE_MAP) && \ + !defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID) +static inline int __early_pfn_to_nid(unsigned long pfn) +{ + return 0; +} +#else +/* please see mm/page_alloc.c */ +extern int __meminit early_pfn_to_nid(unsigned long pfn); +#ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID +/* there is a per-arch backend function. */ +extern int __meminit __early_pfn_to_nid(unsigned long pfn); +#endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ +#endif + extern void set_dma_reserve(unsigned long new_dma_reserve); extern void memmap_init_zone(unsigned long, int, unsigned long, unsigned long, enum memmap_context); Index: mmotm-2.6.29-Feb11/arch/x86/include/asm/mmzone_32.h =================================================================== --- mmotm-2.6.29-Feb11.orig/arch/x86/include/asm/mmzone_32.h +++ mmotm-2.6.29-Feb11/arch/x86/include/asm/mmzone_32.h @@ -32,8 +32,6 @@ static inline void get_memcfg_numa(void) get_memcfg_numa_flat(); } -extern int early_pfn_to_nid(unsigned long pfn); - extern void resume_map_numa_kva(pgd_t *pgd); #else /* !CONFIG_NUMA */ Index: mmotm-2.6.29-Feb11/arch/x86/include/asm/mmzone_64.h =================================================================== --- mmotm-2.6.29-Feb11.orig/arch/x86/include/asm/mmzone_64.h +++ mmotm-2.6.29-Feb11/arch/x86/include/asm/mmzone_64.h @@ -40,8 +40,6 @@ static inline __attribute__((pure)) int #define node_end_pfn(nid) (NODE_DATA(nid)->node_start_pfn + \ NODE_DATA(nid)->node_spanned_pages) -extern int early_pfn_to_nid(unsigned long pfn); - #ifdef CONFIG_NUMA_EMU #define FAKE_NODE_MIN_SIZE (64 * 1024 * 1024) #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL)) Index: mmotm-2.6.29-Feb11/arch/ia64/include/asm/mmzone.h =================================================================== --- mmotm-2.6.29-Feb11.orig/arch/ia64/include/asm/mmzone.h +++ mmotm-2.6.29-Feb11/arch/ia64/include/asm/mmzone.h @@ -31,10 +31,6 @@ static inline int pfn_to_nid(unsigned lo #endif } -#ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID -extern int early_pfn_to_nid(unsigned long pfn); -#endif - #ifdef CONFIG_IA64_DIG /* DIG systems are small */ # define MAX_PHYSNODE_ID 8 # define NR_NODE_MEMBLKS (MAX_NUMNODES * 8) Index: mmotm-2.6.29-Feb11/arch/ia64/mm/numa.c =================================================================== --- mmotm-2.6.29-Feb11.orig/arch/ia64/mm/numa.c +++ mmotm-2.6.29-Feb11/arch/ia64/mm/numa.c @@ -58,7 +58,7 @@ paddr_to_nid(unsigned long paddr) * SPARSEMEM to allocate the SPARSEMEM sectionmap on the NUMA node where * the section resides. */ -int early_pfn_to_nid(unsigned long pfn) +int __meminit __early_pfn_to_nid(unsigned long pfn) { int i, section = pfn >> PFN_SECTION_SHIFT, ssec, esec; Index: mmotm-2.6.29-Feb11/arch/x86/mm/numa_64.c =================================================================== --- mmotm-2.6.29-Feb11.orig/arch/x86/mm/numa_64.c +++ mmotm-2.6.29-Feb11/arch/x86/mm/numa_64.c @@ -166,7 +166,7 @@ int __init compute_hash_shift(struct boo return shift; } -int early_pfn_to_nid(unsigned long pfn) +int __meminit __early_pfn_to_nid(unsigned long pfn) { return phys_to_nid(pfn << PAGE_SHIFT); } Index: mmotm-2.6.29-Feb11/mm/page_alloc.c =================================================================== --- mmotm-2.6.29-Feb11.orig/mm/page_alloc.c +++ mmotm-2.6.29-Feb11/mm/page_alloc.c @@ -2974,7 +2974,7 @@ static int __meminit next_active_region_ * was used and there are no special requirements, this is a convenient * alternative */ -int __meminit early_pfn_to_nid(unsigned long pfn) +int __meminit __early_pfn_to_nid(unsigned long pfn) { int i; @@ -2990,6 +2990,12 @@ int __meminit early_pfn_to_nid(unsigned } #endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ +int __meminit early_pfn_to_nid(unsigned long pfn) +{ + return __early_pfn_to_nid(pfn); +} + + /* Basic iterator support to walk early_node_map[] */ #define for_each_active_range_index_in_nid(i, nid) \ for (i = first_active_region_index_in_nid(nid); i != -1; \ -- 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> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] clean up for early_pfn_to_nid 2009-02-12 7:22 ` [PATCH 1/2] clean up for early_pfn_to_nid KAMEZAWA Hiroyuki @ 2009-02-13 6:14 ` KOSAKI Motohiro 2009-02-13 22:20 ` Andrew Morton 1 sibling, 0 replies; 10+ messages in thread From: KOSAKI Motohiro @ 2009-02-13 6:14 UTC (permalink / raw) To: KAMEZAWA Hiroyuki Cc: kosaki.motohiro, linux-kernel, linux-mm, akpm, davem, heiko.carstens, Mel Gorman > From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> > > Declaration of early_pfn_to_nid() is scattered over per-arch include files, > and it seems it's complicated to know when the declaration is used. > I think it makes fix-for-memmap-init not easy. > > This patch moves all declaration to include/linux/mm.h > > After this, > if !CONFIG_NODES_POPULATES_NODE_MAP && !CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID > -> Use static definition in include/linux/mm.h > else if !CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID > -> Use generic definition in mm/page_alloc.c > else > -> per-arch back end function will be called. > > Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> at least, this patch works fine on my ia64 box. Tested-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> -- 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> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] clean up for early_pfn_to_nid 2009-02-12 7:22 ` [PATCH 1/2] clean up for early_pfn_to_nid KAMEZAWA Hiroyuki 2009-02-13 6:14 ` KOSAKI Motohiro @ 2009-02-13 22:20 ` Andrew Morton 2009-02-13 23:38 ` KAMEZAWA Hiroyuki 2009-02-14 6:12 ` David Miller 1 sibling, 2 replies; 10+ messages in thread From: Andrew Morton @ 2009-02-13 22:20 UTC (permalink / raw) To: KAMEZAWA Hiroyuki Cc: linux-kernel, linux-mm, kosaki.motohiro, davem, heiko.carstens, stable On Thu, 12 Feb 2009 16:22:03 +0900 KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote: > Declaration of early_pfn_to_nid() is scattered over per-arch include files, > and it seems it's complicated to know when the declaration is used. > I think it makes fix-for-memmap-init not easy. > > This patch moves all declaration to include/linux/mm.h > > After this, > if !CONFIG_NODES_POPULATES_NODE_MAP && !CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID > -> Use static definition in include/linux/mm.h > else if !CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID > -> Use generic definition in mm/page_alloc.c > else > -> per-arch back end function will be called. > > Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> > > --- > arch/ia64/include/asm/mmzone.h | 4 ---- > arch/ia64/mm/numa.c | 2 +- > arch/x86/include/asm/mmzone_32.h | 2 -- > arch/x86/include/asm/mmzone_64.h | 2 -- > arch/x86/mm/numa_64.c | 2 +- > include/linux/mm.h | 19 ++++++++++++++++--- > mm/page_alloc.c | 8 +++++++- > 7 files changed, 25 insertions(+), 14 deletions(-) It's rather unfortunate that this bugfix includes a fair-sized cleanup patch, because we should backport it into 2.6.28.x. Oh well. I queued these as mm-clean-up-for-early_pfn_to_nid.patch mm-fix-memmap-init-for-handling-memory-hole.patch and tagged them as needed-in-2.6.28.x. I don't recall whether they are needed in earlier -stable releases? I don't have a record here of davem having tested these new patches, btw ;) -- 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> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] clean up for early_pfn_to_nid 2009-02-13 22:20 ` Andrew Morton @ 2009-02-13 23:38 ` KAMEZAWA Hiroyuki 2009-02-14 6:12 ` David Miller 1 sibling, 0 replies; 10+ messages in thread From: KAMEZAWA Hiroyuki @ 2009-02-13 23:38 UTC (permalink / raw) To: Andrew Morton Cc: KAMEZAWA Hiroyuki, linux-kernel, linux-mm, kosaki.motohiro, davem, heiko.carstens, stable Andrew Morton wrote: > On Thu, 12 Feb 2009 16:22:03 +0900 > KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> wrote: > >> Declaration of early_pfn_to_nid() is scattered over per-arch include >> files, >> and it seems it's complicated to know when the declaration is used. >> I think it makes fix-for-memmap-init not easy. >> >> This patch moves all declaration to include/linux/mm.h >> >> After this, >> if !CONFIG_NODES_POPULATES_NODE_MAP && >> !CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID >> -> Use static definition in include/linux/mm.h >> else if !CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID >> -> Use generic definition in mm/page_alloc.c >> else >> -> per-arch back end function will be called. >> >> Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> >> >> --- >> arch/ia64/include/asm/mmzone.h | 4 ---- >> arch/ia64/mm/numa.c | 2 +- >> arch/x86/include/asm/mmzone_32.h | 2 -- >> arch/x86/include/asm/mmzone_64.h | 2 -- >> arch/x86/mm/numa_64.c | 2 +- >> include/linux/mm.h | 19 ++++++++++++++++--- >> mm/page_alloc.c | 8 +++++++- >> 7 files changed, 25 insertions(+), 14 deletions(-) > > It's rather unfortunate that this bugfix includes a fair-sized cleanup > patch, because we should backport it into 2.6.28.x. > > Oh well. > Sorry..but this part was too ugly to write a patch that convince me this patch is correct. If I should rewrite, I'll do. > I queued these as > > mm-clean-up-for-early_pfn_to_nid.patch > mm-fix-memmap-init-for-handling-memory-hole.patch > > and tagged them as needed-in-2.6.28.x. I don't recall whether they are > needed in earlier -stable releases? > Maybe necessary for some machines, which may access memory holes. > I don't have a record here of davem having tested these new patches, btw > ;) Sorry for bad CC. This fix's logic itself is not different from original one. -Kame -- 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> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] clean up for early_pfn_to_nid 2009-02-13 22:20 ` Andrew Morton 2009-02-13 23:38 ` KAMEZAWA Hiroyuki @ 2009-02-14 6:12 ` David Miller 2009-02-16 0:50 ` KAMEZAWA Hiroyuki 1 sibling, 1 reply; 10+ messages in thread From: David Miller @ 2009-02-14 6:12 UTC (permalink / raw) To: akpm Cc: kamezawa.hiroyu, linux-kernel, linux-mm, kosaki.motohiro, davem, heiko.carstens, stable From: Andrew Morton <akpm@linux-foundation.org> Date: Fri, 13 Feb 2009 14:20:32 -0800 > I queued these as > > mm-clean-up-for-early_pfn_to_nid.patch > mm-fix-memmap-init-for-handling-memory-hole.patch > > and tagged them as needed-in-2.6.28.x. I don't recall whether they are > needed in earlier -stable releases? Every kernel going back to at least 2.6.24 has this bug. It's likely been around even longer, I didn't bother checking. -- 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> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] clean up for early_pfn_to_nid 2009-02-14 6:12 ` David Miller @ 2009-02-16 0:50 ` KAMEZAWA Hiroyuki 2009-02-27 6:37 ` David Miller 0 siblings, 1 reply; 10+ messages in thread From: KAMEZAWA Hiroyuki @ 2009-02-16 0:50 UTC (permalink / raw) To: David Miller Cc: akpm, linux-kernel, linux-mm, kosaki.motohiro, davem, heiko.carstens, stable On Fri, 13 Feb 2009 22:12:26 -0800 (PST) David Miller <davem@davemloft.net> wrote: > From: Andrew Morton <akpm@linux-foundation.org> > Date: Fri, 13 Feb 2009 14:20:32 -0800 > > > I queued these as > > > > mm-clean-up-for-early_pfn_to_nid.patch > > mm-fix-memmap-init-for-handling-memory-hole.patch > > > > and tagged them as needed-in-2.6.28.x. I don't recall whether they are > > needed in earlier -stable releases? > > Every kernel going back to at least 2.6.24 has this bug. It's likely > been around even longer, I didn't bother checking. > Sparc64's one is broken from this commit. 09337f501ebdd224cd69df6d168a5c4fe75d86fa sparc64: Kill CONFIG_SPARC32_COMPAT CONFIG_NODES_SPAN_OTEHR_NODES is set and config allows following kind of NUMA This is requirements from powerpc. low address ---<- max order ->---- high address [Node0][Node1][Node0] So, nid is checked at memmap init. But it included this bug in following case. low address ---<- max order ->---- high address [Node0][Hole][Node0] Hmm..I'm not sure how many kind of machines will see this bug. But there may be some. [kamezawa@bluextal linux-2.6.28]$ grep -R CONFIG_NODES_SPAN arch/* arch/powerpc/configs/celleb_defconfig:CONFIG_NODES_SPAN_OTHER_NODES=y arch/powerpc/configs/pseries_defconfig:CONFIG_NODES_SPAN_OTHER_NODES=y arch/powerpc/configs/cell_defconfig:CONFIG_NODES_SPAN_OTHER_NODES=y arch/sparc64/defconfig:CONFIG_NODES_SPAN_OTHER_NODES=y arch/x86/configs/x86_64_defconfig:CONFIG_NODES_SPAN_OTHER_NODES=y powerpc/sparc64/x86 can see this bug. IMHO, following 2 arch will be safe because.. On x86-64, it seems it doesn't allows above style of memmap. (BUG_ON() will hit) Powerpc is originator of this CONFIG_NODES_SPAN_OTHER_NODES and they did test. Thanks, -Kame -- 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> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] clean up for early_pfn_to_nid 2009-02-16 0:50 ` KAMEZAWA Hiroyuki @ 2009-02-27 6:37 ` David Miller 0 siblings, 0 replies; 10+ messages in thread From: David Miller @ 2009-02-27 6:37 UTC (permalink / raw) To: kamezawa.hiroyu Cc: akpm, linux-kernel, linux-mm, kosaki.motohiro, davem, heiko.carstens, stable From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Date: Mon, 16 Feb 2009 09:50:42 +0900 > On Fri, 13 Feb 2009 22:12:26 -0800 (PST) > David Miller <davem@davemloft.net> wrote: > > > From: Andrew Morton <akpm@linux-foundation.org> > > Date: Fri, 13 Feb 2009 14:20:32 -0800 > > > > > I queued these as > > > > > > mm-clean-up-for-early_pfn_to_nid.patch > > > mm-fix-memmap-init-for-handling-memory-hole.patch > > > > > > and tagged them as needed-in-2.6.28.x. I don't recall whether they are > > > needed in earlier -stable releases? > > > > Every kernel going back to at least 2.6.24 has this bug. It's likely > > been around even longer, I didn't bother checking. > > > > Sparc64's one is broken from this commit. > > 09337f501ebdd224cd69df6d168a5c4fe75d86fa > sparc64: Kill CONFIG_SPARC32_COMPAT > > CONFIG_NODES_SPAN_OTEHR_NODES is set and config allows following kind of NUMA > This is requirements from powerpc. Well, actually this means that what broke sparc64 was the addition of NUMA support then. Users could and were enabling these options on sparc64 beforehand, I just updated defconfig to reflect the fact that my workstation was NUMA capable :) -- 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> ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2/2] fix memmap init for handling memory hole 2009-02-12 7:19 [PATCH 0/2] fix memmap init for handling memory hole v2 KAMEZAWA Hiroyuki 2009-02-12 7:22 ` [PATCH 1/2] clean up for early_pfn_to_nid KAMEZAWA Hiroyuki @ 2009-02-12 7:24 ` KAMEZAWA Hiroyuki 2009-02-13 6:15 ` KOSAKI Motohiro 1 sibling, 1 reply; 10+ messages in thread From: KAMEZAWA Hiroyuki @ 2009-02-12 7:24 UTC (permalink / raw) To: KAMEZAWA Hiroyuki Cc: linux-kernel, linux-mm, kosaki.motohiro, akpm, davem, heiko.carstens From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Now, early_pfn_in_nid(PFN, NID) may returns false if PFN is a hole. and memmap initialization was not done. This was a trouble for sparc boot. To fix this, the PFN should be initialized and marked as PG_reserved. This patch changes early_pfn_in_nid() return true if PFN is a hole. Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> --- arch/ia64/mm/numa.c | 2 +- include/linux/mmzone.h | 2 +- mm/page_alloc.c | 23 ++++++++++++++++++++--- 3 files changed, 22 insertions(+), 5 deletions(-) Index: mmotm-2.6.29-Feb11/mm/page_alloc.c =================================================================== --- mmotm-2.6.29-Feb11.orig/mm/page_alloc.c +++ mmotm-2.6.29-Feb11/mm/page_alloc.c @@ -2985,16 +2985,33 @@ int __meminit __early_pfn_to_nid(unsigne if (start_pfn <= pfn && pfn < end_pfn) return early_node_map[i].nid; } - - return 0; + /* This is a memory hole */ + return -1; } #endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */ int __meminit early_pfn_to_nid(unsigned long pfn) { - return __early_pfn_to_nid(pfn); + int nid; + + nid = __early_pfn_to_nid(pfn); + if (nid >= 0) + return nid; + /* just returns 0 */ + return 0; } +#ifdef CONFIG_NODES_SPAN_OTHER_NODES +bool __meminit early_pfn_in_nid(unsigned long pfn, int node) +{ + int nid; + + nid = __early_pfn_to_nid(pfn); + if (nid >= 0 && nid != node) + return false; + return true; +} +#endif /* Basic iterator support to walk early_node_map[] */ #define for_each_active_range_index_in_nid(i, nid) \ Index: mmotm-2.6.29-Feb11/include/linux/mmzone.h =================================================================== --- mmotm-2.6.29-Feb11.orig/include/linux/mmzone.h +++ mmotm-2.6.29-Feb11/include/linux/mmzone.h @@ -1079,7 +1079,7 @@ void sparse_init(void); #endif /* CONFIG_SPARSEMEM */ #ifdef CONFIG_NODES_SPAN_OTHER_NODES -#define early_pfn_in_nid(pfn, nid) (early_pfn_to_nid(pfn) == (nid)) +bool early_pfn_in_nid(unsigned long pfn, int nid); #else #define early_pfn_in_nid(pfn, nid) (1) #endif Index: mmotm-2.6.29-Feb11/arch/ia64/mm/numa.c =================================================================== --- mmotm-2.6.29-Feb11.orig/arch/ia64/mm/numa.c +++ mmotm-2.6.29-Feb11/arch/ia64/mm/numa.c @@ -70,7 +70,7 @@ int __meminit __early_pfn_to_nid(unsigne return node_memblk[i].nid; } - return 0; + return -1; } #ifdef CONFIG_MEMORY_HOTPLUG -- 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> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2/2] fix memmap init for handling memory hole 2009-02-12 7:24 ` [PATCH 2/2] fix memmap init for handling memory hole KAMEZAWA Hiroyuki @ 2009-02-13 6:15 ` KOSAKI Motohiro 0 siblings, 0 replies; 10+ messages in thread From: KOSAKI Motohiro @ 2009-02-13 6:15 UTC (permalink / raw) To: KAMEZAWA Hiroyuki Cc: kosaki.motohiro, linux-kernel, linux-mm, akpm, davem, heiko.carstens, Mel Gorman > From: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> > > Now, early_pfn_in_nid(PFN, NID) may returns false if PFN is a hole. > and memmap initialization was not done. This was a trouble for > sparc boot. > > To fix this, the PFN should be initialized and marked as PG_reserved. > This patch changes early_pfn_in_nid() return true if PFN is a hole. > > Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> at least, this patch works fine on my ia64 box. Tested-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> -- 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> ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2009-02-27 6:37 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2009-02-12 7:19 [PATCH 0/2] fix memmap init for handling memory hole v2 KAMEZAWA Hiroyuki 2009-02-12 7:22 ` [PATCH 1/2] clean up for early_pfn_to_nid KAMEZAWA Hiroyuki 2009-02-13 6:14 ` KOSAKI Motohiro 2009-02-13 22:20 ` Andrew Morton 2009-02-13 23:38 ` KAMEZAWA Hiroyuki 2009-02-14 6:12 ` David Miller 2009-02-16 0:50 ` KAMEZAWA Hiroyuki 2009-02-27 6:37 ` David Miller 2009-02-12 7:24 ` [PATCH 2/2] fix memmap init for handling memory hole KAMEZAWA Hiroyuki 2009-02-13 6:15 ` KOSAKI Motohiro
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox