On Thu, Jan 23, 2014 at 2:49 PM, Dave Hansen <dave.hansen@xxxxxxxxx> wrote: > Linus's current tree doesn't boot on an 8-node/1TB NUMA system that I > have. Its reboots are *LONG*, so I haven't fully bisected it, but it's > down to a just a few commits, most of which are changes to the memblock > code. Since the panic is in the memblock code, it looks like a > no-brainer. It's almost certainly the code from Santosh or Grygorii > that's triggering this. > > Config and good/bad dmesg with memblock=debug are here: > > http://sr71.net/~dave/intel/3.13/ > > Please let me know if you need it bisected further than this. Please check attached patch, and it should fix the problem. Yinghai
Subject: [PATCH] x86: Fix numa with reverting wrong memblock setting. Dave reported Numa on x86 is broken on system with 1T memory. It turns out | commit 5b6e529521d35e1bcaa0fe43456d1bbb335cae5d | Author: Santosh Shilimkar <santosh.shilimkar@xxxxxx> | Date: Tue Jan 21 15:50:03 2014 -0800 | | x86: memblock: set current limit to max low memory address set limit to low wrongly. max_low_pfn_mapped is different from max_pfn_mapped. max_low_pfn_mapped is always under 4G. That will memblock_alloc_nid all go under 4G. Revert that offending patch. Reported-by: Dave Hansen <dave.hansen@xxxxxxxxx> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx> --- arch/x86/include/asm/page_types.h | 4 ++-- arch/x86/kernel/setup.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) Index: linux-2.6/arch/x86/include/asm/page_types.h =================================================================== --- linux-2.6.orig/arch/x86/include/asm/page_types.h +++ linux-2.6/arch/x86/include/asm/page_types.h @@ -51,9 +51,9 @@ extern int devmem_is_allowed(unsigned lo extern unsigned long max_low_pfn_mapped; extern unsigned long max_pfn_mapped; -static inline phys_addr_t get_max_low_mapped(void) +static inline phys_addr_t get_max_mapped(void) { - return (phys_addr_t)max_low_pfn_mapped << PAGE_SHIFT; + return (phys_addr_t)max_pfn_mapped << PAGE_SHIFT; } bool pfn_range_is_mapped(unsigned long start_pfn, unsigned long end_pfn); Index: linux-2.6/arch/x86/kernel/setup.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/setup.c +++ linux-2.6/arch/x86/kernel/setup.c @@ -1173,7 +1173,7 @@ void __init setup_arch(char **cmdline_p) setup_real_mode(); - memblock_set_current_limit(get_max_low_mapped()); + memblock_set_current_limit(get_max_mapped()); dma_contiguous_reserve(0); /*