Skip to contentSkip to conversation

x86/mm changes for v3.3

GIT PULL Ingo Molnar 2 participants 3 messages Jan 5, 2012 – Jan 7, 2012

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

Linus,

Please pull the latest x86-mm-for-linus git tree from:

git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-mm-for-linus

out-of-topic modifications in x86-mm-for-linus:
-----------------------------------------------
include/linux/mm.h # 54c29c6: mm, x86: Remove debug_pagealloc_e
mm/debug-pagealloc.c # 54c29c6: mm, x86: Remove debug_pagealloc_e

Thanks,

Ingo

------------------>
H Hartley Sweeten (1):
arch/x86/kernel/e820.c: quiet sparse noise about plain integer as NULL pointer

Ludwig Nussel (1):
x86: Fix mmap random address range

Mike Ditto (1):
arch/x86/kernel/e820.c: Eliminate bubble sort from sanitize_e820_map()

Pekka Enberg (7):
x86, mm: Use MAX_DMA_PFN for ZONE_DMA on 32-bit x86, mm: Move zone init from paging_init() on 64-bit x86, mm: Use max_pfn instead of highend_pfn x86, mm: Wrap ZONE_DMA32 with CONFIG_ZONE_DMA32 x86, mm: Use max_low_pfn for ZONE_NORMAL on 64-bit x86, mm: Prepare zone_sizes_init() for unification x86, mm: Unify zone_sizes_init()

Petr Holasek (1):
x86/numa: Add constraints check for nid parameters

Stanislaw Gruszka (2):
x86/mm: Initialize high mem before free_all_bootmem() mm, x86: Remove debug_pagealloc_enabled

 arch/x86/include/asm/init.h |    2 +
 arch/x86/kernel/e820.c      |   59 +++++++++++++++++-------------------------
 arch/x86/mm/init.c          |   23 ++++++++++++++++
 arch/x86/mm/init_32.c       |   29 ++++++++-------------
 arch/x86/mm/init_64.c       |   11 +-------
 arch/x86/mm/mmap.c          |    4 +-
 arch/x86/mm/numa.c          |   10 ++++---
 arch/x86/mm/pageattr.c      |    6 ----
 include/linux/mm.h          |   10 -------
 init/main.c                 |    5 ---
 mm/debug-pagealloc.c        |    3 --
 11 files changed, 69 insertions(+), 93 deletions(-)
arch/x86/include/asm/init.h +2 -0
index 8dbe353..adcc0ae 100644
@@ -5,6 +5,8 @@
 extern void __init early_ioremap_page_table_range_init(void);
 #endif
 
+extern void __init zone_sizes_init(void);
+
 extern unsigned long __init
 kernel_physical_mapping_init(unsigned long start,
 			     unsigned long end,
arch/x86/kernel/e820.c +24 -35

87 lines not on this page · raw message

arch/x86/mm/init.c +23 -0
index 87488b9..2426b60 100644
@@ -3,6 +3,7 @@
 #include <linux/ioport.h>
 #include <linux/swap.h>
 #include <linux/memblock.h>
+#include <linux/bootmem.h>	/* for max_low_pfn */
 
 #include <asm/cacheflush.h>
 #include <asm/e820.h>
@@ -15,6 +16,7 @@
 #include <asm/tlbflush.h>
 #include <asm/tlb.h>
 #include <asm/proto.h>
+#include <asm/dma.h>		/* for MAX_DMA_PFN */
 
 unsigned long __initdata pgt_buf_start;
 unsigned long __meminitdata pgt_buf_end;
@@ -392,3 +394,24 @@ void free_initrd_mem(unsigned long start, unsigned long end)
 	free_init_pages("initrd memory", start, PAGE_ALIGN(end));
 }
 #endif
+
+void __init zone_sizes_init(void)
+{
+	unsigned long max_zone_pfns[MAX_NR_ZONES];
+
+	memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
+
+#ifdef CONFIG_ZONE_DMA
+	max_zone_pfns[ZONE_DMA]		= MAX_DMA_PFN;
+#endif
+#ifdef CONFIG_ZONE_DMA32
+	max_zone_pfns[ZONE_DMA32]	= MAX_DMA32_PFN;
+#endif
+	max_zone_pfns[ZONE_NORMAL]	= max_low_pfn;
+#ifdef CONFIG_HIGHMEM
+	max_zone_pfns[ZONE_HIGHMEM]	= max_pfn;
+#endif
+
+	free_area_init_nodes(max_zone_pfns);
+}
+
arch/x86/mm/init_32.c +11 -18
index 29f7c6d..a2fecb1 100644
@@ -674,22 +674,6 @@ void __init initmem_init(void)
 }
 #endif /* !CONFIG_NEED_MULTIPLE_NODES */
 
-static void __init zone_sizes_init(void)
-{
-	unsigned long max_zone_pfns[MAX_NR_ZONES];
-	memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
-#ifdef CONFIG_ZONE_DMA
-	max_zone_pfns[ZONE_DMA] =
-		virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
-#endif
-	max_zone_pfns[ZONE_NORMAL] = max_low_pfn;
-#ifdef CONFIG_HIGHMEM
-	max_zone_pfns[ZONE_HIGHMEM] = highend_pfn;
-#endif
-
-	free_area_init_nodes(max_zone_pfns);
-}
-
 void __init setup_bootmem_allocator(void)
 {
 	printk(KERN_INFO "  mapped low ram: 0 - %08lx\n",
@@ -760,6 +744,17 @@ void __init mem_init(void)
 #ifdef CONFIG_FLATMEM
 	BUG_ON(!mem_map);
 #endif
+	/*
+	 * With CONFIG_DEBUG_PAGEALLOC initialization of highmem pages has to
+	 * be done before free_all_bootmem(). Memblock use free low memory for
+	 * temporary data (see find_range_array()) and for this purpose can use
+	 * pages that was already passed to the buddy allocator, hence marked as
+	 * not accessible in the page tables when compiled with
+	 * CONFIG_DEBUG_PAGEALLOC. Otherwise order of initialization is not
+	 * important here.
+	 */
+	set_highmem_pages_init();
+
 	/* this will put all low memory onto the freelists */
 	totalram_pages += free_all_bootmem();
 
@@ -771,8 +766,6 @@ void __init mem_init(void)
 		if (page_is_ram(tmp) && PageReserved(pfn_to_page(tmp)))
 			reservedpages++;
 
-	set_highmem_pages_init();
-
 	codesize =  (unsigned long) &_etext - (unsigned long) &_text;
 	datasize =  (unsigned long) &_edata - (unsigned long) &_etext;
 	initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
arch/x86/mm/init_64.c +1 -10
index bbaaa00..6fcce7d 100644
@@ -614,15 +614,6 @@ void __init initmem_init(void)
 
 void __init paging_init(void)
 {
-	unsigned long max_zone_pfns[MAX_NR_ZONES];
-
-	memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
-#ifdef CONFIG_ZONE_DMA
-	max_zone_pfns[ZONE_DMA] = MAX_DMA_PFN;
-#endif
-	max_zone_pfns[ZONE_DMA32] = MAX_DMA32_PFN;
-	max_zone_pfns[ZONE_NORMAL] = max_pfn;
-
 	sparse_memory_present_with_active_regions(MAX_NUMNODES);
 	sparse_init();
 
@@ -634,7 +625,7 @@ void __init paging_init(void)
 	 */
 	node_clear_state(0, N_NORMAL_MEMORY);
 
-	free_area_init_nodes(max_zone_pfns);
+	zone_sizes_init();
 }
 
 /*
arch/x86/mm/mmap.c +2 -2
index 4b5ba85..845df68 100644
@@ -75,9 +75,9 @@ static unsigned long mmap_rnd(void)
 	*/
 	if (current->flags & PF_RANDOMIZE) {
 		if (mmap_is_ia32())
-			rnd = (long)get_random_int() % (1<<8);
+			rnd = get_random_int() % (1<<8);
 		else
-			rnd = (long)(get_random_int() % (1<<28));
+			rnd = get_random_int() % (1<<28);
 	}
 	return rnd << PAGE_SHIFT;
 }
arch/x86/mm/numa.c +6 -4
index fbeaaf4..cdc0054 100644
@@ -430,8 +430,9 @@ static int __init numa_alloc_distance(void)
  * calls are ignored until the distance table is reset with
  * numa_reset_distance().
  *
- * If @from or @to is higher than the highest known node at the time of
- * table creation or @distance doesn't make sense, the call is ignored.
+ * If @from or @to is higher than the highest known node or lower than zero
+ * at the time of table creation or @distance doesn't make sense, the call
+ * is ignored.
  * This is to allow simplification of specific NUMA config implementations.
  */
 void __init numa_set_distance(int from, int to, int distance)
@@ -439,8 +440,9 @@ void __init numa_set_distance(int from, int to, int distance)
 	if (!numa_distance && numa_alloc_distance() < 0)
 		return;
 
-	if (from >= numa_distance_cnt || to >= numa_distance_cnt) {
-		printk_once(KERN_DEBUG "NUMA: Debug: distance out of bound, from=%d to=%d distance=%d\n",
+	if (from >= numa_distance_cnt || to >= numa_distance_cnt ||
+			from < 0 || to < 0) {
+		pr_warn_once("NUMA: Warning: node ids are out of bound, from=%d to=%d distance=%d\n",
 			    from, to, distance);
 		return;
 	}
arch/x86/mm/pageattr.c +0 -6
index f9e5267..5031eef 100644
@@ -1334,12 +1334,6 @@ void kernel_map_pages(struct page *page, int numpages, int enable)
 	}
 
 	/*
-	 * If page allocator is not up yet then do not call c_p_a():
-	 */
-	if (!debug_pagealloc_enabled)
-		return;
-
-	/*
 	 * The return value is ignored as the calls cannot fail.
 	 * Large pages for identity mappings are not used at boot time
 	 * and hence no memory allocations during large page split.
include/linux/mm.h +0 -10
index 3dc3a8c..0a22db1 100644
@@ -1537,23 +1537,13 @@ static inline void vm_stat_account(struct mm_struct *mm,
 #endif /* CONFIG_PROC_FS */
 
 #ifdef CONFIG_DEBUG_PAGEALLOC
-extern int debug_pagealloc_enabled;
-
 extern void kernel_map_pages(struct page *page, int numpages, int enable);
-
-static inline void enable_debug_pagealloc(void)
-{
-	debug_pagealloc_enabled = 1;
-}
 #ifdef CONFIG_HIBERNATION
 extern bool kernel_page_present(struct page *page);
 #endif /* CONFIG_HIBERNATION */
 #else
 static inline void
 kernel_map_pages(struct page *page, int numpages, int enable) {}
-static inline void enable_debug_pagealloc(void)
-{
-}
 #ifdef CONFIG_HIBERNATION
 static inline bool kernel_page_present(struct page *page) { return true; }
 #endif /* CONFIG_HIBERNATION */
init/main.c +0 -5
index 217ed23..99c4ba3 100644
@@ -282,10 +282,6 @@ static int __init unknown_bootoption(char *param, char *val)
 	return 0;
 }
 
-#ifdef CONFIG_DEBUG_PAGEALLOC
-int __read_mostly debug_pagealloc_enabled = 0;
-#endif
-
 static int __init init_setup(char *str)
 {
 	unsigned int i;
@@ -597,7 +593,6 @@ asmlinkage void __init start_kernel(void)
 	}
 #endif
 	page_cgroup_init();
-	enable_debug_pagealloc();
 	debug_objects_mem_init();
 	kmemleak_init();
 	setup_per_cpu_pageset();
mm/debug-pagealloc.c +0 -3
index 7cea557..789ff70 100644
@@ -95,9 +95,6 @@ static void unpoison_pages(struct page *page, int n)
 
 void kernel_map_pages(struct page *page, int numpages, int enable)
 {
-	if (!debug_pagealloc_enabled)
-		return;
-
 	if (enable)
 		unpoison_pages(page, numpages);
 	else
#1 lore raw
Quoted 4 lines · Ingo Molnar

Please pull the latest x86-mm-for-linus git tree from:

  git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-mm-for-linus

What I get from there does not match what you describe AT ALL:

Quoted 18 lines

H Hartley Sweeten (1):
     arch/x86/kernel/e820.c: quiet sparse noise about plain integer as NULL pointer

Ludwig Nussel (1):
     x86: Fix mmap random address range

Mike Ditto (1):
     arch/x86/kernel/e820.c: Eliminate bubble sort from sanitize_e820_map()

Pekka Enberg (7):
     x86, mm: Use MAX_DMA_PFN for ZONE_DMA on 32-bit x86, mm: Move zone init from paging_init() on 64-bit x86, mm: Use max_pfn instead of highend_pfn x86, mm: Wrap ZONE_DMA32 with CONFIG_ZONE_DMA32 x86, mm: Use max_low_pfn for ZONE_NORMAL on 64-bit x86, mm: Prepare zone_sizes_init() for unification x86, mm: Unify zone_sizes_init()

Quoted 6 lines

Petr Holasek (1):
     x86/numa: Add constraints check for nid parameters

Stanislaw Gruszka (2):
     x86/mm: Initialize high mem before free_all_bootmem() mm, x86: Remove debug_pagealloc_enabled

Instead of the above, I see

Stefano Stabellini (5):
x86, mm: Calculate precisely the memory needed by init_memory_mapping Revert "x86,xen: introduce x86_init.mapping.pagetable_reserve" x86, init : Move memblock_x86_reserve_range PGTABLE to
find_early_table_space
x86-64, mm: Do not assume head_64.S used 4KB pages when !use_pse
x86_32: Calculate additional memory needed by the fixmap

which is old and crappy.

What the heck is going on, Ingo?

Linus

#2 lore raw
Quoted 43 lines · Linus Torvalds
Quoted 4 lines · Ingo Molnar

Please pull the latest x86-mm-for-linus git tree from:

  git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-mm-for-linus

What I get from there does not match what you describe AT ALL:

Quoted 18 lines

H Hartley Sweeten (1):
     arch/x86/kernel/e820.c: quiet sparse noise about plain integer as NULL pointer

Ludwig Nussel (1):
     x86: Fix mmap random address range

Mike Ditto (1):
     arch/x86/kernel/e820.c: Eliminate bubble sort from sanitize_e820_map()

Pekka Enberg (7):
     x86, mm: Use MAX_DMA_PFN for ZONE_DMA on 32-bit x86, mm: Move zone init from paging_init() on 64-bit x86, mm: Use max_pfn instead of highend_pfn x86, mm: Wrap ZONE_DMA32 with CONFIG_ZONE_DMA32 x86, mm: Use max_low_pfn for ZONE_NORMAL on 64-bit x86, mm: Prepare zone_sizes_init() for unification x86, mm: Unify zone_sizes_init()

Quoted 6 lines

Petr Holasek (1):
     x86/numa: Add constraints check for nid parameters

Stanislaw Gruszka (2):
     x86/mm: Initialize high mem before free_all_bootmem() mm, x86: Remove debug_pagealloc_enabled

Instead of the above, I see

Stefano Stabellini (5):
x86, mm: Calculate precisely the memory needed by init_memory_mapping Revert "x86,xen: introduce x86_init.mapping.pagetable_reserve" x86, init : Move memblock_x86_reserve_range PGTABLE to
find_early_table_space
x86-64, mm: Do not assume head_64.S used 4KB pages when !use_pse
x86_32: Calculate additional memory needed by the fixmap

Quoted 3 lines

which is old and crappy.

What the heck is going on, Ingo?

Hm, my bad, what happened is that i dropped that old broken crap locally, but forgot to push it out so the two branches got out of sync.

I've now force-pushed it, and the pull request is below again.

Sorry about that - what makes this doubly annoying is that you could have pulled that old crap without any of us intending it
...

Sorry about that.

Thanks,

Ingo

-------------->

Linus,

Please pull the latest x86-mm-for-linus git tree from:

git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86-mm-for-linus

out-of-topic modifications in x86-mm-for-linus:
-----------------------------------------------
include/linux/mm.h # 54c29c6: mm, x86: Remove debug_pagealloc_e
mm/debug-pagealloc.c # 54c29c6: mm, x86: Remove debug_pagealloc_e

Thanks,

Ingo

------------------>
H Hartley Sweeten (1):
arch/x86/kernel/e820.c: quiet sparse noise about plain integer as NULL pointer

Ludwig Nussel (1):
x86: Fix mmap random address range

Mike Ditto (1):
arch/x86/kernel/e820.c: Eliminate bubble sort from sanitize_e820_map()

Pekka Enberg (7):
x86, mm: Use MAX_DMA_PFN for ZONE_DMA on 32-bit x86, mm: Move zone init from paging_init() on 64-bit x86, mm: Use max_pfn instead of highend_pfn x86, mm: Wrap ZONE_DMA32 with CONFIG_ZONE_DMA32 x86, mm: Use max_low_pfn for ZONE_NORMAL on 64-bit x86, mm: Prepare zone_sizes_init() for unification x86, mm: Unify zone_sizes_init()

Petr Holasek (1):
x86/numa: Add constraints check for nid parameters

Stanislaw Gruszka (2):
x86/mm: Initialize high mem before free_all_bootmem() mm, x86: Remove debug_pagealloc_enabled

 arch/x86/include/asm/init.h |    2 +
 arch/x86/kernel/e820.c      |   59 +++++++++++++++++-------------------------
 arch/x86/mm/init.c          |   23 ++++++++++++++++
 arch/x86/mm/init_32.c       |   29 ++++++++-------------
 arch/x86/mm/init_64.c       |   11 +-------
 arch/x86/mm/mmap.c          |    4 +-
 arch/x86/mm/numa.c          |   10 ++++---
 arch/x86/mm/pageattr.c      |    6 ----
 include/linux/mm.h          |   10 -------
 init/main.c                 |    5 ---
 mm/debug-pagealloc.c        |    3 --
 11 files changed, 69 insertions(+), 93 deletions(-)
arch/x86/include/asm/init.h +2 -0
index 8dbe353..adcc0ae 100644
@@ -5,6 +5,8 @@
 extern void __init early_ioremap_page_table_range_init(void);
 #endif
 
+extern void __init zone_sizes_init(void);
+
 extern unsigned long __init
 kernel_physical_mapping_init(unsigned long start,
 			     unsigned long end,
arch/x86/kernel/e820.c +24 -35

87 lines not on this page · raw message

arch/x86/mm/init.c +23 -0
index 87488b9..2426b60 100644
@@ -3,6 +3,7 @@
 #include <linux/ioport.h>
 #include <linux/swap.h>
 #include <linux/memblock.h>
+#include <linux/bootmem.h>	/* for max_low_pfn */
 
 #include <asm/cacheflush.h>
 #include <asm/e820.h>
@@ -15,6 +16,7 @@
 #include <asm/tlbflush.h>
 #include <asm/tlb.h>
 #include <asm/proto.h>
+#include <asm/dma.h>		/* for MAX_DMA_PFN */
 
 unsigned long __initdata pgt_buf_start;
 unsigned long __meminitdata pgt_buf_end;
@@ -392,3 +394,24 @@ void free_initrd_mem(unsigned long start, unsigned long end)
 	free_init_pages("initrd memory", start, PAGE_ALIGN(end));
 }
 #endif
+
+void __init zone_sizes_init(void)
+{
+	unsigned long max_zone_pfns[MAX_NR_ZONES];
+
+	memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
+
+#ifdef CONFIG_ZONE_DMA
+	max_zone_pfns[ZONE_DMA]		= MAX_DMA_PFN;
+#endif
+#ifdef CONFIG_ZONE_DMA32
+	max_zone_pfns[ZONE_DMA32]	= MAX_DMA32_PFN;
+#endif
+	max_zone_pfns[ZONE_NORMAL]	= max_low_pfn;
+#ifdef CONFIG_HIGHMEM
+	max_zone_pfns[ZONE_HIGHMEM]	= max_pfn;
+#endif
+
+	free_area_init_nodes(max_zone_pfns);
+}
+
arch/x86/mm/init_32.c +11 -18
index 29f7c6d..a2fecb1 100644
@@ -674,22 +674,6 @@ void __init initmem_init(void)
 }
 #endif /* !CONFIG_NEED_MULTIPLE_NODES */
 
-static void __init zone_sizes_init(void)
-{
-	unsigned long max_zone_pfns[MAX_NR_ZONES];
-	memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
-#ifdef CONFIG_ZONE_DMA
-	max_zone_pfns[ZONE_DMA] =
-		virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
-#endif
-	max_zone_pfns[ZONE_NORMAL] = max_low_pfn;
-#ifdef CONFIG_HIGHMEM
-	max_zone_pfns[ZONE_HIGHMEM] = highend_pfn;
-#endif
-
-	free_area_init_nodes(max_zone_pfns);
-}
-
 void __init setup_bootmem_allocator(void)
 {
 	printk(KERN_INFO "  mapped low ram: 0 - %08lx\n",
@@ -760,6 +744,17 @@ void __init mem_init(void)
 #ifdef CONFIG_FLATMEM
 	BUG_ON(!mem_map);
 #endif
+	/*
+	 * With CONFIG_DEBUG_PAGEALLOC initialization of highmem pages has to
+	 * be done before free_all_bootmem(). Memblock use free low memory for
+	 * temporary data (see find_range_array()) and for this purpose can use
+	 * pages that was already passed to the buddy allocator, hence marked as
+	 * not accessible in the page tables when compiled with
+	 * CONFIG_DEBUG_PAGEALLOC. Otherwise order of initialization is not
+	 * important here.
+	 */
+	set_highmem_pages_init();
+
 	/* this will put all low memory onto the freelists */
 	totalram_pages += free_all_bootmem();
 
@@ -771,8 +766,6 @@ void __init mem_init(void)
 		if (page_is_ram(tmp) && PageReserved(pfn_to_page(tmp)))
 			reservedpages++;
 
-	set_highmem_pages_init();
-
 	codesize =  (unsigned long) &_etext - (unsigned long) &_text;
 	datasize =  (unsigned long) &_edata - (unsigned long) &_etext;
 	initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
arch/x86/mm/init_64.c +1 -10
index bbaaa00..6fcce7d 100644
@@ -614,15 +614,6 @@ void __init initmem_init(void)
 
 void __init paging_init(void)
 {
-	unsigned long max_zone_pfns[MAX_NR_ZONES];
-
-	memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
-#ifdef CONFIG_ZONE_DMA
-	max_zone_pfns[ZONE_DMA] = MAX_DMA_PFN;
-#endif
-	max_zone_pfns[ZONE_DMA32] = MAX_DMA32_PFN;
-	max_zone_pfns[ZONE_NORMAL] = max_pfn;
-
 	sparse_memory_present_with_active_regions(MAX_NUMNODES);
 	sparse_init();
 
@@ -634,7 +625,7 @@ void __init paging_init(void)
 	 */
 	node_clear_state(0, N_NORMAL_MEMORY);
 
-	free_area_init_nodes(max_zone_pfns);
+	zone_sizes_init();
 }
 
 /*
arch/x86/mm/mmap.c +2 -2
index 4b5ba85..845df68 100644
@@ -75,9 +75,9 @@ static unsigned long mmap_rnd(void)
 	*/
 	if (current->flags & PF_RANDOMIZE) {
 		if (mmap_is_ia32())
-			rnd = (long)get_random_int() % (1<<8);
+			rnd = get_random_int() % (1<<8);
 		else
-			rnd = (long)(get_random_int() % (1<<28));
+			rnd = get_random_int() % (1<<28);
 	}
 	return rnd << PAGE_SHIFT;
 }
arch/x86/mm/numa.c +6 -4
index fbeaaf4..cdc0054 100644
@@ -430,8 +430,9 @@ static int __init numa_alloc_distance(void)
  * calls are ignored until the distance table is reset with
  * numa_reset_distance().
  *
- * If @from or @to is higher than the highest known node at the time of
- * table creation or @distance doesn't make sense, the call is ignored.
+ * If @from or @to is higher than the highest known node or lower than zero
+ * at the time of table creation or @distance doesn't make sense, the call
+ * is ignored.
  * This is to allow simplification of specific NUMA config implementations.
  */
 void __init numa_set_distance(int from, int to, int distance)
@@ -439,8 +440,9 @@ void __init numa_set_distance(int from, int to, int distance)
 	if (!numa_distance && numa_alloc_distance() < 0)
 		return;
 
-	if (from >= numa_distance_cnt || to >= numa_distance_cnt) {
-		printk_once(KERN_DEBUG "NUMA: Debug: distance out of bound, from=%d to=%d distance=%d\n",
+	if (from >= numa_distance_cnt || to >= numa_distance_cnt ||
+			from < 0 || to < 0) {
+		pr_warn_once("NUMA: Warning: node ids are out of bound, from=%d to=%d distance=%d\n",
 			    from, to, distance);
 		return;
 	}
arch/x86/mm/pageattr.c +0 -6
index f9e5267..5031eef 100644
@@ -1334,12 +1334,6 @@ void kernel_map_pages(struct page *page, int numpages, int enable)
 	}
 
 	/*
-	 * If page allocator is not up yet then do not call c_p_a():
-	 */
-	if (!debug_pagealloc_enabled)
-		return;
-
-	/*
 	 * The return value is ignored as the calls cannot fail.
 	 * Large pages for identity mappings are not used at boot time
 	 * and hence no memory allocations during large page split.
include/linux/mm.h +0 -10
index 3dc3a8c..0a22db1 100644
@@ -1537,23 +1537,13 @@ static inline void vm_stat_account(struct mm_struct *mm,
 #endif /* CONFIG_PROC_FS */
 
 #ifdef CONFIG_DEBUG_PAGEALLOC
-extern int debug_pagealloc_enabled;
-
 extern void kernel_map_pages(struct page *page, int numpages, int enable);
-
-static inline void enable_debug_pagealloc(void)
-{
-	debug_pagealloc_enabled = 1;
-}
 #ifdef CONFIG_HIBERNATION
 extern bool kernel_page_present(struct page *page);
 #endif /* CONFIG_HIBERNATION */
 #else
 static inline void
 kernel_map_pages(struct page *page, int numpages, int enable) {}
-static inline void enable_debug_pagealloc(void)
-{
-}
 #ifdef CONFIG_HIBERNATION
 static inline bool kernel_page_present(struct page *page) { return true; }
 #endif /* CONFIG_HIBERNATION */
init/main.c +0 -5
index 217ed23..99c4ba3 100644
@@ -282,10 +282,6 @@ static int __init unknown_bootoption(char *param, char *val)
 	return 0;
 }
 
-#ifdef CONFIG_DEBUG_PAGEALLOC
-int __read_mostly debug_pagealloc_enabled = 0;
-#endif
-
 static int __init init_setup(char *str)
 {
 	unsigned int i;
@@ -597,7 +593,6 @@ asmlinkage void __init start_kernel(void)
 	}
 #endif
 	page_cgroup_init();
-	enable_debug_pagealloc();
 	debug_objects_mem_init();
 	kmemleak_init();
 	setup_per_cpu_pageset();
mm/debug-pagealloc.c +0 -3
index 7cea557..789ff70 100644
@@ -95,9 +95,6 @@ static void unpoison_pages(struct page *page, int n)
 
 void kernel_map_pages(struct page *page, int numpages, int enable)
 {
-	if (!debug_pagealloc_enabled)
-		return;
-
 	if (enable)
 		unpoison_pages(page, numpages);
 	else