All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
@ 2012-10-09 23:58 Yinghai Lu
  2012-10-09 23:58 ` [PATCH 1/7] x86, mm: align start address to correct big page size Yinghai Lu
                   ` (8 more replies)
  0 siblings, 9 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-09 23:58 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin, Tejun Heo
  Cc: Stefano Stabellini, linux-kernel, Yinghai Lu

on top of tip/x86/mm2, but please zap last patch in that branch.

1. use brk to mapping first PMD_SIZE range.
2. top down to initialize page table range by range.
3. get rid of calculate page table, and find_early_page_table.
4. remove early_ioremap in page table accessing.

v2: changes, update xen interface about pagetable_reserve, so not
   use pgt_buf_* in xen code directly.
v3: use range top-down to initialize page table, so will not use
   calculating/find early table anymore.
   also reorder the patches sequence.

could be found at:
        git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git for-x86-mm

later we could get rid of workaround about xen_mapping_pagetable_reserve, that
could kill another 50 lines codes. --- will do that later because x86/mm2 is
not updated to linus/master yet. If we do that now, will have merge conflicts.

Thanks

Yinghai Lu

Yinghai Lu (7):
  x86, mm: align start address to correct big page size
  x86, mm: Use big page size for small memory range
  x86, mm: Don't clear page table if next range is ram
  x86, mm: only keep initial mapping for ram
  x86, mm: Break down init_all_memory_mapping
  x86, mm: setup page table from top-down
  x86, mm: Remove early_memremap workaround for page table accessing

 arch/x86/include/asm/page_types.h |    1 +
 arch/x86/include/asm/pgtable.h    |    1 +
 arch/x86/kernel/setup.c           |    3 +
 arch/x86/mm/init.c                |  251 ++++++++++++------------------------
 arch/x86/mm/init_32.c             |   18 +++-
 arch/x86/mm/init_64.c             |  100 ++++++---------
 6 files changed, 144 insertions(+), 230 deletions(-)

-- 
1.7.7


^ permalink raw reply	[flat|nested] 115+ messages in thread

* [PATCH 1/7] x86, mm: align start address to correct big page size
  2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
@ 2012-10-09 23:58 ` Yinghai Lu
  2012-10-09 23:58 ` [PATCH 2/7] x86, mm: Use big page size for small memory range Yinghai Lu
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-09 23:58 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin, Tejun Heo
  Cc: Stefano Stabellini, linux-kernel, Yinghai Lu

We are going to use buffer in BRK to pre-map final page table buffer.

Final page table buffer could be only page aligened, but around it are
still ram, we could use bigger page to map it to avoid small page.

We will probe to adjust page_size_mask in next patch to make big
page size could be used with small ram range.

Before that, this patch will make start address to be aligned down
according to bigger page size. otherwise entry in page page will
not have correct value.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init_32.c |    1 +
 arch/x86/mm/init_64.c |    5 +++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 11a5800..27f7fc6 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -310,6 +310,7 @@ repeat:
 					__pgprot(PTE_IDENT_ATTR |
 						 _PAGE_PSE);
 
+				pfn &= PMD_MASK >> PAGE_SHIFT;
 				addr2 = (pfn + PTRS_PER_PTE-1) * PAGE_SIZE +
 					PAGE_OFFSET + PAGE_SIZE-1;
 
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index ab558eb..f40f383 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -461,7 +461,7 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 			pages++;
 			spin_lock(&init_mm.page_table_lock);
 			set_pte((pte_t *)pmd,
-				pfn_pte(address >> PAGE_SHIFT,
+				pfn_pte((address & PMD_MASK) >> PAGE_SHIFT,
 					__pgprot(pgprot_val(prot) | _PAGE_PSE)));
 			spin_unlock(&init_mm.page_table_lock);
 			last_map_addr = next;
@@ -536,7 +536,8 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 			pages++;
 			spin_lock(&init_mm.page_table_lock);
 			set_pte((pte_t *)pud,
-				pfn_pte(addr >> PAGE_SHIFT, PAGE_KERNEL_LARGE));
+				pfn_pte((addr & PUD_MASK) >> PAGE_SHIFT,
+					PAGE_KERNEL_LARGE));
 			spin_unlock(&init_mm.page_table_lock);
 			last_map_addr = next;
 			continue;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 2/7] x86, mm: Use big page size for small memory range
  2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
  2012-10-09 23:58 ` [PATCH 1/7] x86, mm: align start address to correct big page size Yinghai Lu
@ 2012-10-09 23:58 ` Yinghai Lu
  2012-10-09 23:58 ` [PATCH 3/7] x86, mm: Don't clear page table if next range is ram Yinghai Lu
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-09 23:58 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin, Tejun Heo
  Cc: Stefano Stabellini, linux-kernel, Yinghai Lu

We could map small range in the middle of big range at first, so should use
big page size at first to avoid using small page size to break down page table.

Only can set big page bit when that range has big ram area around it.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index c12dfd5..ebf76ce 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -88,6 +88,35 @@ static int __meminit save_mr(struct map_range *mr, int nr_range,
 	return nr_range;
 }
 
+/*
+ * adjust the page_size_mask for small range to go with
+ *	big page size instead small one if nearby are ram too.
+ */
+static void __init_refok adjust_range_page_size_mask(struct map_range *mr,
+							 int nr_range)
+{
+	int i;
+
+	for (i = 0; i < nr_range; i++) {
+		if ((page_size_mask & (1<<PG_LEVEL_2M)) &&
+		    !(mr[i].page_size_mask & (1<<PG_LEVEL_2M))) {
+			unsigned long start = round_down(mr[i].start, PMD_SIZE);
+			unsigned long end = round_up(mr[i].end, PMD_SIZE);
+
+			if (memblock_is_region_memory(start, end - start))
+				mr[i].page_size_mask |= 1<<PG_LEVEL_2M;
+		}
+		if ((page_size_mask & (1<<PG_LEVEL_1G)) &&
+		    !(mr[i].page_size_mask & (1<<PG_LEVEL_1G))) {
+			unsigned long start = round_down(mr[i].start, PUD_SIZE);
+			unsigned long end = round_up(mr[i].end, PUD_SIZE);
+
+			if (memblock_is_region_memory(start, end - start))
+				mr[i].page_size_mask |= 1<<PG_LEVEL_1G;
+		}
+	}
+}
+
 static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 				     unsigned long start,
 				     unsigned long end)
@@ -182,6 +211,9 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 		nr_range--;
 	}
 
+	if (!after_bootmem)
+		adjust_range_page_size_mask(mr, nr_range);
+
 	for (i = 0; i < nr_range; i++)
 		printk(KERN_DEBUG " [mem %#010lx-%#010lx] page %s\n",
 				mr[i].start, mr[i].end - 1,
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 3/7] x86, mm: Don't clear page table if next range is ram
  2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
  2012-10-09 23:58 ` [PATCH 1/7] x86, mm: align start address to correct big page size Yinghai Lu
  2012-10-09 23:58 ` [PATCH 2/7] x86, mm: Use big page size for small memory range Yinghai Lu
@ 2012-10-09 23:58 ` Yinghai Lu
  2012-10-09 23:58 ` [PATCH 4/7] x86, mm: only keep initial mapping for ram Yinghai Lu
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-09 23:58 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin, Tejun Heo
  Cc: Stefano Stabellini, linux-kernel, Yinghai Lu

After we add code use BRK to map buffer for final page table,

It should be safe to remove early_memmap for page table accessing.

But we get panic with that.

It turns out we clear the initial page table wrongly for next range that is
separated by holes.
And it only happens when we are trying to map range one by one range separately.

After we add checking before clearing the related page table, that panic will
not happen anymore.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init_64.c |   37 ++++++++++++++++---------------------
 1 files changed, 16 insertions(+), 21 deletions(-)

diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index f40f383..61b3c44 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -363,20 +363,19 @@ static unsigned long __meminit
 phys_pte_init(pte_t *pte_page, unsigned long addr, unsigned long end,
 	      pgprot_t prot)
 {
-	unsigned pages = 0;
+	unsigned long pages = 0, next;
 	unsigned long last_map_addr = end;
 	int i;
 
 	pte_t *pte = pte_page + pte_index(addr);
 
-	for(i = pte_index(addr); i < PTRS_PER_PTE; i++, addr += PAGE_SIZE, pte++) {
-
+	for (i = pte_index(addr); i < PTRS_PER_PTE; i++, addr = next, pte++) {
+		next = (addr & PAGE_MASK) + PAGE_SIZE;
 		if (addr >= end) {
-			if (!after_bootmem) {
-				for(; i < PTRS_PER_PTE; i++, pte++)
-					set_pte(pte, __pte(0));
-			}
-			break;
+			if (!after_bootmem &&
+			    !e820_any_mapped(addr & PAGE_MASK, next, 0))
+				set_pte(pte, __pte(0));
+			continue;
 		}
 
 		/*
@@ -418,16 +417,14 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 		pte_t *pte;
 		pgprot_t new_prot = prot;
 
+		next = (address & PMD_MASK) + PMD_SIZE;
 		if (address >= end) {
-			if (!after_bootmem) {
-				for (; i < PTRS_PER_PMD; i++, pmd++)
-					set_pmd(pmd, __pmd(0));
-			}
-			break;
+			if (!after_bootmem &&
+			    !e820_any_mapped(address & PMD_MASK, next, 0))
+				set_pmd(pmd, __pmd(0));
+			continue;
 		}
 
-		next = (address & PMD_MASK) + PMD_SIZE;
-
 		if (pmd_val(*pmd)) {
 			if (!pmd_large(*pmd)) {
 				spin_lock(&init_mm.page_table_lock);
@@ -494,13 +491,11 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 		pmd_t *pmd;
 		pgprot_t prot = PAGE_KERNEL;
 
-		if (addr >= end)
-			break;
-
 		next = (addr & PUD_MASK) + PUD_SIZE;
-
-		if (!after_bootmem && !e820_any_mapped(addr, next, 0)) {
-			set_pud(pud, __pud(0));
+		if (addr >= end) {
+			if (!after_bootmem &&
+			    !e820_any_mapped(addr & PUD_MASK, next, 0))
+				set_pud(pud, __pud(0));
 			continue;
 		}
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 4/7] x86, mm: only keep initial mapping for ram
  2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
                   ` (2 preceding siblings ...)
  2012-10-09 23:58 ` [PATCH 3/7] x86, mm: Don't clear page table if next range is ram Yinghai Lu
@ 2012-10-09 23:58 ` Yinghai Lu
  2012-10-10 13:48   ` Konrad Rzeszutek Wilk
  2012-10-09 23:58 ` [PATCH 5/7] x86, mm: Break down init_all_memory_mapping Yinghai Lu
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-10-09 23:58 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin, Tejun Heo
  Cc: Stefano Stabellini, linux-kernel, Yinghai Lu

0 mean any e820 type will be kept, and only hole is removed.

change to E820_RAM and E820_RESERVED_KERN only.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init_64.c |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 61b3c44..4898e80 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -373,7 +373,8 @@ phys_pte_init(pte_t *pte_page, unsigned long addr, unsigned long end,
 		next = (addr & PAGE_MASK) + PAGE_SIZE;
 		if (addr >= end) {
 			if (!after_bootmem &&
-			    !e820_any_mapped(addr & PAGE_MASK, next, 0))
+			    !e820_any_mapped(addr & PAGE_MASK, next, E820_RAM) &&
+			    !e820_any_mapped(addr & PAGE_MASK, next, E820_RESERVED_KERN))
 				set_pte(pte, __pte(0));
 			continue;
 		}
@@ -420,7 +421,8 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 		next = (address & PMD_MASK) + PMD_SIZE;
 		if (address >= end) {
 			if (!after_bootmem &&
-			    !e820_any_mapped(address & PMD_MASK, next, 0))
+			    !e820_any_mapped(address & PMD_MASK, next, E820_RAM) &&
+			    !e820_any_mapped(address & PMD_MASK, next, E820_RESERVED_KERN))
 				set_pmd(pmd, __pmd(0));
 			continue;
 		}
@@ -494,7 +496,8 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 		next = (addr & PUD_MASK) + PUD_SIZE;
 		if (addr >= end) {
 			if (!after_bootmem &&
-			    !e820_any_mapped(addr & PUD_MASK, next, 0))
+			    !e820_any_mapped(addr & PUD_MASK, next, E820_RAM) &&
+			    !e820_any_mapped(addr & PUD_MASK, next, E820_RESERVED_KERN))
 				set_pud(pud, __pud(0));
 			continue;
 		}
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 5/7] x86, mm: Break down init_all_memory_mapping
  2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
                   ` (3 preceding siblings ...)
  2012-10-09 23:58 ` [PATCH 4/7] x86, mm: only keep initial mapping for ram Yinghai Lu
@ 2012-10-09 23:58 ` Yinghai Lu
  2012-10-10 13:55   ` Konrad Rzeszutek Wilk
  2012-10-09 23:58 ` [PATCH 6/7] x86, mm: setup page table from top-down Yinghai Lu
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-10-09 23:58 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin, Tejun Heo
  Cc: Stefano Stabellini, linux-kernel, Yinghai Lu

Will replace that will top-down page table initialization.
new one need to take range.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   41 +++++++++++++++++++----------------------
 1 files changed, 19 insertions(+), 22 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index ebf76ce..23ce4db 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -393,40 +393,30 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
  * Depending on the alignment of E820 ranges, this may possibly result in using
  * smaller size (i.e. 4K instead of 2M or 1G) page tables.
  */
-static void __init init_all_memory_mapping(void)
+static void __init init_all_memory_mapping(unsigned long all_start,
+					   unsigned long all_end)
 {
 	unsigned long start_pfn, end_pfn;
 	int i;
 
-	/* the ISA range is always mapped regardless of memory holes */
-	init_memory_mapping(0, ISA_END_ADDRESS);
-
 	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
 		u64 start = start_pfn << PAGE_SHIFT;
 		u64 end = end_pfn << PAGE_SHIFT;
 
-		if (end <= ISA_END_ADDRESS)
+		if (end <= all_start)
 			continue;
 
-		if (start < ISA_END_ADDRESS)
-			start = ISA_END_ADDRESS;
-#ifdef CONFIG_X86_32
-		/* on 32 bit, we only map up to max_low_pfn */
-		if ((start >> PAGE_SHIFT) >= max_low_pfn)
+		if (start < all_start)
+			start = all_start;
+
+		if (start >= all_end)
 			continue;
 
-		if ((end >> PAGE_SHIFT) > max_low_pfn)
-			end = max_low_pfn << PAGE_SHIFT;
-#endif
-		init_memory_mapping(start, end);
-	}
+		if (end > all_end)
+			end = all_end;
 
-#ifdef CONFIG_X86_64
-	if (max_pfn > max_low_pfn) {
-		/* can we preseve max_low_pfn ?*/
-		max_low_pfn = max_pfn;
+		init_memory_mapping(start, end);
 	}
-#endif
 }
 
 void __init init_mem_mapping(void)
@@ -456,8 +446,15 @@ void __init init_mem_mapping(void)
 		(pgt_buf_top << PAGE_SHIFT) - 1);
 
 	max_pfn_mapped = 0; /* will get exact value next */
-	init_all_memory_mapping();
-
+	/* the ISA range is always mapped regardless of memory holes */
+	init_memory_mapping(0, ISA_END_ADDRESS);
+	init_all_memory_mapping(ISA_END_ADDRESS, end);
+#ifdef CONFIG_X86_64
+	if (max_pfn > max_low_pfn) {
+		/* can we preseve max_low_pfn ?*/
+		max_low_pfn = max_pfn;
+	}
+#endif
 	/*
 	 * Reserve the kernel pagetable pages we used (pgt_buf_start -
 	 * pgt_buf_end) and free the other ones (pgt_buf_end - pgt_buf_top)
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 6/7] x86, mm: setup page table from top-down
  2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
                   ` (4 preceding siblings ...)
  2012-10-09 23:58 ` [PATCH 5/7] x86, mm: Break down init_all_memory_mapping Yinghai Lu
@ 2012-10-09 23:58 ` Yinghai Lu
  2012-10-10  1:53   ` Yinghai Lu
  2012-10-10 16:38   ` Stefano Stabellini
  2012-10-09 23:58 ` [PATCH 7/7] x86, mm: Remove early_memremap workaround for page table accessing Yinghai Lu
                   ` (2 subsequent siblings)
  8 siblings, 2 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-09 23:58 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin, Tejun Heo
  Cc: Stefano Stabellini, linux-kernel, Yinghai Lu

Get pgt_buf early from BRK, and use it to map PMD_SIZE to top at first.
then use page from PMD_SIZE to map next blow range.

alloc_low_page will use page from BRK at first, then will switch to use
to memblock to find and reserve page for page table usage.

At last we could get rid of calculation and find early pgt related code.

Suggested-by: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/page_types.h |    1 +
 arch/x86/include/asm/pgtable.h    |    1 +
 arch/x86/kernel/setup.c           |    3 +
 arch/x86/mm/init.c                |  188 ++++++++-----------------------------
 arch/x86/mm/init_32.c             |   17 +++-
 arch/x86/mm/init_64.c             |   17 +++-
 6 files changed, 71 insertions(+), 156 deletions(-)

diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
index 54c9787..9f6f3e6 100644
--- a/arch/x86/include/asm/page_types.h
+++ b/arch/x86/include/asm/page_types.h
@@ -45,6 +45,7 @@ extern int devmem_is_allowed(unsigned long pagenr);
 
 extern unsigned long max_low_pfn_mapped;
 extern unsigned long max_pfn_mapped;
+extern unsigned long min_pfn_mapped;
 
 static inline phys_addr_t get_max_mapped(void)
 {
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
index 52d40a1..25fa5bb 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -599,6 +599,7 @@ static inline int pgd_none(pgd_t pgd)
 
 extern int direct_gbpages;
 void init_mem_mapping(void);
+void early_alloc_pgt_buf(void);
 
 /* local pte updates need not use xchg for locking */
 static inline pte_t native_local_ptep_get_and_clear(pte_t *ptep)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 4989f80..3987daa 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -123,6 +123,7 @@
  */
 unsigned long max_low_pfn_mapped;
 unsigned long max_pfn_mapped;
+unsigned long min_pfn_mapped;
 
 #ifdef CONFIG_DMI
 RESERVE_BRK(dmi_alloc, 65536);
@@ -896,6 +897,8 @@ void __init setup_arch(char **cmdline_p)
 
 	reserve_ibft_region();
 
+	early_alloc_pgt_buf();
+
 	/*
 	 * Need to conclude brk, before memblock_x86_fill()
 	 *  it could use memblock_find_in_range, could overlap with
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 23ce4db..a060381 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -223,105 +223,6 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 	return nr_range;
 }
 
-static unsigned long __init calculate_table_space_size(unsigned long start,
-					  unsigned long end)
-{
-	unsigned long puds = 0, pmds = 0, ptes = 0, tables;
-	struct map_range mr[NR_RANGE_MR];
-	int nr_range, i;
-
-	pr_info("calculate_table_space_size: [mem %#010lx-%#010lx]\n",
-	       start, end - 1);
-
-	memset(mr, 0, sizeof(mr));
-	nr_range = 0;
-	nr_range = split_mem_range(mr, nr_range, start, end);
-
-	for (i = 0; i < nr_range; i++) {
-		unsigned long range, extra;
-
-		range = mr[i].end - mr[i].start;
-		puds += (range + PUD_SIZE - 1) >> PUD_SHIFT;
-
-		if (mr[i].page_size_mask & (1 << PG_LEVEL_1G)) {
-			extra = range - ((range >> PUD_SHIFT) << PUD_SHIFT);
-			pmds += (extra + PMD_SIZE - 1) >> PMD_SHIFT;
-		} else
-			pmds += (range + PMD_SIZE - 1) >> PMD_SHIFT;
-
-		if (mr[i].page_size_mask & (1 << PG_LEVEL_2M)) {
-			extra = range - ((range >> PMD_SHIFT) << PMD_SHIFT);
-#ifdef CONFIG_X86_32
-			extra += PMD_SIZE;
-#endif
-			/* The first 2/4M doesn't use large pages. */
-			if (mr[i].start < PMD_SIZE)
-				extra += PMD_SIZE - mr[i].start;
-
-			ptes += (extra + PAGE_SIZE - 1) >> PAGE_SHIFT;
-		} else
-			ptes += (range + PAGE_SIZE - 1) >> PAGE_SHIFT;
-	}
-
-	tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
-	tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE);
-	tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE);
-
-#ifdef CONFIG_X86_32
-	/* for fixmap */
-	tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE);
-#endif
-
-	return tables;
-}
-
-static unsigned long __init calculate_all_table_space_size(void)
-{
-	unsigned long start_pfn, end_pfn;
-	unsigned long tables;
-	int i;
-
-	/* the ISA range is always mapped regardless of memory holes */
-	tables = calculate_table_space_size(0, ISA_END_ADDRESS);
-
-	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
-		u64 start = start_pfn << PAGE_SHIFT;
-		u64 end = end_pfn << PAGE_SHIFT;
-
-		if (end <= ISA_END_ADDRESS)
-			continue;
-
-		if (start < ISA_END_ADDRESS)
-			start = ISA_END_ADDRESS;
-#ifdef CONFIG_X86_32
-		/* on 32 bit, we only map up to max_low_pfn */
-		if ((start >> PAGE_SHIFT) >= max_low_pfn)
-			continue;
-
-		if ((end >> PAGE_SHIFT) > max_low_pfn)
-			end = max_low_pfn << PAGE_SHIFT;
-#endif
-		tables += calculate_table_space_size(start, end);
-	}
-
-	return tables;
-}
-
-static void __init find_early_table_space(unsigned long start,
-					  unsigned long good_end,
-					  unsigned long tables)
-{
-	phys_addr_t base;
-
-	base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE);
-	if (!base)
-		panic("Cannot find space for the kernel page tables");
-
-	pgt_buf_start = base >> PAGE_SHIFT;
-	pgt_buf_end = pgt_buf_start;
-	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
-}
-
 static struct range pfn_mapped[E820_X_MAX];
 static int nr_pfn_mapped;
 
@@ -386,22 +287,17 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 }
 
 /*
- * Iterate through E820 memory map and create direct mappings for only E820_RAM
- * regions. We cannot simply create direct mappings for all pfns from
- * [0 to max_low_pfn) and [4GB to max_pfn) because of possible memory holes in
- * high addresses that cannot be marked as UC by fixed/variable range MTRRs.
- * Depending on the alignment of E820 ranges, this may possibly result in using
- * smaller size (i.e. 4K instead of 2M or 1G) page tables.
+ * this one could take range with hole in it
  */
-static void __init init_all_memory_mapping(unsigned long all_start,
+static void __init init_range_memory_mapping(unsigned long all_start,
 					   unsigned long all_end)
 {
 	unsigned long start_pfn, end_pfn;
 	int i;
 
 	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
-		u64 start = start_pfn << PAGE_SHIFT;
-		u64 end = end_pfn << PAGE_SHIFT;
+		u64 start = (u64)start_pfn << PAGE_SHIFT;
+		u64 end = (u64)end_pfn << PAGE_SHIFT;
 
 		if (end <= all_start)
 			continue;
@@ -421,67 +317,59 @@ static void __init init_all_memory_mapping(unsigned long all_start,
 
 void __init init_mem_mapping(void)
 {
-	unsigned long tables, good_end, end;
+	unsigned long end, start, last_start;
+	unsigned long step_size;
 
 	probe_page_size_mask();
 
-	/*
-	 * Find space for the kernel direct mapping tables.
-	 *
-	 * Later we should allocate these tables in the local node of the
-	 * memory mapped. Unfortunately this is done currently before the
-	 * nodes are discovered.
-	 */
 #ifdef CONFIG_X86_64
 	end = max_pfn << PAGE_SHIFT;
-	good_end = end;
 #else
 	end = max_low_pfn << PAGE_SHIFT;
-	good_end = max_pfn_mapped << PAGE_SHIFT;
 #endif
-	tables = calculate_all_table_space_size();
-	find_early_table_space(0, good_end, tables);
-	printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] prealloc\n",
-		end - 1, pgt_buf_start << PAGE_SHIFT,
-		(pgt_buf_top << PAGE_SHIFT) - 1);
 
-	max_pfn_mapped = 0; /* will get exact value next */
 	/* the ISA range is always mapped regardless of memory holes */
 	init_memory_mapping(0, ISA_END_ADDRESS);
-	init_all_memory_mapping(ISA_END_ADDRESS, end);
+
+	/* step_size need to be small so pgt_buf from BRK could cover it */
+	step_size = PMD_SIZE;
+	max_pfn_mapped = 0; /* will get exact value next */
+	min_pfn_mapped = end >> PAGE_SHIFT;
+	last_start = start = end;
+	while (last_start > ISA_END_ADDRESS) {
+		if (last_start > step_size) {
+			start = round_down(last_start - 1, step_size);
+			if (start < ISA_END_ADDRESS)
+				start = ISA_END_ADDRESS;
+		} else
+			start = ISA_END_ADDRESS;
+		init_all_memory_mapping(start, last_start);
+		last_start = start;
+		min_pfn_mapped = last_start >> PAGE_SHIFT;
+		step_size <<= 5;
+	}
+
 #ifdef CONFIG_X86_64
 	if (max_pfn > max_low_pfn) {
 		/* can we preseve max_low_pfn ?*/
 		max_low_pfn = max_pfn;
 	}
 #endif
-	/*
-	 * Reserve the kernel pagetable pages we used (pgt_buf_start -
-	 * pgt_buf_end) and free the other ones (pgt_buf_end - pgt_buf_top)
-	 * so that they can be reused for other purposes.
-	 *
-	 * On native it just means calling memblock_reserve, on Xen it also
-	 * means marking RW the pagetable pages that we allocated before
-	 * but that haven't been used.
-	 *
-	 * In fact on xen we mark RO the whole range pgt_buf_start -
-	 * pgt_buf_top, because we have to make sure that when
-	 * init_memory_mapping reaches the pagetable pages area, it maps
-	 * RO all the pagetable pages, including the ones that are beyond
-	 * pgt_buf_end at that time.
-	 */
-	if (pgt_buf_end > pgt_buf_start) {
-		printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] final\n",
-			end - 1, pgt_buf_start << PAGE_SHIFT,
-			(pgt_buf_end << PAGE_SHIFT) - 1);
-		x86_init.mapping.pagetable_reserve(PFN_PHYS(pgt_buf_start),
-				PFN_PHYS(pgt_buf_end));
-	}
+	early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
+}
 
-	/* stop the wrong using */
-	pgt_buf_top = 0;
+/* need 3 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */
+RESERVE_BRK(early_pgt_alloc, 16384);
+void  __init early_alloc_pgt_buf(void)
+{
+	unsigned long tables = 16384;
+	phys_addr_t base;
 
-	early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
+	base = __pa(extend_brk(tables, PAGE_SIZE));
+
+	pgt_buf_start = base >> PAGE_SHIFT;
+	pgt_buf_end = pgt_buf_start;
+	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
 }
 
 /*
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 27f7fc6..7bb1106 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -61,11 +61,22 @@ bool __read_mostly __vmalloc_start_set = false;
 
 static __init void *alloc_low_page(void)
 {
-	unsigned long pfn = pgt_buf_end++;
+	unsigned long pfn;
 	void *adr;
 
-	if (pfn >= pgt_buf_top)
-		panic("alloc_low_page: ran out of memory");
+	if ((pgt_buf_end + 1) >= pgt_buf_top) {
+		unsigned long ret;
+		if (min_pfn_mapped >= max_pfn_mapped)
+			panic("alloc_low_page: ran out of memory");
+		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
+					max_pfn_mapped << PAGE_SHIFT,
+					PAGE_SIZE, PAGE_SIZE);
+		if (!ret)
+			panic("alloc_low_page: can not alloc memory");
+		memblock_reserve(ret, PAGE_SIZE);
+		pfn = ret >> PAGE_SHIFT;
+	} else
+		pfn = pgt_buf_end++;
 
 	adr = __va(pfn * PAGE_SIZE);
 	clear_page(adr);
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 4898e80..7dfa69b 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -316,7 +316,7 @@ void __init cleanup_highmap(void)
 
 static __ref void *alloc_low_page(unsigned long *phys)
 {
-	unsigned long pfn = pgt_buf_end++;
+	unsigned long pfn;
 	void *adr;
 
 	if (after_bootmem) {
@@ -326,8 +326,19 @@ static __ref void *alloc_low_page(unsigned long *phys)
 		return adr;
 	}
 
-	if (pfn >= pgt_buf_top)
-		panic("alloc_low_page: ran out of memory");
+	if ((pgt_buf_end + 1) >= pgt_buf_top) {
+		unsigned long ret;
+		if (min_pfn_mapped >= max_pfn_mapped)
+			panic("alloc_low_page: ran out of memory");
+		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
+					max_pfn_mapped << PAGE_SHIFT,
+					PAGE_SIZE, PAGE_SIZE);
+		if (!ret)
+			panic("alloc_low_page: can not alloc memory");
+		memblock_reserve(ret, PAGE_SIZE);
+		pfn = ret >> PAGE_SHIFT;
+	} else
+		pfn = pgt_buf_end++;
 
 	adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
 	clear_page(adr);
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 7/7] x86, mm: Remove early_memremap workaround for page table accessing
  2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
                   ` (5 preceding siblings ...)
  2012-10-09 23:58 ` [PATCH 6/7] x86, mm: setup page table from top-down Yinghai Lu
@ 2012-10-09 23:58 ` Yinghai Lu
  2012-10-10 13:47 ` [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Konrad Rzeszutek Wilk
  2012-10-10 16:40 ` Stefano Stabellini
  8 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-09 23:58 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin, Tejun Heo
  Cc: Stefano Stabellini, linux-kernel, Yinghai Lu

Not needed that anymore after patches include premaping page table buf
and not clear initial page table wrongly.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init_64.c |   38 ++++----------------------------------
 1 files changed, 4 insertions(+), 34 deletions(-)

diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 7dfa69b..4e6873f 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -340,36 +340,12 @@ static __ref void *alloc_low_page(unsigned long *phys)
 	} else
 		pfn = pgt_buf_end++;
 
-	adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
+	adr = __va(pfn * PAGE_SIZE);
 	clear_page(adr);
 	*phys  = pfn * PAGE_SIZE;
 	return adr;
 }
 
-static __ref void *map_low_page(void *virt)
-{
-	void *adr;
-	unsigned long phys, left;
-
-	if (after_bootmem)
-		return virt;
-
-	phys = __pa(virt);
-	left = phys & (PAGE_SIZE - 1);
-	adr = early_memremap(phys & PAGE_MASK, PAGE_SIZE);
-	adr = (void *)(((unsigned long)adr) | left);
-
-	return adr;
-}
-
-static __ref void unmap_low_page(void *adr)
-{
-	if (after_bootmem)
-		return;
-
-	early_iounmap((void *)((unsigned long)adr & PAGE_MASK), PAGE_SIZE);
-}
-
 static unsigned long __meminit
 phys_pte_init(pte_t *pte_page, unsigned long addr, unsigned long end,
 	      pgprot_t prot)
@@ -441,10 +417,9 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 		if (pmd_val(*pmd)) {
 			if (!pmd_large(*pmd)) {
 				spin_lock(&init_mm.page_table_lock);
-				pte = map_low_page((pte_t *)pmd_page_vaddr(*pmd));
+				pte = (pte_t *)pmd_page_vaddr(*pmd);
 				last_map_addr = phys_pte_init(pte, address,
 								end, prot);
-				unmap_low_page(pte);
 				spin_unlock(&init_mm.page_table_lock);
 				continue;
 			}
@@ -480,7 +455,6 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 
 		pte = alloc_low_page(&pte_phys);
 		last_map_addr = phys_pte_init(pte, address, end, new_prot);
-		unmap_low_page(pte);
 
 		spin_lock(&init_mm.page_table_lock);
 		pmd_populate_kernel(&init_mm, pmd, __va(pte_phys));
@@ -515,10 +489,9 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 
 		if (pud_val(*pud)) {
 			if (!pud_large(*pud)) {
-				pmd = map_low_page(pmd_offset(pud, 0));
+				pmd = pmd_offset(pud, 0);
 				last_map_addr = phys_pmd_init(pmd, addr, end,
 							 page_size_mask, prot);
-				unmap_low_page(pmd);
 				__flush_tlb_all();
 				continue;
 			}
@@ -555,7 +528,6 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 		pmd = alloc_low_page(&pmd_phys);
 		last_map_addr = phys_pmd_init(pmd, addr, end, page_size_mask,
 					      prot);
-		unmap_low_page(pmd);
 
 		spin_lock(&init_mm.page_table_lock);
 		pud_populate(&init_mm, pud, __va(pmd_phys));
@@ -591,17 +563,15 @@ kernel_physical_mapping_init(unsigned long start,
 			next = end;
 
 		if (pgd_val(*pgd)) {
-			pud = map_low_page((pud_t *)pgd_page_vaddr(*pgd));
+			pud = (pud_t *)pgd_page_vaddr(*pgd);
 			last_map_addr = phys_pud_init(pud, __pa(start),
 						 __pa(end), page_size_mask);
-			unmap_low_page(pud);
 			continue;
 		}
 
 		pud = alloc_low_page(&pud_phys);
 		last_map_addr = phys_pud_init(pud, __pa(start), __pa(next),
 						 page_size_mask);
-		unmap_low_page(pud);
 
 		spin_lock(&init_mm.page_table_lock);
 		pgd_populate(&init_mm, pgd, __va(pud_phys));
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* Re: [PATCH 6/7] x86, mm: setup page table from top-down
  2012-10-09 23:58 ` [PATCH 6/7] x86, mm: setup page table from top-down Yinghai Lu
@ 2012-10-10  1:53   ` Yinghai Lu
  2012-10-10 16:38   ` Stefano Stabellini
  1 sibling, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-10  1:53 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin, Tejun Heo
  Cc: Stefano Stabellini, linux-kernel, Yinghai Lu

[-- Attachment #1: Type: text/plain, Size: 585 bytes --]

On Tue, Oct 9, 2012 at 4:58 PM, Yinghai Lu <yinghai@kernel.org> wrote:
> Get pgt_buf early from BRK, and use it to map PMD_SIZE to top at first.
> then use page from PMD_SIZE to map next blow range.
>
> alloc_low_page will use page from BRK at first, then will switch to use
> to memblock to find and reserve page for page table usage.
>
> At last we could get rid of calculation and find early pgt related code.
>
> Suggested-by: "H. Peter Anvin" <hpa@zytor.com>
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>

sorry , there one typo in this patch, please use attached one instead.

[-- Attachment #2: fix_max_pfn_xx_13.patch --]
[-- Type: application/octet-stream, Size: 11878 bytes --]

Subject: [PATCH] x86, mm: setup page table from top-down

Get pgt_buf early from BRK, and use it to map PMD_SIZE to top at first.
then use page from PMD_SIZE to map next blow range.

alloc_low_page will use page from BRK at first, then will switch to use
to memblock to find and reserve page for page table usage.

At last we could get rid of calculation and find early pgt related code.

Suggested-by: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>

---
 arch/x86/include/asm/page_types.h |    1 
 arch/x86/include/asm/pgtable.h    |    1 
 arch/x86/kernel/setup.c           |    3 
 arch/x86/mm/init.c                |  188 +++++++-------------------------------
 arch/x86/mm/init_32.c             |   17 ++-
 arch/x86/mm/init_64.c             |   17 ++-
 6 files changed, 71 insertions(+), 156 deletions(-)

Index: linux-2.6/arch/x86/include/asm/pgtable.h
===================================================================
--- linux-2.6.orig/arch/x86/include/asm/pgtable.h
+++ linux-2.6/arch/x86/include/asm/pgtable.h
@@ -603,6 +603,7 @@ static inline int pgd_none(pgd_t pgd)
 
 extern int direct_gbpages;
 void init_mem_mapping(void);
+void early_alloc_pgt_buf(void);
 
 /* local pte updates need not use xchg for locking */
 static inline pte_t native_local_ptep_get_and_clear(pte_t *ptep)
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
@@ -123,6 +123,7 @@
  */
 unsigned long max_low_pfn_mapped;
 unsigned long max_pfn_mapped;
+unsigned long min_pfn_mapped;
 
 #ifdef CONFIG_DMI
 RESERVE_BRK(dmi_alloc, 65536);
@@ -896,6 +897,8 @@ void __init setup_arch(char **cmdline_p)
 
 	reserve_ibft_region();
 
+	early_alloc_pgt_buf();
+
 	/*
 	 * Need to conclude brk, before memblock_x86_fill()
 	 *  it could use memblock_find_in_range, could overlap with
Index: linux-2.6/arch/x86/mm/init.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init.c
+++ linux-2.6/arch/x86/mm/init.c
@@ -223,105 +223,6 @@ static int __meminit split_mem_range(str
 	return nr_range;
 }
 
-static unsigned long __init calculate_table_space_size(unsigned long start,
-					  unsigned long end)
-{
-	unsigned long puds = 0, pmds = 0, ptes = 0, tables;
-	struct map_range mr[NR_RANGE_MR];
-	int nr_range, i;
-
-	pr_info("calculate_table_space_size: [mem %#010lx-%#010lx]\n",
-	       start, end - 1);
-
-	memset(mr, 0, sizeof(mr));
-	nr_range = 0;
-	nr_range = split_mem_range(mr, nr_range, start, end);
-
-	for (i = 0; i < nr_range; i++) {
-		unsigned long range, extra;
-
-		range = mr[i].end - mr[i].start;
-		puds += (range + PUD_SIZE - 1) >> PUD_SHIFT;
-
-		if (mr[i].page_size_mask & (1 << PG_LEVEL_1G)) {
-			extra = range - ((range >> PUD_SHIFT) << PUD_SHIFT);
-			pmds += (extra + PMD_SIZE - 1) >> PMD_SHIFT;
-		} else
-			pmds += (range + PMD_SIZE - 1) >> PMD_SHIFT;
-
-		if (mr[i].page_size_mask & (1 << PG_LEVEL_2M)) {
-			extra = range - ((range >> PMD_SHIFT) << PMD_SHIFT);
-#ifdef CONFIG_X86_32
-			extra += PMD_SIZE;
-#endif
-			/* The first 2/4M doesn't use large pages. */
-			if (mr[i].start < PMD_SIZE)
-				extra += PMD_SIZE - mr[i].start;
-
-			ptes += (extra + PAGE_SIZE - 1) >> PAGE_SHIFT;
-		} else
-			ptes += (range + PAGE_SIZE - 1) >> PAGE_SHIFT;
-	}
-
-	tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
-	tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE);
-	tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE);
-
-#ifdef CONFIG_X86_32
-	/* for fixmap */
-	tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE);
-#endif
-
-	return tables;
-}
-
-static unsigned long __init calculate_all_table_space_size(void)
-{
-	unsigned long start_pfn, end_pfn;
-	unsigned long tables;
-	int i;
-
-	/* the ISA range is always mapped regardless of memory holes */
-	tables = calculate_table_space_size(0, ISA_END_ADDRESS);
-
-	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
-		u64 start = start_pfn << PAGE_SHIFT;
-		u64 end = end_pfn << PAGE_SHIFT;
-
-		if (end <= ISA_END_ADDRESS)
-			continue;
-
-		if (start < ISA_END_ADDRESS)
-			start = ISA_END_ADDRESS;
-#ifdef CONFIG_X86_32
-		/* on 32 bit, we only map up to max_low_pfn */
-		if ((start >> PAGE_SHIFT) >= max_low_pfn)
-			continue;
-
-		if ((end >> PAGE_SHIFT) > max_low_pfn)
-			end = max_low_pfn << PAGE_SHIFT;
-#endif
-		tables += calculate_table_space_size(start, end);
-	}
-
-	return tables;
-}
-
-static void __init find_early_table_space(unsigned long start,
-					  unsigned long good_end,
-					  unsigned long tables)
-{
-	phys_addr_t base;
-
-	base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE);
-	if (!base)
-		panic("Cannot find space for the kernel page tables");
-
-	pgt_buf_start = base >> PAGE_SHIFT;
-	pgt_buf_end = pgt_buf_start;
-	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
-}
-
 static struct range pfn_mapped[E820_X_MAX];
 static int nr_pfn_mapped;
 
@@ -386,22 +287,17 @@ unsigned long __init_refok init_memory_m
 }
 
 /*
- * Iterate through E820 memory map and create direct mappings for only E820_RAM
- * regions. We cannot simply create direct mappings for all pfns from
- * [0 to max_low_pfn) and [4GB to max_pfn) because of possible memory holes in
- * high addresses that cannot be marked as UC by fixed/variable range MTRRs.
- * Depending on the alignment of E820 ranges, this may possibly result in using
- * smaller size (i.e. 4K instead of 2M or 1G) page tables.
+ * this one could take range with hole in it
  */
-static void __init init_all_memory_mapping(unsigned long all_start,
+static void __init init_range_memory_mapping(unsigned long all_start,
 					   unsigned long all_end)
 {
 	unsigned long start_pfn, end_pfn;
 	int i;
 
 	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
-		u64 start = start_pfn << PAGE_SHIFT;
-		u64 end = end_pfn << PAGE_SHIFT;
+		u64 start = (u64)start_pfn << PAGE_SHIFT;
+		u64 end = (u64)end_pfn << PAGE_SHIFT;
 
 		if (end <= all_start)
 			continue;
@@ -421,67 +317,59 @@ static void __init init_all_memory_mappi
 
 void __init init_mem_mapping(void)
 {
-	unsigned long tables, good_end, end;
+	unsigned long end, start, last_start;
+	unsigned long step_size;
 
 	probe_page_size_mask();
 
-	/*
-	 * Find space for the kernel direct mapping tables.
-	 *
-	 * Later we should allocate these tables in the local node of the
-	 * memory mapped. Unfortunately this is done currently before the
-	 * nodes are discovered.
-	 */
 #ifdef CONFIG_X86_64
 	end = max_pfn << PAGE_SHIFT;
-	good_end = end;
 #else
 	end = max_low_pfn << PAGE_SHIFT;
-	good_end = max_pfn_mapped << PAGE_SHIFT;
 #endif
-	tables = calculate_all_table_space_size();
-	find_early_table_space(0, good_end, tables);
-	printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] prealloc\n",
-		end - 1, pgt_buf_start << PAGE_SHIFT,
-		(pgt_buf_top << PAGE_SHIFT) - 1);
 
-	max_pfn_mapped = 0; /* will get exact value next */
 	/* the ISA range is always mapped regardless of memory holes */
 	init_memory_mapping(0, ISA_END_ADDRESS);
-	init_all_memory_mapping(ISA_END_ADDRESS, end);
+
+	/* step_size need to be small so pgt_buf from BRK could cover it */
+	step_size = PMD_SIZE;
+	max_pfn_mapped = 0; /* will get exact value next */
+	min_pfn_mapped = end >> PAGE_SHIFT;
+	last_start = start = end;
+	while (last_start > ISA_END_ADDRESS) {
+		if (last_start > step_size) {
+			start = round_down(last_start - 1, step_size);
+			if (start < ISA_END_ADDRESS)
+				start = ISA_END_ADDRESS;
+		} else
+			start = ISA_END_ADDRESS;
+		init_range_memory_mapping(start, last_start);
+		last_start = start;
+		min_pfn_mapped = last_start >> PAGE_SHIFT;
+		step_size <<= 5;
+	}
+
 #ifdef CONFIG_X86_64
 	if (max_pfn > max_low_pfn) {
 		/* can we preseve max_low_pfn ?*/
 		max_low_pfn = max_pfn;
 	}
 #endif
-	/*
-	 * Reserve the kernel pagetable pages we used (pgt_buf_start -
-	 * pgt_buf_end) and free the other ones (pgt_buf_end - pgt_buf_top)
-	 * so that they can be reused for other purposes.
-	 *
-	 * On native it just means calling memblock_reserve, on Xen it also
-	 * means marking RW the pagetable pages that we allocated before
-	 * but that haven't been used.
-	 *
-	 * In fact on xen we mark RO the whole range pgt_buf_start -
-	 * pgt_buf_top, because we have to make sure that when
-	 * init_memory_mapping reaches the pagetable pages area, it maps
-	 * RO all the pagetable pages, including the ones that are beyond
-	 * pgt_buf_end at that time.
-	 */
-	if (pgt_buf_end > pgt_buf_start) {
-		printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] final\n",
-			end - 1, pgt_buf_start << PAGE_SHIFT,
-			(pgt_buf_end << PAGE_SHIFT) - 1);
-		x86_init.mapping.pagetable_reserve(PFN_PHYS(pgt_buf_start),
-				PFN_PHYS(pgt_buf_end));
-	}
+	early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
+}
 
-	/* stop the wrong using */
-	pgt_buf_top = 0;
+/* need 3 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */
+RESERVE_BRK(early_pgt_alloc, 16384);
+void  __init early_alloc_pgt_buf(void)
+{
+	unsigned long tables = 16384;
+	phys_addr_t base;
 
-	early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
+	base = __pa(extend_brk(tables, PAGE_SIZE));
+
+	pgt_buf_start = base >> PAGE_SHIFT;
+	pgt_buf_end = pgt_buf_start;
+	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
 }
 
 /*
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
@@ -45,6 +45,7 @@ extern int devmem_is_allowed(unsigned lo
 
 extern unsigned long max_low_pfn_mapped;
 extern unsigned long max_pfn_mapped;
+extern unsigned long min_pfn_mapped;
 
 static inline phys_addr_t get_max_mapped(void)
 {
Index: linux-2.6/arch/x86/mm/init_32.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init_32.c
+++ linux-2.6/arch/x86/mm/init_32.c
@@ -61,11 +61,22 @@ bool __read_mostly __vmalloc_start_set =
 
 static __init void *alloc_low_page(void)
 {
-	unsigned long pfn = pgt_buf_end++;
+	unsigned long pfn;
 	void *adr;
 
-	if (pfn >= pgt_buf_top)
-		panic("alloc_low_page: ran out of memory");
+	if ((pgt_buf_end + 1) >= pgt_buf_top) {
+		unsigned long ret;
+		if (min_pfn_mapped >= max_pfn_mapped)
+			panic("alloc_low_page: ran out of memory");
+		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
+					max_pfn_mapped << PAGE_SHIFT,
+					PAGE_SIZE, PAGE_SIZE);
+		if (!ret)
+			panic("alloc_low_page: can not alloc memory");
+		memblock_reserve(ret, PAGE_SIZE);
+		pfn = ret >> PAGE_SHIFT;
+	} else
+		pfn = pgt_buf_end++;
 
 	adr = __va(pfn * PAGE_SIZE);
 	clear_page(adr);
Index: linux-2.6/arch/x86/mm/init_64.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init_64.c
+++ linux-2.6/arch/x86/mm/init_64.c
@@ -316,7 +316,7 @@ void __init cleanup_highmap(void)
 
 static __ref void *alloc_low_page(unsigned long *phys)
 {
-	unsigned long pfn = pgt_buf_end++;
+	unsigned long pfn;
 	void *adr;
 
 	if (after_bootmem) {
@@ -326,8 +326,19 @@ static __ref void *alloc_low_page(unsign
 		return adr;
 	}
 
-	if (pfn >= pgt_buf_top)
-		panic("alloc_low_page: ran out of memory");
+	if ((pgt_buf_end + 1) >= pgt_buf_top) {
+		unsigned long ret;
+		if (min_pfn_mapped >= max_pfn_mapped)
+			panic("alloc_low_page: ran out of memory");
+		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
+					max_pfn_mapped << PAGE_SHIFT,
+					PAGE_SIZE, PAGE_SIZE);
+		if (!ret)
+			panic("alloc_low_page: can not alloc memory");
+		memblock_reserve(ret, PAGE_SIZE);
+		pfn = ret >> PAGE_SHIFT;
+	} else
+		pfn = pgt_buf_end++;
 
 	adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
 	clear_page(adr);

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
                   ` (6 preceding siblings ...)
  2012-10-09 23:58 ` [PATCH 7/7] x86, mm: Remove early_memremap workaround for page table accessing Yinghai Lu
@ 2012-10-10 13:47 ` Konrad Rzeszutek Wilk
  2012-10-10 14:55   ` Yinghai Lu
  2012-10-10 16:40 ` Stefano Stabellini
  8 siblings, 1 reply; 115+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-10-10 13:47 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, Stefano Stabellini, linux-kernel

On Tue, Oct 09, 2012 at 04:58:28PM -0700, Yinghai Lu wrote:
> on top of tip/x86/mm2, but please zap last patch in that branch.

So while I appreciate you actively looking at this and iteratively
sending snapshots of the progress - I think it would be easier if
you posted a patchset that has rework done completly per what
Peter described.

That way folks who are reviewing will know when they can focus their
time on reviewing the whole thing in one go instead of doing it
step by step - as some of the patches still haven't addressed the
review comments that were given the first time.


> 1. use brk to mapping first PMD_SIZE range.
> 2. top down to initialize page table range by range.
> 3. get rid of calculate page table, and find_early_page_table.
> 4. remove early_ioremap in page table accessing.
> 
> v2: changes, update xen interface about pagetable_reserve, so not
>    use pgt_buf_* in xen code directly.
> v3: use range top-down to initialize page table, so will not use
>    calculating/find early table anymore.
>    also reorder the patches sequence.
> 
> could be found at:
>         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git for-x86-mm
> 
> later we could get rid of workaround about xen_mapping_pagetable_reserve, that
> could kill another 50 lines codes. --- will do that later because x86/mm2 is
> not updated to linus/master yet. If we do that now, will have merge conflicts.

I am confused. Why do you need x86/mm2? If you do need it, you need to
describe in this writeup why you depend on it, and what is there.

You can't base it on linus's tree?

> 
> Thanks
> 
> Yinghai Lu
> 
> Yinghai Lu (7):
>   x86, mm: align start address to correct big page size
>   x86, mm: Use big page size for small memory range
>   x86, mm: Don't clear page table if next range is ram
>   x86, mm: only keep initial mapping for ram
>   x86, mm: Break down init_all_memory_mapping
>   x86, mm: setup page table from top-down
>   x86, mm: Remove early_memremap workaround for page table accessing
> 
>  arch/x86/include/asm/page_types.h |    1 +
>  arch/x86/include/asm/pgtable.h    |    1 +
>  arch/x86/kernel/setup.c           |    3 +
>  arch/x86/mm/init.c                |  251 ++++++++++++------------------------
>  arch/x86/mm/init_32.c             |   18 +++-
>  arch/x86/mm/init_64.c             |  100 ++++++---------
>  6 files changed, 144 insertions(+), 230 deletions(-)
> 
> -- 
> 1.7.7
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 4/7] x86, mm: only keep initial mapping for ram
  2012-10-09 23:58 ` [PATCH 4/7] x86, mm: only keep initial mapping for ram Yinghai Lu
@ 2012-10-10 13:48   ` Konrad Rzeszutek Wilk
  2012-10-10 14:59     ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-10-10 13:48 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, Stefano Stabellini, linux-kernel

On Tue, Oct 09, 2012 at 04:58:32PM -0700, Yinghai Lu wrote:
> 0 mean any e820 type will be kept, and only hole is removed.
> 
> change to E820_RAM and E820_RESERVED_KERN only.
> 

This is good candidate for squashing in-to the previous patch, with
verbose explanation why you care only about those two types.

> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> ---
>  arch/x86/mm/init_64.c |    9 ++++++---
>  1 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
> index 61b3c44..4898e80 100644
> --- a/arch/x86/mm/init_64.c
> +++ b/arch/x86/mm/init_64.c
> @@ -373,7 +373,8 @@ phys_pte_init(pte_t *pte_page, unsigned long addr, unsigned long end,
>  		next = (addr & PAGE_MASK) + PAGE_SIZE;
>  		if (addr >= end) {
>  			if (!after_bootmem &&
> -			    !e820_any_mapped(addr & PAGE_MASK, next, 0))
> +			    !e820_any_mapped(addr & PAGE_MASK, next, E820_RAM) &&
> +			    !e820_any_mapped(addr & PAGE_MASK, next, E820_RESERVED_KERN))
>  				set_pte(pte, __pte(0));
>  			continue;
>  		}
> @@ -420,7 +421,8 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
>  		next = (address & PMD_MASK) + PMD_SIZE;
>  		if (address >= end) {
>  			if (!after_bootmem &&
> -			    !e820_any_mapped(address & PMD_MASK, next, 0))
> +			    !e820_any_mapped(address & PMD_MASK, next, E820_RAM) &&
> +			    !e820_any_mapped(address & PMD_MASK, next, E820_RESERVED_KERN))
>  				set_pmd(pmd, __pmd(0));
>  			continue;
>  		}
> @@ -494,7 +496,8 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
>  		next = (addr & PUD_MASK) + PUD_SIZE;
>  		if (addr >= end) {
>  			if (!after_bootmem &&
> -			    !e820_any_mapped(addr & PUD_MASK, next, 0))
> +			    !e820_any_mapped(addr & PUD_MASK, next, E820_RAM) &&
> +			    !e820_any_mapped(addr & PUD_MASK, next, E820_RESERVED_KERN))
>  				set_pud(pud, __pud(0));
>  			continue;
>  		}
> -- 
> 1.7.7
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 5/7] x86, mm: Break down init_all_memory_mapping
  2012-10-09 23:58 ` [PATCH 5/7] x86, mm: Break down init_all_memory_mapping Yinghai Lu
@ 2012-10-10 13:55   ` Konrad Rzeszutek Wilk
  2012-10-10 15:42     ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-10-10 13:55 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, Stefano Stabellini, linux-kernel

On Tue, Oct 09, 2012 at 04:58:33PM -0700, Yinghai Lu wrote:
> Will replace that will top-down page table initialization.

s/will/with?

> new one need to take range.

Huh? I have no idea what this patch does from your description.
It says it will replace something (not identified) with
top-down table initialization.

And the code is not that simple - you should explain _how_ you
are changing it. From what it did before to what it does _now_.

Think of the audience of kernel engineers who have memory loss
and will forget everything in three months - the perfect time when
the merge window opens and bugs start appearing. They (ok, maybe
it is only me who is needs this) need the documentation to figure
out what went wrong. Please explain it.


> 
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> ---
>  arch/x86/mm/init.c |   41 +++++++++++++++++++----------------------
>  1 files changed, 19 insertions(+), 22 deletions(-)
> 
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index ebf76ce..23ce4db 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -393,40 +393,30 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
>   * Depending on the alignment of E820 ranges, this may possibly result in using
>   * smaller size (i.e. 4K instead of 2M or 1G) page tables.
>   */
> -static void __init init_all_memory_mapping(void)
> +static void __init init_all_memory_mapping(unsigned long all_start,
> +					   unsigned long all_end)
>  {
>  	unsigned long start_pfn, end_pfn;
>  	int i;
>  
> -	/* the ISA range is always mapped regardless of memory holes */
> -	init_memory_mapping(0, ISA_END_ADDRESS);
> -
>  	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
>  		u64 start = start_pfn << PAGE_SHIFT;
>  		u64 end = end_pfn << PAGE_SHIFT;
>  
> -		if (end <= ISA_END_ADDRESS)
> +		if (end <= all_start)
>  			continue;
>  
> -		if (start < ISA_END_ADDRESS)
> -			start = ISA_END_ADDRESS;
> -#ifdef CONFIG_X86_32
> -		/* on 32 bit, we only map up to max_low_pfn */
> -		if ((start >> PAGE_SHIFT) >= max_low_pfn)
> +		if (start < all_start)
> +			start = all_start;
> +
> +		if (start >= all_end)
>  			continue;
>  
> -		if ((end >> PAGE_SHIFT) > max_low_pfn)
> -			end = max_low_pfn << PAGE_SHIFT;
> -#endif
> -		init_memory_mapping(start, end);
> -	}
> +		if (end > all_end)
> +			end = all_end;
>  
> -#ifdef CONFIG_X86_64
> -	if (max_pfn > max_low_pfn) {
> -		/* can we preseve max_low_pfn ?*/
> -		max_low_pfn = max_pfn;
> +		init_memory_mapping(start, end);
>  	}
> -#endif
>  }
>  
>  void __init init_mem_mapping(void)
> @@ -456,8 +446,15 @@ void __init init_mem_mapping(void)
>  		(pgt_buf_top << PAGE_SHIFT) - 1);
>  
>  	max_pfn_mapped = 0; /* will get exact value next */
> -	init_all_memory_mapping();
> -
> +	/* the ISA range is always mapped regardless of memory holes */
> +	init_memory_mapping(0, ISA_END_ADDRESS);
> +	init_all_memory_mapping(ISA_END_ADDRESS, end);
> +#ifdef CONFIG_X86_64
> +	if (max_pfn > max_low_pfn) {
> +		/* can we preseve max_low_pfn ?*/
> +		max_low_pfn = max_pfn;
> +	}
> +#endif
>  	/*
>  	 * Reserve the kernel pagetable pages we used (pgt_buf_start -
>  	 * pgt_buf_end) and free the other ones (pgt_buf_end - pgt_buf_top)
> -- 
> 1.7.7
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-10 13:47 ` [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Konrad Rzeszutek Wilk
@ 2012-10-10 14:55   ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-10 14:55 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, Stefano Stabellini, linux-kernel

On Wed, Oct 10, 2012 at 6:47 AM, Konrad Rzeszutek Wilk
<konrad@kernel.org> wrote:
> On Tue, Oct 09, 2012 at 04:58:28PM -0700, Yinghai Lu wrote:
>> on top of tip/x86/mm2, but please zap last patch in that branch.
>
> So while I appreciate you actively looking at this and iteratively
> sending snapshots of the progress - I think it would be easier if
> you posted a patchset that has rework done completly per what
> Peter described.

it should be done this time,  so asked Stefano to test it again.

>
> That way folks who are reviewing will know when they can focus their
> time on reviewing the whole thing in one go instead of doing it
> step by step - as some of the patches still haven't addressed the
> review comments that were given the first time.

I addressed one that i can do.

>
>
>> 1. use brk to mapping first PMD_SIZE range.
>> 2. top down to initialize page table range by range.
>> 3. get rid of calculate page table, and find_early_page_table.
>> 4. remove early_ioremap in page table accessing.
>>
>> v2: changes, update xen interface about pagetable_reserve, so not
>>    use pgt_buf_* in xen code directly.
>> v3: use range top-down to initialize page table, so will not use
>>    calculating/find early table anymore.
>>    also reorder the patches sequence.
>>
>> could be found at:
>>         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git for-x86-mm
>>
>> later we could get rid of workaround about xen_mapping_pagetable_reserve, that
>> could kill another 50 lines codes. --- will do that later because x86/mm2 is
>> not updated to linus/master yet. If we do that now, will have merge conflicts.
>
> I am confused. Why do you need x86/mm2? If you do need it, you need to
> describe in this writeup why you depend on it, and what is there.
>
> You can't base it on linus's tree?

no, some init_memory_mapping related cleanups are in x86/mm2.

the whole story: while reviewing x86/mm2,
Stefano say it would be better to get rid of ioremap to access page table area.
so according to hpa's concept, I use some pages in BRK to pre-map page
table at first.
on -v2, with xen Stefano found panic on system with more than 4g.
To address that panic, we come out -v3 that will map memory top-down
and range size for
each step is from PMD_SIZE to more bigger...

Thanks

Yinghai

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 4/7] x86, mm: only keep initial mapping for ram
  2012-10-10 13:48   ` Konrad Rzeszutek Wilk
@ 2012-10-10 14:59     ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-10 14:59 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, Stefano Stabellini, linux-kernel

On Wed, Oct 10, 2012 at 6:48 AM, Konrad Rzeszutek Wilk
<konrad@kernel.org> wrote:
> On Tue, Oct 09, 2012 at 04:58:32PM -0700, Yinghai Lu wrote:
>> 0 mean any e820 type will be kept, and only hole is removed.
>>
>> change to E820_RAM and E820_RESERVED_KERN only.
>>
>
> This is good candidate for squashing in-to the previous patch, with
> verbose explanation why you care only about those two types.

two patches should be more safe.

new series will make sure only map RAM/RESEVED_KERN, so we should only
keep initial page table with those types.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 5/7] x86, mm: Break down init_all_memory_mapping
  2012-10-10 13:55   ` Konrad Rzeszutek Wilk
@ 2012-10-10 15:42     ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-10 15:42 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, Stefano Stabellini, linux-kernel

On Wed, Oct 10, 2012 at 6:55 AM, Konrad Rzeszutek Wilk
<konrad@kernel.org> wrote:
> On Tue, Oct 09, 2012 at 04:58:33PM -0700, Yinghai Lu wrote:
>> Will replace that will top-down page table initialization.
>
> s/will/with?
>
>> new one need to take range.
>
> Huh? I have no idea what this patch does from your description.
> It says it will replace something (not identified) with
> top-down table initialization.
>
> And the code is not that simple - you should explain _how_ you
> are changing it. From what it did before to what it does _now_.

I tried to make the next patch to be little smaller, so split this change out.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 6/7] x86, mm: setup page table from top-down
  2012-10-09 23:58 ` [PATCH 6/7] x86, mm: setup page table from top-down Yinghai Lu
  2012-10-10  1:53   ` Yinghai Lu
@ 2012-10-10 16:38   ` Stefano Stabellini
  2012-10-10 17:07     ` Yinghai Lu
  1 sibling, 1 reply; 115+ messages in thread
From: Stefano Stabellini @ 2012-10-10 16:38 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, Stefano Stabellini, linux-kernel

On Wed, 10 Oct 2012, Yinghai Lu wrote:
> Get pgt_buf early from BRK, and use it to map PMD_SIZE to top at first.
> then use page from PMD_SIZE to map next blow range.
> 
> alloc_low_page will use page from BRK at first, then will switch to use
> to memblock to find and reserve page for page table usage.
> 
> At last we could get rid of calculation and find early pgt related code.
> 
> Suggested-by: "H. Peter Anvin" <hpa@zytor.com>
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> ---
>  arch/x86/include/asm/page_types.h |    1 +
>  arch/x86/include/asm/pgtable.h    |    1 +
>  arch/x86/kernel/setup.c           |    3 +
>  arch/x86/mm/init.c                |  188 ++++++++-----------------------------
>  arch/x86/mm/init_32.c             |   17 +++-
>  arch/x86/mm/init_64.c             |   17 +++-
>  6 files changed, 71 insertions(+), 156 deletions(-)
> 
> diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
> index 54c9787..9f6f3e6 100644
> --- a/arch/x86/include/asm/page_types.h
> +++ b/arch/x86/include/asm/page_types.h
> @@ -45,6 +45,7 @@ extern int devmem_is_allowed(unsigned long pagenr);
>  
>  extern unsigned long max_low_pfn_mapped;
>  extern unsigned long max_pfn_mapped;
> +extern unsigned long min_pfn_mapped;
>  
>  static inline phys_addr_t get_max_mapped(void)
>  {
> diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
> index 52d40a1..25fa5bb 100644
> --- a/arch/x86/include/asm/pgtable.h
> +++ b/arch/x86/include/asm/pgtable.h
> @@ -599,6 +599,7 @@ static inline int pgd_none(pgd_t pgd)
>  
>  extern int direct_gbpages;
>  void init_mem_mapping(void);
> +void early_alloc_pgt_buf(void);
>  
>  /* local pte updates need not use xchg for locking */
>  static inline pte_t native_local_ptep_get_and_clear(pte_t *ptep)
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index 4989f80..3987daa 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -123,6 +123,7 @@
>   */
>  unsigned long max_low_pfn_mapped;
>  unsigned long max_pfn_mapped;
> +unsigned long min_pfn_mapped;
>  
>  #ifdef CONFIG_DMI
>  RESERVE_BRK(dmi_alloc, 65536);
> @@ -896,6 +897,8 @@ void __init setup_arch(char **cmdline_p)
>  
>  	reserve_ibft_region();
>  
> +	early_alloc_pgt_buf();
> +
>  	/*
>  	 * Need to conclude brk, before memblock_x86_fill()
>  	 *  it could use memblock_find_in_range, could overlap with
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index 23ce4db..a060381 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -223,105 +223,6 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
>  	return nr_range;
>  }
>  
> -static unsigned long __init calculate_table_space_size(unsigned long start,
> -					  unsigned long end)
> -{
> -	unsigned long puds = 0, pmds = 0, ptes = 0, tables;
> -	struct map_range mr[NR_RANGE_MR];
> -	int nr_range, i;
> -
> -	pr_info("calculate_table_space_size: [mem %#010lx-%#010lx]\n",
> -	       start, end - 1);
> -
> -	memset(mr, 0, sizeof(mr));
> -	nr_range = 0;
> -	nr_range = split_mem_range(mr, nr_range, start, end);
> -
> -	for (i = 0; i < nr_range; i++) {
> -		unsigned long range, extra;
> -
> -		range = mr[i].end - mr[i].start;
> -		puds += (range + PUD_SIZE - 1) >> PUD_SHIFT;
> -
> -		if (mr[i].page_size_mask & (1 << PG_LEVEL_1G)) {
> -			extra = range - ((range >> PUD_SHIFT) << PUD_SHIFT);
> -			pmds += (extra + PMD_SIZE - 1) >> PMD_SHIFT;
> -		} else
> -			pmds += (range + PMD_SIZE - 1) >> PMD_SHIFT;
> -
> -		if (mr[i].page_size_mask & (1 << PG_LEVEL_2M)) {
> -			extra = range - ((range >> PMD_SHIFT) << PMD_SHIFT);
> -#ifdef CONFIG_X86_32
> -			extra += PMD_SIZE;
> -#endif
> -			/* The first 2/4M doesn't use large pages. */
> -			if (mr[i].start < PMD_SIZE)
> -				extra += PMD_SIZE - mr[i].start;
> -
> -			ptes += (extra + PAGE_SIZE - 1) >> PAGE_SHIFT;
> -		} else
> -			ptes += (range + PAGE_SIZE - 1) >> PAGE_SHIFT;
> -	}
> -
> -	tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
> -	tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE);
> -	tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE);
> -
> -#ifdef CONFIG_X86_32
> -	/* for fixmap */
> -	tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE);
> -#endif
> -
> -	return tables;
> -}
> -
> -static unsigned long __init calculate_all_table_space_size(void)
> -{
> -	unsigned long start_pfn, end_pfn;
> -	unsigned long tables;
> -	int i;
> -
> -	/* the ISA range is always mapped regardless of memory holes */
> -	tables = calculate_table_space_size(0, ISA_END_ADDRESS);
> -
> -	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
> -		u64 start = start_pfn << PAGE_SHIFT;
> -		u64 end = end_pfn << PAGE_SHIFT;
> -
> -		if (end <= ISA_END_ADDRESS)
> -			continue;
> -
> -		if (start < ISA_END_ADDRESS)
> -			start = ISA_END_ADDRESS;
> -#ifdef CONFIG_X86_32
> -		/* on 32 bit, we only map up to max_low_pfn */
> -		if ((start >> PAGE_SHIFT) >= max_low_pfn)
> -			continue;
> -
> -		if ((end >> PAGE_SHIFT) > max_low_pfn)
> -			end = max_low_pfn << PAGE_SHIFT;
> -#endif
> -		tables += calculate_table_space_size(start, end);
> -	}
> -
> -	return tables;
> -}
> -
> -static void __init find_early_table_space(unsigned long start,
> -					  unsigned long good_end,
> -					  unsigned long tables)
> -{
> -	phys_addr_t base;
> -
> -	base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE);
> -	if (!base)
> -		panic("Cannot find space for the kernel page tables");
> -
> -	pgt_buf_start = base >> PAGE_SHIFT;
> -	pgt_buf_end = pgt_buf_start;
> -	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
> -}
> -
>  static struct range pfn_mapped[E820_X_MAX];
>  static int nr_pfn_mapped;
>  
> @@ -386,22 +287,17 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
>  }
>  
>  /*
> - * Iterate through E820 memory map and create direct mappings for only E820_RAM
> - * regions. We cannot simply create direct mappings for all pfns from
> - * [0 to max_low_pfn) and [4GB to max_pfn) because of possible memory holes in
> - * high addresses that cannot be marked as UC by fixed/variable range MTRRs.
> - * Depending on the alignment of E820 ranges, this may possibly result in using
> - * smaller size (i.e. 4K instead of 2M or 1G) page tables.
> + * this one could take range with hole in it
>   */
> -static void __init init_all_memory_mapping(unsigned long all_start,
> +static void __init init_range_memory_mapping(unsigned long all_start,
>  					   unsigned long all_end)
>  {
>  	unsigned long start_pfn, end_pfn;
>  	int i;
>  
>  	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
> -		u64 start = start_pfn << PAGE_SHIFT;
> -		u64 end = end_pfn << PAGE_SHIFT;
> +		u64 start = (u64)start_pfn << PAGE_SHIFT;
> +		u64 end = (u64)end_pfn << PAGE_SHIFT;
>  
>  		if (end <= all_start)
>  			continue;
> @@ -421,67 +317,59 @@ static void __init init_all_memory_mapping(unsigned long all_start,
>  
>  void __init init_mem_mapping(void)
>  {
> -	unsigned long tables, good_end, end;
> +	unsigned long end, start, last_start;
> +	unsigned long step_size;
>  
>  	probe_page_size_mask();
>  
> -	/*
> -	 * Find space for the kernel direct mapping tables.
> -	 *
> -	 * Later we should allocate these tables in the local node of the
> -	 * memory mapped. Unfortunately this is done currently before the
> -	 * nodes are discovered.
> -	 */
>  #ifdef CONFIG_X86_64
>  	end = max_pfn << PAGE_SHIFT;
> -	good_end = end;
>  #else
>  	end = max_low_pfn << PAGE_SHIFT;
> -	good_end = max_pfn_mapped << PAGE_SHIFT;
>  #endif
> -	tables = calculate_all_table_space_size();
> -	find_early_table_space(0, good_end, tables);
> -	printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] prealloc\n",
> -		end - 1, pgt_buf_start << PAGE_SHIFT,
> -		(pgt_buf_top << PAGE_SHIFT) - 1);
>  
> -	max_pfn_mapped = 0; /* will get exact value next */
>  	/* the ISA range is always mapped regardless of memory holes */
>  	init_memory_mapping(0, ISA_END_ADDRESS);
> -	init_all_memory_mapping(ISA_END_ADDRESS, end);
> +
> +	/* step_size need to be small so pgt_buf from BRK could cover it */
> +	step_size = PMD_SIZE;
> +	max_pfn_mapped = 0; /* will get exact value next */
> +	min_pfn_mapped = end >> PAGE_SHIFT;
> +	last_start = start = end;
> +	while (last_start > ISA_END_ADDRESS) {
> +		if (last_start > step_size) {
> +			start = round_down(last_start - 1, step_size);
> +			if (start < ISA_END_ADDRESS)
> +				start = ISA_END_ADDRESS;
> +		} else
> +			start = ISA_END_ADDRESS;
> +		init_all_memory_mapping(start, last_start);
> +		last_start = start;
> +		min_pfn_mapped = last_start >> PAGE_SHIFT;
> +		step_size <<= 5;
> +	}
> +
>  #ifdef CONFIG_X86_64
>  	if (max_pfn > max_low_pfn) {
>  		/* can we preseve max_low_pfn ?*/
>  		max_low_pfn = max_pfn;
>  	}
>  #endif
> -	/*
> -	 * Reserve the kernel pagetable pages we used (pgt_buf_start -
> -	 * pgt_buf_end) and free the other ones (pgt_buf_end - pgt_buf_top)
> -	 * so that they can be reused for other purposes.
> -	 *
> -	 * On native it just means calling memblock_reserve, on Xen it also
> -	 * means marking RW the pagetable pages that we allocated before
> -	 * but that haven't been used.
> -	 *
> -	 * In fact on xen we mark RO the whole range pgt_buf_start -
> -	 * pgt_buf_top, because we have to make sure that when
> -	 * init_memory_mapping reaches the pagetable pages area, it maps
> -	 * RO all the pagetable pages, including the ones that are beyond
> -	 * pgt_buf_end at that time.
> -	 */
> -	if (pgt_buf_end > pgt_buf_start) {
> -		printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] final\n",
> -			end - 1, pgt_buf_start << PAGE_SHIFT,
> -			(pgt_buf_end << PAGE_SHIFT) - 1);
> -		x86_init.mapping.pagetable_reserve(PFN_PHYS(pgt_buf_start),
> -				PFN_PHYS(pgt_buf_end));
> -	}
> +	early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
> +}
>  
> -	/* stop the wrong using */
> -	pgt_buf_top = 0;
> +/* need 3 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */
> +RESERVE_BRK(early_pgt_alloc, 16384);
> +void  __init early_alloc_pgt_buf(void)
> +{
> +	unsigned long tables = 16384;
> +	phys_addr_t base;
>  
> -	early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
> +	base = __pa(extend_brk(tables, PAGE_SIZE));
> +
> +	pgt_buf_start = base >> PAGE_SHIFT;
> +	pgt_buf_end = pgt_buf_start;
> +	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
>  }
>  
>  /*
> diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
> index 27f7fc6..7bb1106 100644
> --- a/arch/x86/mm/init_32.c
> +++ b/arch/x86/mm/init_32.c
> @@ -61,11 +61,22 @@ bool __read_mostly __vmalloc_start_set = false;
>  
>  static __init void *alloc_low_page(void)
>  {
> -	unsigned long pfn = pgt_buf_end++;
> +	unsigned long pfn;
>  	void *adr;
>  
> -	if (pfn >= pgt_buf_top)
> -		panic("alloc_low_page: ran out of memory");
> +	if ((pgt_buf_end + 1) >= pgt_buf_top) {
> +		unsigned long ret;
> +		if (min_pfn_mapped >= max_pfn_mapped)
> +			panic("alloc_low_page: ran out of memory");
> +		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
> +					max_pfn_mapped << PAGE_SHIFT,
> +					PAGE_SIZE, PAGE_SIZE);
> +		if (!ret)
> +			panic("alloc_low_page: can not alloc memory");
> +		memblock_reserve(ret, PAGE_SIZE);
> +		pfn = ret >> PAGE_SHIFT;
> +	} else
> +		pfn = pgt_buf_end++;
>  
>  	adr = __va(pfn * PAGE_SIZE);
>  	clear_page(adr);
> diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
> index 4898e80..7dfa69b 100644
> --- a/arch/x86/mm/init_64.c
> +++ b/arch/x86/mm/init_64.c
> @@ -316,7 +316,7 @@ void __init cleanup_highmap(void)
>  
>  static __ref void *alloc_low_page(unsigned long *phys)
>  {
> -	unsigned long pfn = pgt_buf_end++;
> +	unsigned long pfn;
>  	void *adr;
>  
>  	if (after_bootmem) {
> @@ -326,8 +326,19 @@ static __ref void *alloc_low_page(unsigned long *phys)
>  		return adr;
>  	}
>  
> -	if (pfn >= pgt_buf_top)
> -		panic("alloc_low_page: ran out of memory");
> +	if ((pgt_buf_end + 1) >= pgt_buf_top) {
> +		unsigned long ret;
> +		if (min_pfn_mapped >= max_pfn_mapped)
> +			panic("alloc_low_page: ran out of memory");
> +		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
> +					max_pfn_mapped << PAGE_SHIFT,
> +					PAGE_SIZE, PAGE_SIZE);
> +		if (!ret)
> +			panic("alloc_low_page: can not alloc memory");
> +		memblock_reserve(ret, PAGE_SIZE);
> +		pfn = ret >> PAGE_SHIFT;

This cannot be right: you are allocating another page to be used as
pagetable page, outside the range pgt_buf_start-pgt_buf_top.

When that page is going to be hooked into the live pagetable, the kernel
is going to panic on Xen because the page wasn't marked RO.

If you want to do that you need to tell the Xen subsystem of the new
page. pagetable_reserve is not the right call, we need a new one (see
past emails).


> +	} else
> +		pfn = pgt_buf_end++;
>  
>  	adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
>  	clear_page(adr);
> -- 
> 1.7.7
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
                   ` (7 preceding siblings ...)
  2012-10-10 13:47 ` [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Konrad Rzeszutek Wilk
@ 2012-10-10 16:40 ` Stefano Stabellini
  2012-10-11  6:13   ` Yinghai Lu
  8 siblings, 1 reply; 115+ messages in thread
From: Stefano Stabellini @ 2012-10-10 16:40 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, Stefano Stabellini, linux-kernel

On Wed, 10 Oct 2012, Yinghai Lu wrote:
> on top of tip/x86/mm2, but please zap last patch in that branch.
> 
> 1. use brk to mapping first PMD_SIZE range.
> 2. top down to initialize page table range by range.
> 3. get rid of calculate page table, and find_early_page_table.
> 4. remove early_ioremap in page table accessing.
> 
> v2: changes, update xen interface about pagetable_reserve, so not
>    use pgt_buf_* in xen code directly.
> v3: use range top-down to initialize page table, so will not use
>    calculating/find early table anymore.
>    also reorder the patches sequence.
> 
> could be found at:
>         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git for-x86-mm
> 
> later we could get rid of workaround about xen_mapping_pagetable_reserve, that
> could kill another 50 lines codes. --- will do that later because x86/mm2 is
> not updated to linus/master yet. If we do that now, will have merge conflicts.

I don't think you can change the x86 code without changing the xen code
at the same time, otherwise you'll be really likely to break Xen. That
is unless you don't change any of the pvops but I thought that it was
one of the point of this series.



> Yinghai Lu
> 
> Yinghai Lu (7):
>   x86, mm: align start address to correct big page size
>   x86, mm: Use big page size for small memory range
>   x86, mm: Don't clear page table if next range is ram
>   x86, mm: only keep initial mapping for ram
>   x86, mm: Break down init_all_memory_mapping
>   x86, mm: setup page table from top-down
>   x86, mm: Remove early_memremap workaround for page table accessing
> 
>  arch/x86/include/asm/page_types.h |    1 +
>  arch/x86/include/asm/pgtable.h    |    1 +
>  arch/x86/kernel/setup.c           |    3 +
>  arch/x86/mm/init.c                |  251 ++++++++++++------------------------
>  arch/x86/mm/init_32.c             |   18 +++-
>  arch/x86/mm/init_64.c             |  100 ++++++---------
>  6 files changed, 144 insertions(+), 230 deletions(-)

So you are missing the Xen patches entirely in this iteration of the
series?

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 6/7] x86, mm: setup page table from top-down
  2012-10-10 16:38   ` Stefano Stabellini
@ 2012-10-10 17:07     ` Yinghai Lu
  2012-10-10 17:26       ` Stefano Stabellini
  0 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-10-10 17:07 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, linux-kernel

On Wed, Oct 10, 2012 at 9:38 AM, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
>> -     if (pfn >= pgt_buf_top)
>> -             panic("alloc_low_page: ran out of memory");
>> +     if ((pgt_buf_end + 1) >= pgt_buf_top) {
>> +             unsigned long ret;
>> +             if (min_pfn_mapped >= max_pfn_mapped)
>> +                     panic("alloc_low_page: ran out of memory");
>> +             ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
>> +                                     max_pfn_mapped << PAGE_SHIFT,
>> +                                     PAGE_SIZE, PAGE_SIZE);
>> +             if (!ret)
>> +                     panic("alloc_low_page: can not alloc memory");
>> +             memblock_reserve(ret, PAGE_SIZE);
>> +             pfn = ret >> PAGE_SHIFT;
>
> This cannot be right: you are allocating another page to be used as
> pagetable page, outside the range pgt_buf_start-pgt_buf_top.
>
> When that page is going to be hooked into the live pagetable, the kernel
> is going to panic on Xen because the page wasn't marked RO.
>
> If you want to do that you need to tell the Xen subsystem of the new
> page. pagetable_reserve is not the right call, we need a new one (see
> past emails).

ok, will change that interface and call in from alloc_low_page.

how about the pages from BRK, do we need to call xen hooks to mark it as RO?

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 6/7] x86, mm: setup page table from top-down
  2012-10-10 17:07     ` Yinghai Lu
@ 2012-10-10 17:26       ` Stefano Stabellini
  2012-10-10 17:38         ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Stefano Stabellini @ 2012-10-10 17:26 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Jacob Shin, Tejun Heo, linux-kernel

On Wed, 10 Oct 2012, Yinghai Lu wrote:
> On Wed, Oct 10, 2012 at 9:38 AM, Stefano Stabellini
> <stefano.stabellini@eu.citrix.com> wrote:
> >> -     if (pfn >= pgt_buf_top)
> >> -             panic("alloc_low_page: ran out of memory");
> >> +     if ((pgt_buf_end + 1) >= pgt_buf_top) {
> >> +             unsigned long ret;
> >> +             if (min_pfn_mapped >= max_pfn_mapped)
> >> +                     panic("alloc_low_page: ran out of memory");
> >> +             ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
> >> +                                     max_pfn_mapped << PAGE_SHIFT,
> >> +                                     PAGE_SIZE, PAGE_SIZE);
> >> +             if (!ret)
> >> +                     panic("alloc_low_page: can not alloc memory");
> >> +             memblock_reserve(ret, PAGE_SIZE);
> >> +             pfn = ret >> PAGE_SHIFT;
> >
> > This cannot be right: you are allocating another page to be used as
> > pagetable page, outside the range pgt_buf_start-pgt_buf_top.
> >
> > When that page is going to be hooked into the live pagetable, the kernel
> > is going to panic on Xen because the page wasn't marked RO.
> >
> > If you want to do that you need to tell the Xen subsystem of the new
> > page. pagetable_reserve is not the right call, we need a new one (see
> > past emails).
> 
> ok, will change that interface and call in from alloc_low_page.
> 
> how about the pages from BRK, do we need to call xen hooks to mark it as RO?
> 

It doesn't matter whether they come from BRK or other memory: Xen
assumes that all the pagetable pages come from
pgt_buf_start-pgt_buf_top, so if you are going to use another range you
need to tell Xen about it.

Alternatively, you can follow Peter's suggestion and replace the current
hooks with a new one with a more precise and well defined semantic.
Something along the lines of "this pagetable page is about to be hooked
into the live pagetable". Xen would use the hook to mark it RO.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 6/7] x86, mm: setup page table from top-down
  2012-10-10 17:26       ` Stefano Stabellini
@ 2012-10-10 17:38         ` Yinghai Lu
  2012-11-16 17:14           ` H. Peter Anvin
  0 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-10-10 17:38 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 704 bytes --]

On Wed, Oct 10, 2012 at 10:26 AM, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
> On Wed, 10 Oct 2012, Yinghai Lu wrote:
>
> It doesn't matter whether they come from BRK or other memory: Xen
> assumes that all the pagetable pages come from
> pgt_buf_start-pgt_buf_top, so if you are going to use another range you
> need to tell Xen about it.
>
> Alternatively, you can follow Peter's suggestion and replace the current
> hooks with a new one with a more precise and well defined semantic.
> Something along the lines of "this pagetable page is about to be hooked
> into the live pagetable". Xen would use the hook to mark it RO.

attached patch on top of this patch will fix the problem?

[-- Attachment #2: fix_xen.patch --]
[-- Type: application/octet-stream, Size: 3358 bytes --]

---
 arch/x86/include/asm/x86_init.h |    2 +-
 arch/x86/kernel/x86_init.c      |    3 ++-
 arch/x86/mm/init_32.c           |    1 +
 arch/x86/mm/init_64.c           |    1 +
 arch/x86/xen/mmu.c              |   15 +++------------
 5 files changed, 8 insertions(+), 14 deletions(-)

Index: linux-2.6/arch/x86/include/asm/x86_init.h
===================================================================
--- linux-2.6.orig/arch/x86/include/asm/x86_init.h
+++ linux-2.6/arch/x86/include/asm/x86_init.h
@@ -76,7 +76,7 @@ struct x86_init_oem {
  * init_memory_mapping and the commit that added it.
  */
 struct x86_init_mapping {
-	void (*pagetable_reserve)(u64 start, u64 end);
+	void (*mark_page_ro)(u64 addr);
 };
 
 /**
Index: linux-2.6/arch/x86/kernel/x86_init.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/x86_init.c
+++ linux-2.6/arch/x86/kernel/x86_init.c
@@ -28,6 +28,7 @@ void __cpuinit x86_init_noop(void) { }
 void __init x86_init_uint_noop(unsigned int unused) { }
 int __init iommu_init_noop(void) { return 0; }
 void iommu_shutdown_noop(void) { }
+static void mark_page_ro_noop(u64 addr) { }
 
 /*
  * The platform setup functions are preset with the default functions
@@ -63,7 +64,7 @@ struct x86_init_ops x86_init __initdata
 	},
 
 	.mapping = {
-		.pagetable_reserve		= native_pagetable_reserve,
+		.mark_page_ro			= mark_page_ro_noop;
 	},
 
 	.paging = {
Index: linux-2.6/arch/x86/xen/mmu.c
===================================================================
--- linux-2.6.orig/arch/x86/xen/mmu.c
+++ linux-2.6/arch/x86/xen/mmu.c
@@ -1177,18 +1177,9 @@ static void xen_exit_mmap(struct mm_stru
 
 static void xen_post_allocator_init(void);
 
-static __init void xen_mapping_pagetable_reserve(u64 start, u64 end)
+static __init void xen_mapping_mark_page_ro(u64 addr)
 {
-	/* reserve the range used */
-	native_pagetable_reserve(start, end);
-
-	/* set as RW the rest */
-	printk(KERN_DEBUG "xen: setting RW the range %llx - %llx\n", end,
-			PFN_PHYS(pgt_buf_top));
-	while (end < PFN_PHYS(pgt_buf_top)) {
-		make_lowmem_page_readwrite(__va(end));
-		end += PAGE_SIZE;
-	}
+	make_lowmem_page_readonly(__va(addr));
 }
 
 #ifdef CONFIG_X86_64
@@ -2177,7 +2168,7 @@ static const struct pv_mmu_ops xen_mmu_o
 
 void __init xen_init_mmu_ops(void)
 {
-	x86_init.mapping.pagetable_reserve = xen_mapping_pagetable_reserve;
+	x86_init.mapping.mark_page_ro = xen_mapping_mark_page_ro;
 	x86_init.paging.pagetable_init = xen_pagetable_init;
 	pv_mmu_ops = xen_mmu_ops;
 
Index: linux-2.6/arch/x86/mm/init_32.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init_32.c
+++ linux-2.6/arch/x86/mm/init_32.c
@@ -78,6 +78,7 @@ static __init void *alloc_low_page(void)
 	} else
 		pfn = pgt_buf_end++;
 
+	x86_init.mapping.mark_page_ro(pfn << PAGE_SHIFT);
 	adr = __va(pfn * PAGE_SIZE);
 	clear_page(adr);
 	return adr;
Index: linux-2.6/arch/x86/mm/init_64.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init_64.c
+++ linux-2.6/arch/x86/mm/init_64.c
@@ -340,6 +340,7 @@ static __ref void *alloc_low_page(unsign
 	} else
 		pfn = pgt_buf_end++;
 
+	x86_init.mapping.mark_page_ro(pfn << PAGE_SHIFT);
 	adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
 	clear_page(adr);
 	*phys  = pfn * PAGE_SIZE;

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-10 16:40 ` Stefano Stabellini
@ 2012-10-11  6:13   ` Yinghai Lu
  2012-10-11 23:04     ` Yinghai Lu
                       ` (2 more replies)
  0 siblings, 3 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-11  6:13 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, linux-kernel

On Wed, Oct 10, 2012 at 9:40 AM, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
>
> So you are missing the Xen patches entirely in this iteration of the
> series?

please check updated for-x86-mm branch.

[PATCH -v4 00/15] x86: Use BRK to pre mapping page table to make xen happy

on top of current linus/master and tip/x86/mm2, but please zap last
patch in that branch.

1. use brk to mapping first PMD_SIZE range.
2. top down to initialize page table range by range.
3. get rid of calculate page table, and find_early_page_table.
4. remove early_ioremap in page table accessing.

v2: changes, update xen interface about pagetable_reserve, so not
   use pgt_buf_* in xen code directly.
v3: use range top-down to initialize page table, so will not use
   calculating/find early table anymore.
   also reorder the patches sequence.
v4: add mapping_mark_page_ro to fix xen, also move pgt_buf_* to init.c
    and merge alloc_low_page()

could be found at:
        git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
for-x86-mm

Yinghai Lu (15):
  x86, mm: Align start address to correct big page size
  x86, mm: Use big page size for small memory range
  x86, mm: Don't clear page table if next range is ram
  x86, mm: only keep initial mapping for ram
  x86, mm: Break down init_all_memory_mapping
  x86, xen: Add xen_mapping_mark_page_ro
  x86, mm: setup page table in top-down
  x86, mm: Remove early_memremap workaround for page table accessing on 64bit
  x86, mm: Remove parameter in alloc_low_page for 64bit
  x86, mm: Merge alloc_low_page between 64bit and 32bit
  x86, mm: Move min_pfn_mapped back to mm/init.c
  x86, mm, xen: Remove mapping_pagatable_reserve
  x86, mm: Add alloc_low_pages(num)
  x86, mm: only call early_ioremap_page_range_init() one time on 32bit
  x86, mm: Move back pgt_buf_* to mm/init.c

 arch/x86/include/asm/init.h          |    4 -
 arch/x86/include/asm/pgtable.h       |    1 +
 arch/x86/include/asm/pgtable_types.h |    1 -
 arch/x86/include/asm/x86_init.h      |    2 +-
 arch/x86/kernel/setup.c              |    2 +
 arch/x86/kernel/x86_init.c           |    3 +-
 arch/x86/mm/init.c                   |  321 +++++++++++++++-------------------
 arch/x86/mm/init_32.c                |   76 ++++++--
 arch/x86/mm/init_64.c                |  119 ++++---------
 arch/x86/mm/mm_internal.h            |   11 ++
 arch/x86/xen/mmu.c                   |   29 +---
 11 files changed, 249 insertions(+), 320 deletions(-)
 create mode 100644 arch/x86/mm/mm_internal.h

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-11  6:13   ` Yinghai Lu
@ 2012-10-11 23:04     ` Yinghai Lu
  2012-10-18 16:17     ` Stefano Stabellini
  2012-10-30 13:44     ` Konrad Rzeszutek Wilk
  2 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-11 23:04 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, linux-kernel

On Wed, Oct 10, 2012 at 11:13 PM, Yinghai Lu <yinghai@kernel.org> wrote:
> On Wed, Oct 10, 2012 at 9:40 AM, Stefano Stabellini
> <stefano.stabellini@eu.citrix.com> wrote:
>>
>> So you are missing the Xen patches entirely in this iteration of the
>> series?
>
> please check updated for-x86-mm branch.
>
> [PATCH -v4 00/15] x86: Use BRK to pre mapping page table to make xen happy
>
> could be found at:
>         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
> for-x86-mm

Stefano,

Can you try -v4 to see if xen works with the changes?

Thanks

Yinghai

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-11  6:13   ` Yinghai Lu
  2012-10-11 23:04     ` Yinghai Lu
@ 2012-10-18 16:17     ` Stefano Stabellini
  2012-10-18 16:26       ` Jacob Shin
  2012-10-18 20:43       ` Yinghai Lu
  2012-10-30 13:44     ` Konrad Rzeszutek Wilk
  2 siblings, 2 replies; 115+ messages in thread
From: Stefano Stabellini @ 2012-10-18 16:17 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Jacob Shin, Tejun Heo, linux-kernel

On Thu, 11 Oct 2012, Yinghai Lu wrote:
> On Wed, Oct 10, 2012 at 9:40 AM, Stefano Stabellini
> <stefano.stabellini@eu.citrix.com> wrote:
> >
> > So you are missing the Xen patches entirely in this iteration of the
> > series?
> 
> please check updated for-x86-mm branch.
> 
> [PATCH -v4 00/15] x86: Use BRK to pre mapping page table to make xen happy
> 
> on top of current linus/master and tip/x86/mm2, but please zap last
> patch in that branch.
> 
> 1. use brk to mapping first PMD_SIZE range.
> 2. top down to initialize page table range by range.
> 3. get rid of calculate page table, and find_early_page_table.
> 4. remove early_ioremap in page table accessing.
> 
> v2: changes, update xen interface about pagetable_reserve, so not
>    use pgt_buf_* in xen code directly.
> v3: use range top-down to initialize page table, so will not use
>    calculating/find early table anymore.
>    also reorder the patches sequence.
> v4: add mapping_mark_page_ro to fix xen, also move pgt_buf_* to init.c
>     and merge alloc_low_page()
> 
> could be found at:
>         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
> for-x86-mm

I find that patch series are easier to review than having to checkout
your code and read the commit messages. Please post your patch series to
the LKML next time.

In any case, regarding "x86, xen: Add xen_mapping_mark_page_ro": please
take Peter's feedback into account; mark_page_ro is not a good name for
a pvops.
Also I don't believe that this call is actually needed, see below.

Regarding "x86, mm: setup page table in top-down": if you mark the
pagetable page RO in alloc_low_page, won't the entire thing crash as
soon as you try to write to it? You are supposed to mark it RO after
filling up the pagetable page and before hooking it into the live
pagetable.
However contrary to my expectations, I did a quick test and it seems to
be working, that is probably due to a bug: maybe __pa or lookup_address
don't work correctly when called so early?

In any case we don't care about that because if we assume that
alloc_low_pages will always return a page from a range that is already
mapped, then we do not need this pvop anymore. That's because
xen_alloc_pte_init, xen_alloc_pmd_init, etc, will mark the page RO
before hooking it into the pagetable automatically.
Sorry for I misled you last time.

Let me repeat it again:
Can we assume that the page returned by alloc_low_pages is already mapped?

Yes? In that case let's get rid of mark_page_ro and everything should
work.

It is worth stating it in clear letters in a comment on top of
alloc_low_pages:

"This function always returns a page from a memory range already
mapped."

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-18 16:17     ` Stefano Stabellini
@ 2012-10-18 16:26       ` Jacob Shin
  2012-10-18 16:57         ` Stefano Stabellini
  2012-10-18 20:40         ` Yinghai Lu
  2012-10-18 20:43       ` Yinghai Lu
  1 sibling, 2 replies; 115+ messages in thread
From: Jacob Shin @ 2012-10-18 16:26 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Yinghai Lu, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Tejun Heo, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 6154 bytes --]

On Thu, Oct 18, 2012 at 05:17:28PM +0100, Stefano Stabellini wrote:
> On Thu, 11 Oct 2012, Yinghai Lu wrote:
> > On Wed, Oct 10, 2012 at 9:40 AM, Stefano Stabellini
> > <stefano.stabellini@eu.citrix.com> wrote:
> > >
> > > So you are missing the Xen patches entirely in this iteration of the
> > > series?
> > 
> > please check updated for-x86-mm branch.
> > 
> > [PATCH -v4 00/15] x86: Use BRK to pre mapping page table to make xen happy
> > 
> > on top of current linus/master and tip/x86/mm2, but please zap last
> > patch in that branch.
> > 
> > 1. use brk to mapping first PMD_SIZE range.
> > 2. top down to initialize page table range by range.
> > 3. get rid of calculate page table, and find_early_page_table.
> > 4. remove early_ioremap in page table accessing.
> > 
> > v2: changes, update xen interface about pagetable_reserve, so not
> >    use pgt_buf_* in xen code directly.
> > v3: use range top-down to initialize page table, so will not use
> >    calculating/find early table anymore.
> >    also reorder the patches sequence.
> > v4: add mapping_mark_page_ro to fix xen, also move pgt_buf_* to init.c
> >     and merge alloc_low_page()
> > 
> > could be found at:
> >         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
> > for-x86-mm
> 
> I find that patch series are easier to review than having to checkout
> your code and read the commit messages. Please post your patch series to
> the LKML next time.
> 
> In any case, regarding "x86, xen: Add xen_mapping_mark_page_ro": please
> take Peter's feedback into account; mark_page_ro is not a good name for
> a pvops.
> Also I don't believe that this call is actually needed, see below.
> 
> Regarding "x86, mm: setup page table in top-down": if you mark the
> pagetable page RO in alloc_low_page, won't the entire thing crash as
> soon as you try to write to it? You are supposed to mark it RO after
> filling up the pagetable page and before hooking it into the live
> pagetable.
> However contrary to my expectations, I did a quick test and it seems to
> be working, that is probably due to a bug: maybe __pa or lookup_address
> don't work correctly when called so early?

Hi Yinghai, I just tried it and dom0 died during init_memory_mapping, here
is the Oops snippet, full logs are attached:

e820: last_pfn = 0x22f000 max_arch_pfn = 0x400000000
e820: last_pfn = 0xcff00 max_arch_pfn = 0x400000000
initial memory mapped: [mem 0x00000000-0x022affff]
Base memory trampoline at [ffff880000096000] 96000 size 24576
init_memory_mapping: [mem 0x00000000-0x000fffff]
 [mem 0x00000000-0x000fffff] page 4k
init_memory_mapping: [mem 0x21fe00000-0x21fe77fff]
 [mem 0x21fe00000-0x21fe77fff] page 4k
init_memory_mapping: [mem 0x21c000000-0x21fdfffff]
 [mem 0x21c000000-0x21fdfffff] page 4k
init_memory_mapping: [mem 0x200000000-0x21bffffff]
 [mem 0x200000000-0x21bffffff] page 4k
init_memory_mapping: [mem 0x00100000-0xcec6dfff]
 [mem 0x00100000-0xcec6dfff] page 4k
init_memory_mapping: [mem 0xcf5f4000-0xcf5f4fff]
 [mem 0xcf5f4000-0xcf5f4fff] page 4k
init_memory_mapping: [mem 0xcf7fb000-0xcfc19fff]
 [mem 0xcf7fb000-0xcfc19fff] page 4k
init_memory_mapping: [mem 0xcfef4000-0xcfefffff]
 [mem 0xcfef4000-0xcfefffff] page 4k
init_memory_mapping: [mem 0x100001000-0x1ffffffff]
 [mem 0x100001000-0x1ffffffff] page 4k
PGD 0 
Oops: 0003 [#1] SMP 
Modules linked in:
CPU 0 
Pid: 0, comm: swapper Not tainted 3.6.0+ #3 AMD Pike/Pike
RIP: e030:[<ffffffff81cd778a>]  [<ffffffff81cd778a>] xen_set_pte_init+0x1/0x9
RSP: e02b:ffffffff81c01ae8  EFLAGS: 00010086
RAX: 80000001913d1063 RBX: ffff88021f63b1c8 RCX: 8000000000000163
RDX: 00000000000001ff RSI: 80000001913d1063 RDI: ffff88021f63b1c8
RBP: ffffffff81c01af8 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: 000000011b039000
R13: 000000000000003a R14: 000000011b03a000 R15: 000000011b039000
FS:  0000000000000000(0000) GS:ffffffff81cbe000(0000) knlGS:0000000000000000
CS:  e033 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000000 CR3: 0000000001c0b000 CR4: 0000000000000660
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 0000000000000000 DR7: 0000000000000000
Process swapper (pid: 0, threadinfo ffffffff81c00000, task ffffffff81c13410)
Stack:
 ffffffff81c01af8 ffffffff810330f5 ffffffff81c01b58 ffffffff816aa9f3
 8000000000000163 ffff88021f63c000 0000000200000000 000000011b039000
 ffffffff81c01b38 0000000000000000 000000011b000000 ffff88021f7146c0
Call Trace:
 [<ffffffff810330f5>] ? set_pte+0xb/0xd
 [<ffffffff816aa9f3>] phys_pte_init+0xd4/0x106
 [<ffffffff816aabe0>] phys_pmd_init+0x1bb/0x215
 [<ffffffff816aadf3>] phys_pud_init+0x1b9/0x218
 [<ffffffff816aaeff>] kernel_physical_mapping_init+0xad/0x14a
 [<ffffffff81682a1a>] init_memory_mapping+0x275/0x303
 [<ffffffff81ce6e62>] init_range_memory_mapping+0x8b/0xc8
 [<ffffffff81ce6f91>] init_mem_mapping+0xf2/0x162
 [<ffffffff81cd9d74>] setup_arch+0x682/0xaac
 [<ffffffff816af4ab>] ? printk+0x48/0x4a
 [<ffffffff81cd3868>] start_kernel+0x8e/0x3d8
 [<ffffffff81cd32d3>] x86_64_start_reservations+0xae/0xb2
 [<ffffffff81cd6dbc>] xen_start_kernel+0x63d/0x63f
Code: 00 00 48 c7 c7 f2 a8 aa 81 e8 ee 61 36 ff c7 05 59 10 06 00 01 00 00 00 5d c3 55 48 89 f7 48 89 e5 e8 95 cf 32 ff 31 c0 5d c3 55 <48> 89 37 48 89 e5 5d c3 55 48 89 e5 41 57 41 56 45 31 f6 41 55 
 RSP <ffffffff81c01ae8>
CR2: 0000000000000000
---[ end trace c2b54da46b5614cf ]---

> 
> In any case we don't care about that because if we assume that
> alloc_low_pages will always return a page from a range that is already
> mapped, then we do not need this pvop anymore. That's because
> xen_alloc_pte_init, xen_alloc_pmd_init, etc, will mark the page RO
> before hooking it into the pagetable automatically.
> Sorry for I misled you last time.
> 
> Let me repeat it again:
> Can we assume that the page returned by alloc_low_pages is already mapped?
> 
> Yes? In that case let's get rid of mark_page_ro and everything should
> work.
> 
> It is worth stating it in clear letters in a comment on top of
> alloc_low_pages:
> 
> "This function always returns a page from a memory range already
> mapped."
> 

[-- Attachment #2: dom0.txt --]
[-- Type: text/plain, Size: 5360 bytes --]

Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 3.6.0+ (jshin@jshin-Pike) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #3 SMP Fri Oct 12 16:22:42 CDT 2012
Command line: placeholder root=/dev/sda1 ro
Freeing 9c-100 pfn range: 100 pages freed
1-1 mapping on 9c->100
Freeing cec6e-cf5f4 pfn range: 2438 pages freed
1-1 mapping on cec6e->cf5f4
Freeing cf5f5-cf7fb pfn range: 518 pages freed
1-1 mapping on cf5f5->cf7fb
Freeing cfc1a-cfef4 pfn range: 730 pages freed
1-1 mapping on cfc1a->cfef4
Freeing cff00-100001 pfn range: 196865 pages freed
1-1 mapping on cff00->100001
Released 200651 pages of unused memory
Set 200651 page(s) to 1-1 mapping
Populating 1eeead-21fe78 pfn range: 200651 pages added
e820: BIOS-provided physical RAM map:
Xen: [mem 0x0000000000000000-0x000000000009bfff] usable
Xen: [mem 0x000000000009cc00-0x00000000000fffff] reserved
Xen: [mem 0x0000000000100000-0x00000000cec6dfff] usable
Xen: [mem 0x00000000cec6e000-0x00000000cedf1fff] reserved
Xen: [mem 0x00000000cedf2000-0x00000000cf149fff] ACPI NVS
Xen: [mem 0x00000000cf14a000-0x00000000cf5f3fff] reserved
Xen: [mem 0x00000000cf5f4000-0x00000000cf5f4fff] usable
Xen: [mem 0x00000000cf5f5000-0x00000000cf7fafff] ACPI NVS
Xen: [mem 0x00000000cf7fb000-0x00000000cfc19fff] usable
Xen: [mem 0x00000000cfc1a000-0x00000000cfef3fff] reserved
Xen: [mem 0x00000000cfef4000-0x00000000cfefffff] usable
Xen: [mem 0x00000000f8000000-0x00000000fbffffff] reserved
Xen: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
Xen: [mem 0x00000000fec10000-0x00000000fec10fff] reserved
Xen: [mem 0x00000000fec20000-0x00000000fec20fff] reserved
Xen: [mem 0x00000000fed00000-0x00000000fed00fff] reserved
Xen: [mem 0x00000000fed61000-0x00000000fed70fff] reserved
Xen: [mem 0x00000000fed80000-0x00000000fed8ffff] reserved
Xen: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
Xen: [mem 0x00000000fef00000-0x00000000ffffffff] reserved
Xen: [mem 0x0000000100001000-0x000000022effffff] usable
NX (Execute Disable) protection: active
DMI 2.7 present.
DMI: AMD Pike/Pike, BIOS WPK2919N_Weekly_12_09_19 09/17/2012
e820: update [mem 0x00000000-0x0000ffff] usable ==> reserved
e820: remove [mem 0x000a0000-0x000fffff] usable
No AGP bridge found
e820: last_pfn = 0x22f000 max_arch_pfn = 0x400000000
e820: last_pfn = 0xcff00 max_arch_pfn = 0x400000000
initial memory mapped: [mem 0x00000000-0x022affff]
Base memory trampoline at [ffff880000096000] 96000 size 24576
init_memory_mapping: [mem 0x00000000-0x000fffff]
 [mem 0x00000000-0x000fffff] page 4k
init_memory_mapping: [mem 0x21fe00000-0x21fe77fff]
 [mem 0x21fe00000-0x21fe77fff] page 4k
init_memory_mapping: [mem 0x21c000000-0x21fdfffff]
 [mem 0x21c000000-0x21fdfffff] page 4k
init_memory_mapping: [mem 0x200000000-0x21bffffff]
 [mem 0x200000000-0x21bffffff] page 4k
init_memory_mapping: [mem 0x00100000-0xcec6dfff]
 [mem 0x00100000-0xcec6dfff] page 4k
init_memory_mapping: [mem 0xcf5f4000-0xcf5f4fff]
 [mem 0xcf5f4000-0xcf5f4fff] page 4k
init_memory_mapping: [mem 0xcf7fb000-0xcfc19fff]
 [mem 0xcf7fb000-0xcfc19fff] page 4k
init_memory_mapping: [mem 0xcfef4000-0xcfefffff]
 [mem 0xcfef4000-0xcfefffff] page 4k
init_memory_mapping: [mem 0x100001000-0x1ffffffff]
 [mem 0x100001000-0x1ffffffff] page 4k
PGD 0 
Oops: 0003 [#1] SMP 
Modules linked in:
CPU 0 
Pid: 0, comm: swapper Not tainted 3.6.0+ #3 AMD Pike/Pike
RIP: e030:[<ffffffff81cd778a>]  [<ffffffff81cd778a>] xen_set_pte_init+0x1/0x9
RSP: e02b:ffffffff81c01ae8  EFLAGS: 00010086
RAX: 80000001913d1063 RBX: ffff88021f63b1c8 RCX: 8000000000000163
RDX: 00000000000001ff RSI: 80000001913d1063 RDI: ffff88021f63b1c8
RBP: ffffffff81c01af8 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000000 R12: 000000011b039000
R13: 000000000000003a R14: 000000011b03a000 R15: 000000011b039000
FS:  0000000000000000(0000) GS:ffffffff81cbe000(0000) knlGS:0000000000000000
CS:  e033 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000000 CR3: 0000000001c0b000 CR4: 0000000000000660
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 0000000000000000 DR7: 0000000000000000
Process swapper (pid: 0, threadinfo ffffffff81c00000, task ffffffff81c13410)
Stack:
 ffffffff81c01af8 ffffffff810330f5 ffffffff81c01b58 ffffffff816aa9f3
 8000000000000163 ffff88021f63c000 0000000200000000 000000011b039000
 ffffffff81c01b38 0000000000000000 000000011b000000 ffff88021f7146c0
Call Trace:
 [<ffffffff810330f5>] ? set_pte+0xb/0xd
 [<ffffffff816aa9f3>] phys_pte_init+0xd4/0x106
 [<ffffffff816aabe0>] phys_pmd_init+0x1bb/0x215
 [<ffffffff816aadf3>] phys_pud_init+0x1b9/0x218
 [<ffffffff816aaeff>] kernel_physical_mapping_init+0xad/0x14a
 [<ffffffff81682a1a>] init_memory_mapping+0x275/0x303
 [<ffffffff81ce6e62>] init_range_memory_mapping+0x8b/0xc8
 [<ffffffff81ce6f91>] init_mem_mapping+0xf2/0x162
 [<ffffffff81cd9d74>] setup_arch+0x682/0xaac
 [<ffffffff816af4ab>] ? printk+0x48/0x4a
 [<ffffffff81cd3868>] start_kernel+0x8e/0x3d8
 [<ffffffff81cd32d3>] x86_64_start_reservations+0xae/0xb2
 [<ffffffff81cd6dbc>] xen_start_kernel+0x63d/0x63f
Code: 00 00 48 c7 c7 f2 a8 aa 81 e8 ee 61 36 ff c7 05 59 10 06 00 01 00 00 00 5d c3 55 48 89 f7 48 89 e5 e8 95 cf 32 ff 31 c0 5d c3 55 <48> 89 37 48 89 e5 5d c3 55 48 89 e5 41 57 41 56 45 31 f6 41 55 
 RSP <ffffffff81c01ae8>
CR2: 0000000000000000
---[ end trace c2b54da46b5614cf ]---

[-- Attachment #3: xen.txt --]
[-- Type: text/plain, Size: 11994 bytes --]

 __  __            _  _    _____                    _        _     _      
 \ \/ /___ _ __   | || |  |___ /    _   _ _ __  ___| |_ __ _| |__ | | ___ 
  \  // _ \ '_ \  | || |_   |_ \ __| | | | '_ \/ __| __/ _` | '_ \| |/ _ \
  /  \  __/ | | | |__   _| ___) |__| |_| | | | \__ \ || (_| | |_) | |  __/
 /_/\_\___|_| |_|    |_|(_)____/    \__,_|_| |_|___/\__\__,_|_.__/|_|\___|
                                                                          
(XEN) Xen version 4.3-unstable (jshin@) (gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3) Thu Oct 18 10:52:04 CDT 2012
(XEN) Latest ChangeSet: Mon Oct 15 16:51:44 2012 +0100 26061:c1c549c4fe9e
(XEN) Bootloader: GRUB 1.99-21ubuntu3.4
(XEN) Command line: placeholder noreboot cpuinfo vpmu
(XEN) Video information:
(XEN)  VGA is text mode 80x25, font 8x16
(XEN)  VBE/DDC methods: V2; EDID transfer time: 1 seconds
(XEN) Disc information:
(XEN)  Found 1 MBR signatures
(XEN)  Found 1 EDD information structures
(XEN) Xen-e820 RAM map:
(XEN)  0000000000000000 - 000000000009cc00 (usable)
(XEN)  000000000009cc00 - 00000000000a0000 (reserved)
(XEN)  00000000000e0000 - 0000000000100000 (reserved)
(XEN)  0000000000100000 - 00000000cec6e000 (usable)
(XEN)  00000000cec6e000 - 00000000cedf2000 (reserved)
(XEN)  00000000cedf2000 - 00000000cf14a000 (ACPI NVS)
(XEN)  00000000cf14a000 - 00000000cf5f4000 (reserved)
(XEN)  00000000cf5f4000 - 00000000cf5f5000 (usable)
(XEN)  00000000cf5f5000 - 00000000cf7fb000 (ACPI NVS)
(XEN)  00000000cf7fb000 - 00000000cfc1a000 (usable)
(XEN)  00000000cfc1a000 - 00000000cfef4000 (reserved)
(XEN)  00000000cfef4000 - 00000000cff00000 (usable)
(XEN)  00000000f8000000 - 00000000fc000000 (reserved)
(XEN)  00000000fec00000 - 00000000fec01000 (reserved)
(XEN)  00000000fec10000 - 00000000fec11000 (reserved)
(XEN)  00000000fec20000 - 00000000fec21000 (reserved)
(XEN)  00000000fed00000 - 00000000fed01000 (reserved)
(XEN)  00000000fed61000 - 00000000fed71000 (reserved)
(XEN)  00000000fed80000 - 00000000fed90000 (reserved)
(XEN)  00000000fef00000 - 0000000100000000 (reserved)
(XEN)  0000000100001000 - 000000022f000000 (usable)
(XEN) ACPI: RSDP 000F0490, 0024 (r2 ALASKA)
(XEN) ACPI: XSDT CF133070, 005C (r1 ALASKA    A M I  1072009 AMI     10013)
(XEN) ACPI: FACP CF13EDF0, 010C (r5 ALASKA    A M I  1072009 AMI     10013)
(XEN) ACPI Warning (tbfadt-0232): FADT (revision 5) is longer than ACPI 2.0 version, truncating length 0x10C to 0xF4 [20070126]
(XEN) ACPI Warning (tbfadt-0444): Optional field "Pm2ControlBlock" has zero address or length: 0000000000000000/1 [20070126]
(XEN) ACPI: DSDT CF133160, BC89 (r2 ALASKA    A M I        0 INTL 20051117)
(XEN) ACPI: FACS CF143080, 0040
(XEN) ACPI: APIC CF13EF00, 009E (r3 ALASKA    A M I  1072009 AMI     10013)
(XEN) ACPI: FPDT CF13EFA0, 0044 (r1 ALASKA    A M I  1072009 AMI     10013)
(XEN) ACPI: MCFG CF13EFE8, 003C (r1 ALASKA    A M I  1072009 MSFT    10013)
(XEN) ACPI: HPET CF13F028, 0038 (r1 ALASKA    A M I  1072009 AMI         5)
(XEN) ACPI: SSDT CF13F060, 167C (r1 AMD    POWERNOW        1 AMD         1)
(XEN) ACPI: IVRS CF1406E0, 00D8 (r1  AMD     RD890S   202031 AMD         0)
(XEN) System RAM: 8160MB (8356052kB)
(XEN) No NUMA configuration found
(XEN) Faking a node at 0000000000000000-000000022f000000
(XEN) Domain heap initialised
(XEN) found SMP MP-table at 000fd820
(XEN) DMI 2.7 present.
(XEN) Using APIC driver default
(XEN) ACPI: PM-Timer IO Port: 0x808
(XEN) ACPI: ACPI SLEEP INFO: pm1x_cnt[804,0], pm1x_evt[800,0]
(XEN) ACPI: 32/64X FACS address mismatch in FADT - cf143080/0000000000000000, using 32
(XEN) ACPI:                  wakeup_vec[cf14308c], vec_size[20]
(XEN) ACPI: Local APIC address 0xfee00000
(XEN) ACPI: LAPIC (acpi_id[0x01] lapic_id[0x10] enabled)
(XEN) Processor #16 5:2 APIC version 16
(XEN) ACPI: LAPIC (acpi_id[0x02] lapic_id[0x11] enabled)
(XEN) Processor #17 5:2 APIC version 16
(XEN) ACPI: LAPIC (acpi_id[0x03] lapic_id[0x12] enabled)
(XEN) Processor #18 5:2 APIC version 16
(XEN) ACPI: LAPIC (acpi_id[0x04] lapic_id[0x13] enabled)
(XEN) Processor #19 5:2 APIC version 16
(XEN) ACPI: LAPIC (acpi_id[0x05] lapic_id[0x14] enabled)
(XEN) Processor #20 5:2 APIC version 16
(XEN) ACPI: LAPIC (acpi_id[0x06] lapic_id[0x15] enabled)
(XEN) Processor #21 5:2 APIC version 16
(XEN) ACPI: LAPIC (acpi_id[0x07] lapic_id[0x16] enabled)
(XEN) Processor #22 5:2 APIC version 16
(XEN) ACPI: LAPIC (acpi_id[0x08] lapic_id[0x17] enabled)
(XEN) Processor #23 5:2 APIC version 16
(XEN) ACPI: LAPIC_NMI (acpi_id[0xff] high edge lint[0x1])
(XEN) ACPI: IOAPIC (id[0x09] address[0xfec00000] gsi_base[0])
(XEN) IOAPIC[0]: apic_id 9, version 33, address 0xfec00000, GSI 0-23
(XEN) ACPI: IOAPIC (id[0x0a] address[0xfec20000] gsi_base[24])
(XEN) IOAPIC[1]: apic_id 10, version 33, address 0xfec20000, GSI 24-55
(XEN) ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
(XEN) ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 low level)
(XEN) ACPI: IRQ0 used by override.
(XEN) ACPI: IRQ2 used by override.
(XEN) ACPI: IRQ9 used by override.
(XEN) Enabling APIC mode:  Flat.  Using 2 I/O APICs
(XEN) ACPI: HPET id: 0x43538210 base: 0xfed00000
(XEN) Table is not found!
(XEN) Using ACPI (MADT) for SMP configuration information
(XEN) SMP: Allowing 8 CPUs (0 hotplug CPUs)
(XEN) IRQ limits: 56 GSI, 1496 MSI/MSI-X
(XEN) Using scheduler: SMP Credit Scheduler (credit)
(XEN) Initializing CPU#0
(XEN) Detected 3492.408 MHz processor.
(XEN) Initing memory sharing.
(XEN) CPU: L1 I cache 64K (64 bytes/line), D cache 16K (64 bytes/line)
(XEN) CPU: L2 Cache: 2048K (64 bytes/line)
(XEN) CPU 0(8) -> Processor 0, Compute Unit 0
(XEN) xstate_init: using cntxt_size: 0x3c0 and states: 0x4000000000000007
(XEN) AMD Fam15h machine check reporting enabled
(XEN) PCI: MCFG configuration 0: base e0000000 segment 0000 buses 00 - ff
(XEN) PCI: Not using MCFG for segment 0000 bus 00-ff
(XEN) AMD-Vi: IOMMU 0 Enabled.
(XEN) AMD-Vi: Enabling global vector map
(XEN) I/O virtualisation enabled
(XEN)  - Dom0 mode: Relaxed
(XEN) CPU0: AMD Eng Sample, 1D358151W8K54_40/35/22_2/8      stepping 00
(XEN) ENABLING IO-APIC IRQs
(XEN)  -> Using new ACK method
(XEN) ..TIMER: vector=0xF0 apic1=0 pin1=2 apic2=-1 pin2=-1
(XEN) Platform timer is 14.318MHz HPET
(XEN) Allocated console ring of 64 KiB.
(XEN) HVM: ASIDs enabled.
(XEN) SVM: Supported advanced features:
(XEN)  - Nested Page Tables (NPT)
(XEN)  - Last Branch Record (LBR) Virtualisation
(XEN)  - Next-RIP Saved on #VMEXIT
(XEN)  - VMCB Clean Bits
(XEN)  - DecodeAssists
(XEN)  - Pause-Intercept Filter
(XEN)  - TSC Rate MSR
(XEN) HVM: SVM enabled
(XEN) HVM: Hardware Assisted Paging (HAP) detected
(XEN) HVM: HAP page sizes: 4kB, 2MB, 1GB
(XEN) Booting processor 1/17 eip 8c000
(XEN) Initializing CPU#1
(XEN) CPU: L1 I cache 64K (64 bytes/line), D cache 16K (64 bytes/line)
(XEN) CPU: L2 Cache: 2048K (64 bytes/line)
(XEN) CPU 1(8) -> Processor 0, Compute Unit 0
(XEN) CPU1: AMD Eng Sample, 1D358151W8K54_40/35/22_2/8      stepping 00
(XEN) microcode: collect_cpu_info: patch_id=0x600081e
(XEN) Booting processor 2/18 eip 8c000
(XEN) Initializing CPU#2
(XEN) CPU: L1 I cache 64K (64 bytes/line), D cache 16K (64 bytes/line)
(XEN) CPU: L2 Cache: 2048K (64 bytes/line)
(XEN) CPU 2(8) -> Processor 0, Compute Unit 1
(XEN) CPU2: AMD Eng Sample, 1D358151W8K54_40/35/22_2/8      stepping 00
(XEN) microcode: collect_cpu_info: patch_id=0x600081e
(XEN) Booting processor 3/19 eip 8c000
(XEN) Initializing CPU#3
(XEN) CPU: L1 I cache 64K (64 bytes/line), D cache 16K (64 bytes/line)
(XEN) CPU: L2 Cache: 2048K (64 bytes/line)
(XEN) CPU 3(8) -> Processor 0, Compute Unit 1
(XEN) CPU3: AMD Eng Sample, 1D358151W8K54_40/35/22_2/8      stepping 00
(XEN) microcode: collect_cpu_info: patch_id=0x600081e
(XEN) Booting processor 4/20 eip 8c000
(XEN) Initializing CPU#4
(XEN) CPU: L1 I cache 64K (64 bytes/line), D cache 16K (64 bytes/line)
(XEN) CPU: L2 Cache: 2048K (64 bytes/line)
(XEN) CPU 4(8) -> Processor 0, Compute Unit 2
(XEN) CPU4: AMD Eng Sample, 1D358151W8K54_40/35/22_2/8      stepping 00
(XEN) microcode: collect_cpu_info: patch_id=0x600081e
(XEN) Booting processor 5/21 eip 8c000
(XEN) Initializing CPU#5
(XEN) CPU: L1 I cache 64K (64 bytes/line), D cache 16K (64 bytes/line)
(XEN) CPU: L2 Cache: 2048K (64 bytes/line)
(XEN) CPU 5(8) -> Processor 0, Compute Unit 2
(XEN) CPU5: AMD Eng Sample, 1D358151W8K54_40/35/22_2/8      stepping 00
(XEN) microcode: collect_cpu_info: patch_id=0x600081e
(XEN) Booting processor 6/22 eip 8c000
(XEN) Initializing CPU#6
(XEN) CPU: L1 I cache 64K (64 bytes/line), D cache 16K (64 bytes/line)
(XEN) CPU: L2 Cache: 2048K (64 bytes/line)
(XEN) CPU 6(8) -> Processor 0, Compute Unit 3
(XEN) CPU6: AMD Eng Sample, 1D358151W8K54_40/35/22_2/8      stepping 00
(XEN) microcode: collect_cpu_info: patch_id=0x600081e
(XEN) Booting processor 7/23 eip 8c000
(XEN) Initializing CPU#7
(XEN) CPU: L1 I cache 64K (64 bytes/line), D cache 16K (64 bytes/line)
(XEN) CPU: L2 Cache: 2048K (64 bytes/line)
(XEN) CPU 7(8) -> Processor 0, Compute Unit 3
(XEN) CPU7: AMD Eng Sample, 1D358151W8K54_40/35/22_2/8      stepping 00
(XEN) Brought up 8 CPUs
(XEN) microcode: collect_cpu_info: patch_id=0x600081e
(XEN) ACPI sleep modes: S3
(XEN) MCA: Use hw thresholding to adjust polling frequency
(XEN) mcheck_poll: Machine check polling timer started.
(XEN) *** LOADING DOMAIN 0 ***
(XEN) elf_parse_binary: phdr: paddr=0x1000000 memsz=0xb9d000
(XEN) elf_parse_binary: phdr: paddr=0x1c00000 memsz=0xbd0e8
(XEN) elf_parse_binary: phdr: paddr=0x1cbe000 memsz=0x14100
(XEN) elf_parse_binary: phdr: paddr=0x1cd3000 memsz=0x5dd000
(XEN) elf_parse_binary: memory: 0x1000000 -> 0x22b0000
(XEN) elf_xen_parse_note: GUEST_OS = "linux"
(XEN) elf_xen_parse_note: GUEST_VERSION = "2.6"
(XEN) elf_xen_parse_note: XEN_VERSION = "xen-3.0"
(XEN) elf_xen_parse_note: VIRT_BASE = 0xffffffff80000000
(XEN) elf_xen_parse_note: ENTRY = 0xffffffff81cd3210
(XEN) elf_xen_parse_note: HYPERCALL_PAGE = 0xffffffff81001000
(XEN) elf_xen_parse_note: FEATURES = "!writable_page_tables|pae_pgdir_above_4gb"
(XEN) elf_xen_parse_note: PAE_MODE = "yes"
(XEN) elf_xen_parse_note: LOADER = "generic"
(XEN) elf_xen_parse_note: unknown xen elf note (0xd)
(XEN) elf_xen_parse_note: SUSPEND_CANCEL = 0x1
(XEN) elf_xen_parse_note: HV_START_LOW = 0xffff800000000000
(XEN) elf_xen_parse_note: PADDR_OFFSET = 0x0
(XEN) elf_xen_addr_calc_check: addresses:
(XEN)     virt_base        = 0xffffffff80000000
(XEN)     elf_paddr_offset = 0x0
(XEN)     virt_offset      = 0xffffffff80000000
(XEN)     virt_kstart      = 0xffffffff81000000
(XEN)     virt_kend        = 0xffffffff822b0000
(XEN)     virt_entry       = 0xffffffff81cd3210
(XEN)     p2m_base         = 0xffffffffffffffff
(XEN)  Xen  kernel: 64-bit, lsb, compat32
(XEN)  Dom0 kernel: 64-bit, PAE, lsb, paddr 0x1000000 -> 0x22b0000
(XEN) PHYSICAL MEMORY ARRANGEMENT:
(XEN)  Dom0 alloc.:   0000000220000000->0000000224000000 (2010797 pages to be allocated)
(XEN) VIRTUAL MEMORY ARRANGEMENT:
(XEN)  Loaded kernel: ffffffff81000000->ffffffff822b0000
(XEN)  Init. ramdisk: ffffffff822b0000->ffffffff822b0000
(XEN)  Phys-Mach map: ffffffff822b0000->ffffffff83227568
(XEN)  Start info:    ffffffff83228000->ffffffff832284b4
(XEN)  Page tables:   ffffffff83229000->ffffffff83246000
(XEN)  Boot stack:    ffffffff83246000->ffffffff83247000
(XEN)  TOTAL:         ffffffff80000000->ffffffff83400000
(XEN)  ENTRY ADDRESS: ffffffff81cd3210
(XEN) Dom0 has maximum 8 VCPUs
(XEN) elf_load_binary: phdr 0 at 0xffffffff81000000 -> 0xffffffff81b9d000
(XEN) elf_load_binary: phdr 1 at 0xffffffff81c00000 -> 0xffffffff81cbd0e8
(XEN) elf_load_binary: phdr 2 at 0xffffffff81cbe000 -> 0xffffffff81cd2100
(XEN) elf_load_binary: phdr 3 at 0xffffffff81cd3000 -> 0xffffffff81d71000
(XEN) Scrubbing Free RAM: .done.
(XEN) Initial low memory virq threshold set at 0x4000 pages.
(XEN) Std. Loglevel: All
(XEN) Guest Loglevel: All
(XEN) Xen is relinquishing VGA console.
(XEN) *** Serial input -> DOM0 (type 'CTRL-a' three times to switch input to Xen)
(XEN) Freed 244kB init memory.
(XEN) Domain 0 crashed: 'noreboot' set - not rebooting.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-18 16:26       ` Jacob Shin
@ 2012-10-18 16:57         ` Stefano Stabellini
  2012-10-18 20:36           ` Yinghai Lu
  2012-10-18 20:40         ` Yinghai Lu
  1 sibling, 1 reply; 115+ messages in thread
From: Stefano Stabellini @ 2012-10-18 16:57 UTC (permalink / raw)
  To: Jacob Shin
  Cc: Stefano Stabellini, Yinghai Lu, Thomas Gleixner, Ingo Molnar,
	H. Peter Anvin, Tejun Heo, linux-kernel

Jacob,
thanks for testing!

Yinghai, it might be useful for you to try your patch series on Xen.
It is pretty simple, considering that you only need the hypervisor.
Just follow these steps:

- clone the xen-unstable git mirror
git clone git://xenbits.xen.org/xen.git

- compile and install xen
make xen
cp xen/xen.gz /boot

- add an entry to grub2.cfg
see the following example, note the multiboot line and the placeholder
argument after vmlinuz:

menuentry 'GNU/Linux, with Linux 2.6.32.40-pv' --class gnu-linux --class gnu --class os {
        recordfail
        insmod part_msdos
        insmod ext2
        search --no-floppy --fs-uuid --set=root 016e7c8a-4bdd-4873-92dd-d71171a49d6d
        set root='(/dev/sda,msdos2)'
        search --no-floppy --fs-uuid --set=root 016e7c8a-4bdd-4873-92dd-d71171a49d6d
        multiboot /boot/xen-4.2-unstable.gz
        module /boot/vmlinuz-2.6.32.40-pv placeholder root=UUID=016e7c8a-4bdd-4873-92dd-d71171a49d6d dom0_mem=1024 console=tty  quiet splash vt.handoff=7
        module /boot/initrd.img-2.6.32.40-pv
}

- reboot and enjoy!



On Thu, 18 Oct 2012, Jacob Shin wrote:
> On Thu, Oct 18, 2012 at 05:17:28PM +0100, Stefano Stabellini wrote:
> > On Thu, 11 Oct 2012, Yinghai Lu wrote:
> > > On Wed, Oct 10, 2012 at 9:40 AM, Stefano Stabellini
> > > <stefano.stabellini@eu.citrix.com> wrote:
> > > >
> > > > So you are missing the Xen patches entirely in this iteration of the
> > > > series?
> > > 
> > > please check updated for-x86-mm branch.
> > > 
> > > [PATCH -v4 00/15] x86: Use BRK to pre mapping page table to make xen happy
> > > 
> > > on top of current linus/master and tip/x86/mm2, but please zap last
> > > patch in that branch.
> > > 
> > > 1. use brk to mapping first PMD_SIZE range.
> > > 2. top down to initialize page table range by range.
> > > 3. get rid of calculate page table, and find_early_page_table.
> > > 4. remove early_ioremap in page table accessing.
> > > 
> > > v2: changes, update xen interface about pagetable_reserve, so not
> > >    use pgt_buf_* in xen code directly.
> > > v3: use range top-down to initialize page table, so will not use
> > >    calculating/find early table anymore.
> > >    also reorder the patches sequence.
> > > v4: add mapping_mark_page_ro to fix xen, also move pgt_buf_* to init.c
> > >     and merge alloc_low_page()
> > > 
> > > could be found at:
> > >         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
> > > for-x86-mm
> > 
> > I find that patch series are easier to review than having to checkout
> > your code and read the commit messages. Please post your patch series to
> > the LKML next time.
> > 
> > In any case, regarding "x86, xen: Add xen_mapping_mark_page_ro": please
> > take Peter's feedback into account; mark_page_ro is not a good name for
> > a pvops.
> > Also I don't believe that this call is actually needed, see below.
> > 
> > Regarding "x86, mm: setup page table in top-down": if you mark the
> > pagetable page RO in alloc_low_page, won't the entire thing crash as
> > soon as you try to write to it? You are supposed to mark it RO after
> > filling up the pagetable page and before hooking it into the live
> > pagetable.
> > However contrary to my expectations, I did a quick test and it seems to
> > be working, that is probably due to a bug: maybe __pa or lookup_address
> > don't work correctly when called so early?
> 
> Hi Yinghai, I just tried it and dom0 died during init_memory_mapping, here
> is the Oops snippet, full logs are attached:
> 
> e820: last_pfn = 0x22f000 max_arch_pfn = 0x400000000
> e820: last_pfn = 0xcff00 max_arch_pfn = 0x400000000
> initial memory mapped: [mem 0x00000000-0x022affff]
> Base memory trampoline at [ffff880000096000] 96000 size 24576
> init_memory_mapping: [mem 0x00000000-0x000fffff]
>  [mem 0x00000000-0x000fffff] page 4k
> init_memory_mapping: [mem 0x21fe00000-0x21fe77fff]
>  [mem 0x21fe00000-0x21fe77fff] page 4k
> init_memory_mapping: [mem 0x21c000000-0x21fdfffff]
>  [mem 0x21c000000-0x21fdfffff] page 4k
> init_memory_mapping: [mem 0x200000000-0x21bffffff]
>  [mem 0x200000000-0x21bffffff] page 4k
> init_memory_mapping: [mem 0x00100000-0xcec6dfff]
>  [mem 0x00100000-0xcec6dfff] page 4k
> init_memory_mapping: [mem 0xcf5f4000-0xcf5f4fff]
>  [mem 0xcf5f4000-0xcf5f4fff] page 4k
> init_memory_mapping: [mem 0xcf7fb000-0xcfc19fff]
>  [mem 0xcf7fb000-0xcfc19fff] page 4k
> init_memory_mapping: [mem 0xcfef4000-0xcfefffff]
>  [mem 0xcfef4000-0xcfefffff] page 4k
> init_memory_mapping: [mem 0x100001000-0x1ffffffff]
>  [mem 0x100001000-0x1ffffffff] page 4k
> PGD 0 
> Oops: 0003 [#1] SMP 
> Modules linked in:
> CPU 0 
> Pid: 0, comm: swapper Not tainted 3.6.0+ #3 AMD Pike/Pike
> RIP: e030:[<ffffffff81cd778a>]  [<ffffffff81cd778a>] xen_set_pte_init+0x1/0x9
> RSP: e02b:ffffffff81c01ae8  EFLAGS: 00010086
> RAX: 80000001913d1063 RBX: ffff88021f63b1c8 RCX: 8000000000000163
> RDX: 00000000000001ff RSI: 80000001913d1063 RDI: ffff88021f63b1c8
> RBP: ffffffff81c01af8 R08: 0000000000000000 R09: 0000000000000000
> R10: 0000000000000000 R11: 0000000000000000 R12: 000000011b039000
> R13: 000000000000003a R14: 000000011b03a000 R15: 000000011b039000
> FS:  0000000000000000(0000) GS:ffffffff81cbe000(0000) knlGS:0000000000000000
> CS:  e033 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 0000000000000000 CR3: 0000000001c0b000 CR4: 0000000000000660
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 0000000000000000 DR7: 0000000000000000
> Process swapper (pid: 0, threadinfo ffffffff81c00000, task ffffffff81c13410)
> Stack:
>  ffffffff81c01af8 ffffffff810330f5 ffffffff81c01b58 ffffffff816aa9f3
>  8000000000000163 ffff88021f63c000 0000000200000000 000000011b039000
>  ffffffff81c01b38 0000000000000000 000000011b000000 ffff88021f7146c0
> Call Trace:
>  [<ffffffff810330f5>] ? set_pte+0xb/0xd
>  [<ffffffff816aa9f3>] phys_pte_init+0xd4/0x106
>  [<ffffffff816aabe0>] phys_pmd_init+0x1bb/0x215
>  [<ffffffff816aadf3>] phys_pud_init+0x1b9/0x218
>  [<ffffffff816aaeff>] kernel_physical_mapping_init+0xad/0x14a
>  [<ffffffff81682a1a>] init_memory_mapping+0x275/0x303
>  [<ffffffff81ce6e62>] init_range_memory_mapping+0x8b/0xc8
>  [<ffffffff81ce6f91>] init_mem_mapping+0xf2/0x162
>  [<ffffffff81cd9d74>] setup_arch+0x682/0xaac
>  [<ffffffff816af4ab>] ? printk+0x48/0x4a
>  [<ffffffff81cd3868>] start_kernel+0x8e/0x3d8
>  [<ffffffff81cd32d3>] x86_64_start_reservations+0xae/0xb2
>  [<ffffffff81cd6dbc>] xen_start_kernel+0x63d/0x63f
> Code: 00 00 48 c7 c7 f2 a8 aa 81 e8 ee 61 36 ff c7 05 59 10 06 00 01 00 00 00 5d c3 55 48 89 f7 48 89 e5 e8 95 cf 32 ff 31 c0 5d c3 55 <48> 89 37 48 89 e5 5d c3 55 48 89 e5 41 57 41 56 45 31 f6 41 55 
>  RSP <ffffffff81c01ae8>
> CR2: 0000000000000000
> ---[ end trace c2b54da46b5614cf ]---


^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-18 16:57         ` Stefano Stabellini
@ 2012-10-18 20:36           ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-18 20:36 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Jacob Shin, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Tejun Heo, linux-kernel

On Thu, Oct 18, 2012 at 9:57 AM, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
> Jacob,
> thanks for testing!
>
> Yinghai, it might be useful for you to try your patch series on Xen.
> It is pretty simple, considering that you only need the hypervisor.
> Just follow these steps:
>
> - clone the xen-unstable git mirror
> git clone git://xenbits.xen.org/xen.git
>
> - compile and install xen
> make xen
> cp xen/xen.gz /boot

yes, i tried dom0 with xen 32bit and 64bit, all can boot well.

but did not test with domU.

Thanks

Yinghai

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-18 16:26       ` Jacob Shin
  2012-10-18 16:57         ` Stefano Stabellini
@ 2012-10-18 20:40         ` Yinghai Lu
  2012-10-18 21:57           ` Jacob Shin
  1 sibling, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-10-18 20:40 UTC (permalink / raw)
  To: Jacob Shin
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Tejun Heo, linux-kernel

On Thu, Oct 18, 2012 at 9:26 AM, Jacob Shin <jacob.shin@amd.com> wrote:
>
> Hi Yinghai, I just tried it and dom0 died during init_memory_mapping, here
> is the Oops snippet, full logs are attached:
>
> e820: last_pfn = 0x22f000 max_arch_pfn = 0x400000000
> e820: last_pfn = 0xcff00 max_arch_pfn = 0x400000000
> initial memory mapped: [mem 0x00000000-0x022affff]
> Base memory trampoline at [ffff880000096000] 96000 size 24576
> init_memory_mapping: [mem 0x00000000-0x000fffff]
>  [mem 0x00000000-0x000fffff] page 4k
> init_memory_mapping: [mem 0x21fe00000-0x21fe77fff]
>  [mem 0x21fe00000-0x21fe77fff] page 4k
> init_memory_mapping: [mem 0x21c000000-0x21fdfffff]
>  [mem 0x21c000000-0x21fdfffff] page 4k
> init_memory_mapping: [mem 0x200000000-0x21bffffff]
>  [mem 0x200000000-0x21bffffff] page 4k
> init_memory_mapping: [mem 0x00100000-0xcec6dfff]
>  [mem 0x00100000-0xcec6dfff] page 4k
> init_memory_mapping: [mem 0xcf5f4000-0xcf5f4fff]
>  [mem 0xcf5f4000-0xcf5f4fff] page 4k
> init_memory_mapping: [mem 0xcf7fb000-0xcfc19fff]
>  [mem 0xcf7fb000-0xcfc19fff] page 4k
> init_memory_mapping: [mem 0xcfef4000-0xcfefffff]
>  [mem 0xcfef4000-0xcfefffff] page 4k
> init_memory_mapping: [mem 0x100001000-0x1ffffffff]
>  [mem 0x100001000-0x1ffffffff] page 4k
> PGD 0
> Oops: 0003 [#1] SMP
> Modules linked in:
> CPU 0
> Pid: 0, comm: swapper Not tainted 3.6.0+ #3 AMD Pike/Pike
> RIP: e030:[<ffffffff81cd778a>]  [<ffffffff81cd778a>] xen_set_pte_init+0x1/0x9
> RSP: e02b:ffffffff81c01ae8  EFLAGS: 00010086
> RAX: 80000001913d1063 RBX: ffff88021f63b1c8 RCX: 8000000000000163
> RDX: 00000000000001ff RSI: 80000001913d1063 RDI: ffff88021f63b1c8
> RBP: ffffffff81c01af8 R08: 0000000000000000 R09: 0000000000000000
> R10: 0000000000000000 R11: 0000000000000000 R12: 000000011b039000
> R13: 000000000000003a R14: 000000011b03a000 R15: 000000011b039000
> FS:  0000000000000000(0000) GS:ffffffff81cbe000(0000) knlGS:0000000000000000
> CS:  e033 DS: 0000 ES: 0000 CR0: 0000000080050033
> CR2: 0000000000000000 CR3: 0000000001c0b000 CR4: 0000000000000660
> DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> DR3: 0000000000000000 DR6: 0000000000000000 DR7: 0000000000000000
> Process swapper (pid: 0, threadinfo ffffffff81c00000, task ffffffff81c13410)
> Stack:
>  ffffffff81c01af8 ffffffff810330f5 ffffffff81c01b58 ffffffff816aa9f3
>  8000000000000163 ffff88021f63c000 0000000200000000 000000011b039000
>  ffffffff81c01b38 0000000000000000 000000011b000000 ffff88021f7146c0
> Call Trace:
>  [<ffffffff810330f5>] ? set_pte+0xb/0xd
>  [<ffffffff816aa9f3>] phys_pte_init+0xd4/0x106
>  [<ffffffff816aabe0>] phys_pmd_init+0x1bb/0x215
>  [<ffffffff816aadf3>] phys_pud_init+0x1b9/0x218
>  [<ffffffff816aaeff>] kernel_physical_mapping_init+0xad/0x14a
>  [<ffffffff81682a1a>] init_memory_mapping+0x275/0x303
>  [<ffffffff81ce6e62>] init_range_memory_mapping+0x8b/0xc8
>  [<ffffffff81ce6f91>] init_mem_mapping+0xf2/0x162
>  [<ffffffff81cd9d74>] setup_arch+0x682/0xaac
>  [<ffffffff816af4ab>] ? printk+0x48/0x4a
>  [<ffffffff81cd3868>] start_kernel+0x8e/0x3d8
>  [<ffffffff81cd32d3>] x86_64_start_reservations+0xae/0xb2
>  [<ffffffff81cd6dbc>] xen_start_kernel+0x63d/0x63f
> Code: 00 00 48 c7 c7 f2 a8 aa 81 e8 ee 61 36 ff c7 05 59 10 06 00 01 00 00 00 5d c3 55 48 89 f7 48 89 e5 e8 95 cf 32 ff 31 c0 5d c3 55 <48> 89 37 48 89 e5 5d c3 55 48 89 e5 41 57 41 56 45 31 f6 41 55
>  RSP <ffffffff81c01ae8>
> CR2: 0000000000000000
> ---[ end trace c2b54da46b5614cf ]---

i tested dom0 conf on 32 bit  and 64 bit, they are all working.

and just now I tried with mem=8944m, and they are still working.

anyway, can you please updated -v5 for-x86-mm branch ?
I removed mark_page_ro workaround according to stefano

Thanks

Yinghai

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-18 16:17     ` Stefano Stabellini
  2012-10-18 16:26       ` Jacob Shin
@ 2012-10-18 20:43       ` Yinghai Lu
  1 sibling, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-10-18 20:43 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Tejun Heo, linux-kernel

On Thu, Oct 18, 2012 at 9:17 AM, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
>
> I find that patch series are easier to review than having to checkout
> your code and read the commit messages. Please post your patch series to
> the LKML next time.

ok, will post -v5 to the list.

>
> In any case, regarding "x86, xen: Add xen_mapping_mark_page_ro": please
> take Peter's feedback into account; mark_page_ro is not a good name for
> a pvops.
> Also I don't believe that this call is actually needed, see below.
>
> Regarding "x86, mm: setup page table in top-down": if you mark the
> pagetable page RO in alloc_low_page, won't the entire thing crash as
> soon as you try to write to it? You are supposed to mark it RO after
> filling up the pagetable page and before hooking it into the live
> pagetable.
> However contrary to my expectations, I did a quick test and it seems to
> be working, that is probably due to a bug: maybe __pa or lookup_address
> don't work correctly when called so early?
>
> In any case we don't care about that because if we assume that
> alloc_low_pages will always return a page from a range that is already
> mapped, then we do not need this pvop anymore. That's because
> xen_alloc_pte_init, xen_alloc_pmd_init, etc, will mark the page RO
> before hooking it into the pagetable automatically.
> Sorry for I misled you last time.

yeah, I was confused how xen could RO page for page table.

>
> Let me repeat it again:
> Can we assume that the page returned by alloc_low_pages is already mapped?
>
> Yes? In that case let's get rid of mark_page_ro and everything should
> work.

yes, removed.

>
> It is worth stating it in clear letters in a comment on top of
> alloc_low_pages:
>
> "This function always returns a page from a memory range already
> mapped."

actually alloc_...  should be always return mapped.

Thanks

Yinghai

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-18 20:40         ` Yinghai Lu
@ 2012-10-18 21:57           ` Jacob Shin
  0 siblings, 0 replies; 115+ messages in thread
From: Jacob Shin @ 2012-10-18 21:57 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Tejun Heo, linux-kernel

On Thu, Oct 18, 2012 at 01:40:21PM -0700, Yinghai Lu wrote:
> On Thu, Oct 18, 2012 at 9:26 AM, Jacob Shin <jacob.shin@amd.com> wrote:
> 
> i tested dom0 conf on 32 bit  and 64 bit, they are all working.
> 
> and just now I tried with mem=8944m, and they are still working.
> 
> anyway, can you please updated -v5 for-x86-mm branch ?
> I removed mark_page_ro workaround according to stefano

Just tested -v5 with Xen, and Dom0 no longer dies. Also tried it on HVM DomU
and also boots fine.

Also tested on our 1TB machine, and it looks good, only E820_RAM are mapped:

[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x00000000000983ff] usable
[    0.000000] BIOS-e820: [mem 0x0000000000098400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000d2000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000c7ebffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000c7ec0000-0x00000000c7ed7fff] ACPI data
[    0.000000] BIOS-e820: [mem 0x00000000c7ed8000-0x00000000c7ed9fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x00000000c7eda000-0x00000000c7ffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fff00000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000e037ffffff] usable
[    0.000000] BIOS-e820: [mem 0x000000e038000000-0x000000ffffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000010000000000-0x0000011ffeffffff] usable

...

[    0.000000] e820: last_pfn = 0xc7ec0 max_arch_pfn = 0x400000000
[    0.000000] initial memory mapped: [mem 0x00000000-0x1fffffff]
[    0.000000] Base memory trampoline at [ffff880000092000] 92000 size 24576
[    0.000000] Using GB pages for direct mapping
[    0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
[    0.000000]  [mem 0x00000000-0x000fffff] page 4k
[    0.000000] init_memory_mapping: [mem 0x11ffee00000-0x11ffeffffff]
[    0.000000]  [mem 0x11ffee00000-0x11ffeffffff] page 2M
[    0.000000] init_memory_mapping: [mem 0x11ffc000000-0x11ffedfffff]
[    0.000000]  [mem 0x11ffc000000-0x11ffedfffff] page 2M
[    0.000000] init_memory_mapping: [mem 0x11f80000000-0x11ffbffffff]
[    0.000000]  [mem 0x11f80000000-0x11fbfffffff] page 1G
[    0.000000]  [mem 0x11fc0000000-0x11ffbffffff] page 2M
[    0.000000] init_memory_mapping: [mem 0x11000000000-0x11f7fffffff]
[    0.000000]  [mem 0x11000000000-0x11f7fffffff] page 1G
[    0.000000] init_memory_mapping: [mem 0x00100000-0xc7ebffff]
[    0.000000]  [mem 0x00100000-0x001fffff] page 4k
[    0.000000]  [mem 0x00200000-0x3fffffff] page 2M
[    0.000000]  [mem 0x40000000-0xbfffffff] page 1G
[    0.000000]  [mem 0xc0000000-0xc7dfffff] page 2M
[    0.000000]  [mem 0xc7e00000-0xc7ebffff] page 4k
[    0.000000] init_memory_mapping: [mem 0x100000000-0xe037ffffff]
[    0.000000]  [mem 0x100000000-0xdfffffffff] page 1G
[    0.000000]  [mem 0xe000000000-0xe037ffffff] page 2M
[    0.000000] init_memory_mapping: [mem 0x10000000000-0x10fffffffff]
[    0.000000]  [mem 0x10000000000-0x10fffffffff] page 1G

Thanks!!

> 
> Thanks
> 
> Yinghai
> 


^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-11  6:13   ` Yinghai Lu
  2012-10-11 23:04     ` Yinghai Lu
  2012-10-18 16:17     ` Stefano Stabellini
@ 2012-10-30 13:44     ` Konrad Rzeszutek Wilk
  2012-10-30 14:47       ` Yinghai Lu
  2 siblings, 1 reply; 115+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-10-30 13:44 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Jacob Shin, Tejun Heo, linux-kernel

On Wed, Oct 10, 2012 at 11:13:45PM -0700, Yinghai Lu wrote:
> On Wed, Oct 10, 2012 at 9:40 AM, Stefano Stabellini
> <stefano.stabellini@eu.citrix.com> wrote:
> >
> > So you are missing the Xen patches entirely in this iteration of the
> > series?
> 
> please check updated for-x86-mm branch.
> 
> [PATCH -v4 00/15] x86: Use BRK to pre mapping page table to make xen happy
> 
> on top of current linus/master and tip/x86/mm2, but please zap last
> patch in that branch.

fyi, the way to do that is to revert it the offending patch.

So which branch should I try out? Do you have one with all of the
required patches so I can just do a 3.7-rc3 'git pull' and try it out?

> 
> 1. use brk to mapping first PMD_SIZE range.
> 2. top down to initialize page table range by range.
> 3. get rid of calculate page table, and find_early_page_table.
> 4. remove early_ioremap in page table accessing.
> 
> v2: changes, update xen interface about pagetable_reserve, so not
>    use pgt_buf_* in xen code directly.
> v3: use range top-down to initialize page table, so will not use
>    calculating/find early table anymore.
>    also reorder the patches sequence.
> v4: add mapping_mark_page_ro to fix xen, also move pgt_buf_* to init.c
>     and merge alloc_low_page()
> 
> could be found at:
>         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
> for-x86-mm
> 
> Yinghai Lu (15):
>   x86, mm: Align start address to correct big page size
>   x86, mm: Use big page size for small memory range
>   x86, mm: Don't clear page table if next range is ram
>   x86, mm: only keep initial mapping for ram
>   x86, mm: Break down init_all_memory_mapping
>   x86, xen: Add xen_mapping_mark_page_ro
>   x86, mm: setup page table in top-down
>   x86, mm: Remove early_memremap workaround for page table accessing on 64bit
>   x86, mm: Remove parameter in alloc_low_page for 64bit
>   x86, mm: Merge alloc_low_page between 64bit and 32bit
>   x86, mm: Move min_pfn_mapped back to mm/init.c
>   x86, mm, xen: Remove mapping_pagatable_reserve
>   x86, mm: Add alloc_low_pages(num)
>   x86, mm: only call early_ioremap_page_range_init() one time on 32bit
>   x86, mm: Move back pgt_buf_* to mm/init.c
> 
>  arch/x86/include/asm/init.h          |    4 -
>  arch/x86/include/asm/pgtable.h       |    1 +
>  arch/x86/include/asm/pgtable_types.h |    1 -
>  arch/x86/include/asm/x86_init.h      |    2 +-
>  arch/x86/kernel/setup.c              |    2 +
>  arch/x86/kernel/x86_init.c           |    3 +-
>  arch/x86/mm/init.c                   |  321 +++++++++++++++-------------------
>  arch/x86/mm/init_32.c                |   76 ++++++--
>  arch/x86/mm/init_64.c                |  119 ++++---------
>  arch/x86/mm/mm_internal.h            |   11 ++
>  arch/x86/xen/mmu.c                   |   29 +---
>  11 files changed, 249 insertions(+), 320 deletions(-)
>  create mode 100644 arch/x86/mm/mm_internal.h
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-30 13:44     ` Konrad Rzeszutek Wilk
@ 2012-10-30 14:47       ` Yinghai Lu
  2012-11-03 21:35         ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-10-30 14:47 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Jacob Shin, Tejun Heo, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 596 bytes --]

On Tue, Oct 30, 2012 at 6:44 AM, Konrad Rzeszutek Wilk
<konrad@kernel.org> wrote:
> On Wed, Oct 10, 2012 at 11:13:45PM -0700, Yinghai Lu wrote:
> So which branch should I try out? Do you have one with all of the
> required patches so I can just do a 3.7-rc3 'git pull' and try it out?

add for-x86-mm-test branch, and it is based on 3.7-rc3, and merged
with for-x86-mm branch.

so you can try
	git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
for-x86-mm-test

there is conflicts between for-x86-mm and 3.7-rc3, and attached patch
could be used to fix them

Thanks

Yinghai

[-- Attachment #2: merge.patch --]
[-- Type: application/octet-stream, Size: 5512 bytes --]

---
 arch/x86/kernel/setup.c     |   29 ---------------------
 arch/x86/mm/init.c          |   59 --------------------------------------------
 arch/x86/platform/efi/efi.c |   15 +----------
 3 files changed, 2 insertions(+), 101 deletions(-)

Index: linux-yinghai/arch/x86/kernel/setup.c
===================================================================
--- linux-yinghai.orig/arch/x86/kernel/setup.c
+++ linux-yinghai/arch/x86/kernel/setup.c
@@ -921,35 +921,6 @@ void __init setup_arch(char **cmdline_p)
 
 	init_mem_mapping();
 
-<<<<<<< HEAD
-	/* max_pfn_mapped is updated here */
-	max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
-	max_pfn_mapped = max_low_pfn_mapped;
-
-#ifdef CONFIG_X86_64
-	if (max_pfn > max_low_pfn) {
-		int i;
-		unsigned long start, end;
-		unsigned long start_pfn, end_pfn;
-
-		for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn,
-							 NULL) {
-
-			end = PFN_PHYS(end_pfn);
-			if (end <= (1UL<<32))
-				continue;
-
-			start = PFN_PHYS(start_pfn);
-			max_pfn_mapped = init_memory_mapping(
-						max((1UL<<32), start), end);
-		}
-
-		/* can we preseve max_low_pfn ?*/
-		max_low_pfn = max_pfn;
-	}
-#endif
-=======
->>>>>>> for-x86-mm
 	memblock.current_limit = get_max_mapped();
 	dma_contiguous_reserve(0);
 
Index: linux-yinghai/arch/x86/mm/init.c
===================================================================
--- linux-yinghai.orig/arch/x86/mm/init.c
+++ linux-yinghai/arch/x86/mm/init.c
@@ -26,46 +26,6 @@ static unsigned long __initdata pgt_buf_
 static unsigned long min_pfn_mapped;
 
 /*
-<<<<<<< HEAD
- * First calculate space needed for kernel direct mapping page tables to cover
- * mr[0].start to mr[nr_range - 1].end, while accounting for possible 2M and 1GB
- * pages. Then find enough contiguous space for those page tables.
- */
-static void __init find_early_table_space(struct map_range *mr, int nr_range)
-{
-	int i;
-	unsigned long puds = 0, pmds = 0, ptes = 0, tables;
-	unsigned long start = 0, good_end;
-	phys_addr_t base;
-
-	for (i = 0; i < nr_range; i++) {
-		unsigned long range, extra;
-
-		range = mr[i].end - mr[i].start;
-		puds += (range + PUD_SIZE - 1) >> PUD_SHIFT;
-
-		if (mr[i].page_size_mask & (1 << PG_LEVEL_1G)) {
-			extra = range - ((range >> PUD_SHIFT) << PUD_SHIFT);
-			pmds += (extra + PMD_SIZE - 1) >> PMD_SHIFT;
-		} else {
-			pmds += (range + PMD_SIZE - 1) >> PMD_SHIFT;
-		}
-
-		if (mr[i].page_size_mask & (1 << PG_LEVEL_2M)) {
-			extra = range - ((range >> PMD_SHIFT) << PMD_SHIFT);
-#ifdef CONFIG_X86_32
-			extra += PMD_SIZE;
-#endif
-			ptes += (extra + PAGE_SIZE - 1) >> PAGE_SHIFT;
-		} else {
-			ptes += (range + PAGE_SIZE - 1) >> PAGE_SHIFT;
-		}
-	}
-
-	tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
-	tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE);
-	tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE);
-=======
  * Pages returned are already directly mapped.
  *
  * Changing that is likely to break Xen, see commit
@@ -110,7 +70,6 @@ __ref void *alloc_low_pages(unsigned int
 
 	return __va(pfn << PAGE_SHIFT);
 }
->>>>>>> for-x86-mm
 
 /* need 4 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */
 #define INIT_PGT_BUF_SIZE	(5 * PAGE_SIZE)
@@ -135,11 +94,6 @@ int direct_gbpages
 #endif
 ;
 
-<<<<<<< HEAD
-	printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx]\n",
-		mr[nr_range - 1].end - 1, pgt_buf_start << PAGE_SHIFT,
-		(pgt_buf_top << PAGE_SHIFT) - 1);
-=======
 static void __init init_gbpages(void)
 {
 #ifdef CONFIG_X86_64
@@ -148,7 +102,6 @@ static void __init init_gbpages(void)
 	else
 		direct_gbpages = 0;
 #endif
->>>>>>> for-x86-mm
 }
 
 struct map_range {
@@ -340,17 +293,6 @@ static int __meminit split_mem_range(str
 			(mr[i].page_size_mask & (1<<PG_LEVEL_1G))?"1G":(
 			 (mr[i].page_size_mask & (1<<PG_LEVEL_2M))?"2M":"4k"));
 
-<<<<<<< HEAD
-	/*
-	 * Find space for the kernel direct mapping tables.
-	 *
-	 * Later we should allocate these tables in the local node of the
-	 * memory mapped. Unfortunately this is done currently before the
-	 * nodes are discovered.
-	 */
-	if (!after_bootmem)
-		find_early_table_space(mr, nr_range);
-=======
 	return nr_range;
 }
 
@@ -399,7 +341,6 @@ unsigned long __init_refok init_memory_m
 	memset(mr, 0, sizeof(mr));
 	nr_range = 0;
 	nr_range = split_mem_range(mr, nr_range, start, end);
->>>>>>> for-x86-mm
 
 	for (i = 0; i < nr_range; i++)
 		ret = kernel_physical_mapping_init(mr[i].start, mr[i].end,
Index: linux-yinghai/arch/x86/platform/efi/efi.c
===================================================================
--- linux-yinghai.orig/arch/x86/platform/efi/efi.c
+++ linux-yinghai/arch/x86/platform/efi/efi.c
@@ -835,11 +835,7 @@ void __init efi_enter_virtual_mode(void)
 	efi_memory_desc_t *md, *prev_md = NULL;
 	efi_status_t status;
 	unsigned long size;
-<<<<<<< HEAD
-	u64 end, systab, end_pfn;
-=======
-	u64 end, systab, addr, npages, start_pfn, end_pfn;
->>>>>>> for-x86-mm
+	u64 end, systab, start_pfn, end_pfn;
 	void *p, *va, *new_memmap = NULL;
 	int count = 0;
 
@@ -894,14 +890,7 @@ void __init efi_enter_virtual_mode(void)
 
 		start_pfn = PFN_DOWN(md->phys_addr);
 		end_pfn = PFN_UP(end);
-<<<<<<< HEAD
-		if (end_pfn <= max_low_pfn_mapped
-		    || (end_pfn > (1UL << (32 - PAGE_SHIFT))
-			&& end_pfn <= max_pfn_mapped)) {
-=======
-
-		if (pfn_range_is_mapped(start_pfn, end_pfn))
->>>>>>> for-x86-mm
+		if (pfn_range_is_mapped(start_pfn, end_pfn)) {
 			va = __va(md->phys_addr);
 
 			if (!(md->attribute & EFI_MEMORY_WB))

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-10-30 14:47       ` Yinghai Lu
@ 2012-11-03 21:35         ` Yinghai Lu
  2012-11-03 21:37           ` H. Peter Anvin
  2012-11-12 19:30           ` Konrad Rzeszutek Wilk
  0 siblings, 2 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-03 21:35 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk, H. Peter Anvin, Ingo Molnar
  Cc: Stefano Stabellini, Thomas Gleixner, Jacob Shin, Tejun Heo, linux-kernel

On Tue, Oct 30, 2012 at 7:47 AM, Yinghai Lu <yinghai@kernel.org> wrote:
> On Tue, Oct 30, 2012 at 6:44 AM, Konrad Rzeszutek Wilk
> <konrad@kernel.org> wrote:
>> On Wed, Oct 10, 2012 at 11:13:45PM -0700, Yinghai Lu wrote:
>> So which branch should I try out? Do you have one with all of the
>> required patches so I can just do a 3.7-rc3 'git pull' and try it out?
>
> add for-x86-mm-test branch, and it is based on 3.7-rc3, and merged
> with for-x86-mm branch.
>
> so you can try
>         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
> for-x86-mm-test
>
> there is conflicts between for-x86-mm and 3.7-rc3, and attached patch
> could be used to fix them
>

Peter/Ingo,

can you put for-x86-mm-test to tip for more testing?

or you want to rebase the whole patchset?

Thanks

Yinghai

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-11-03 21:35         ` Yinghai Lu
@ 2012-11-03 21:37           ` H. Peter Anvin
  2012-11-05 20:25             ` Yinghai Lu
  2012-11-12 19:30           ` Konrad Rzeszutek Wilk
  1 sibling, 1 reply; 115+ messages in thread
From: H. Peter Anvin @ 2012-11-03 21:37 UTC (permalink / raw)
  To: Yinghai Lu, Konrad Rzeszutek Wilk, Ingo Molnar
  Cc: Stefano Stabellini, Thomas Gleixner, Jacob Shin, Tejun Heo, linux-kernel

I am travelling at the moment... I hope to be able to look at it Sunday.

Yinghai Lu <yinghai@kernel.org> wrote:

>On Tue, Oct 30, 2012 at 7:47 AM, Yinghai Lu <yinghai@kernel.org> wrote:
>> On Tue, Oct 30, 2012 at 6:44 AM, Konrad Rzeszutek Wilk
>> <konrad@kernel.org> wrote:
>>> On Wed, Oct 10, 2012 at 11:13:45PM -0700, Yinghai Lu wrote:
>>> So which branch should I try out? Do you have one with all of the
>>> required patches so I can just do a 3.7-rc3 'git pull' and try it
>out?
>>
>> add for-x86-mm-test branch, and it is based on 3.7-rc3, and merged
>> with for-x86-mm branch.
>>
>> so you can try
>>        
>git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
>> for-x86-mm-test
>>
>> there is conflicts between for-x86-mm and 3.7-rc3, and attached patch
>> could be used to fix them
>>
>
>Peter/Ingo,
>
>can you put for-x86-mm-test to tip for more testing?
>
>or you want to rebase the whole patchset?
>
>Thanks
>
>Yinghai

-- 
Sent from my mobile phone. Please excuse brevity and lack of formatting.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-11-03 21:37           ` H. Peter Anvin
@ 2012-11-05 20:25             ` Yinghai Lu
  2012-11-05 20:27               ` [PATCH 39/42] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
  2012-11-07 16:11               ` [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Konrad Rzeszutek Wilk
  0 siblings, 2 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-05 20:25 UTC (permalink / raw)
  To: H. Peter Anvin, Stefano Stabellini, Konrad Rzeszutek Wilk,
	Andrew Morton, Jacob Shin
  Cc: Ingo Molnar, Thomas Gleixner, Tejun Heo, linux-kernel

On Sat, Nov 3, 2012 at 2:37 PM, H. Peter Anvin <hpa@zytor.com> wrote:
> I am travelling at the moment... I hope to be able to look at it Sunday.
>>
>>can you put for-x86-mm-test to tip for more testing?
>>
>>or you want to rebase the whole patchset?

All,

please check branch that is rebased on top of 3.7-rc4.
git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
for-x86-mm

Stefano, Konrad,
please check them with xen parts, and give your acked-by or
Reviewed-by accordingly.

Thanks

Yinghai


>From 1b66ccf15ff4bd0200567e8d70446a8763f96ee7 Mon Sep 17 00:00:00 2001
From: Yinghai Lu <yinghai@kernel.org>
Date: Mon, 5 Nov 2012 11:54:12 -0800
Subject: [PATCH v6 00/42] x86, mm: map ram from top-down with BRK and memblock.

rebase patchset together tip/x86/mm2 on top of linus v3.7-rc4

so this one include patchset : x86, mm: init_memory_mapping cleanup
in tip/x86/mm2
---
Current kernel init memory mapping between [0, TOML) and [4G, TOMH)
Some AMD systems have mem hole between 4G and TOMH, around 1T.
According to HPA, we should only mapping ram range.
1. Seperate calculate_table_space_size and find_early_page_table out with
   init_memory_mapping.
2. For all ranges, will allocate page table one time
3. init mapping for ram range one by one.
---

pre mapping page table patcheset includes:
1. use brk to mapping first PMD_SIZE range under end of ram.
2. top down to initialize page table range by range.
3. get rid of calculate_page_table, and find_early_page_table.
4. remove early_ioremap in page table accessing.
5. remove workaround in xen to mark page RO.

v2: changes, update xen interface about pagetable_reserve, so not
   use pgt_buf_* in xen code directly.
v3: use range top-down to initialize page table, so will not use
   calculating/find early table anymore.
   also reorder the patches sequence.
v4: add mapping_mark_page_ro to fix xen, also move pgt_buf_* to init.c
    and merge alloc_low_page(), and for 32bit need to add alloc_low_pages
    to fix 32bit kmap setting.
v5: remove mark_page_ro workaround  and add another 5 cleanup patches.
v6: rebase on v3.7-rc4 and add 4 cleanup patches.

could be found at:
        git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
for-x86-mm

1b66ccf: mm: Kill NO_BOOTMEM version free_all_bootmem_node()
0332736: sparc, mm: Remove calling of free_all_bootmem_node()
0f88d27: x86, mm: kill numa_64.h
10c4c68: x86, mm: kill numa_free_all_bootmem()
0187d6e: x86, mm: Let "memmap=" take more entries one time
2c20fd0: x86, mm: Use clamp_t() in init_range_memory_mapping
770db30: x86, mm: Move after_bootmem to mm_internel.h
d9bd282: x86, mm: Unifying after_bootmem for 32bit and 64bit
003d654: x86, mm: use limit_pfn for end pfn
29f27b8: x86, mm: use pfn instead of pos in split_mem_range
8edaab8: x86, mm: use PFN_DOWN in split_mem_range()
e652c73: x86, mm: use round_up/down in split_mem_range()
5fd1391: x86, mm: Add check before clear pte above max_low_pfn on 32bit
f4fd136: x86, mm: Move function declaration into mm_internal.h
ea421df: x86, mm: change low/hignmem_pfn_init to static on 32bit
867525b: x86, mm: Move init_gbpages() out of setup.c
97fb23a: x86, mm: Move back pgt_buf_* to mm/init.c
ba55b2f: x86, mm: only call early_ioremap_page_table_range_init() once
bb6d2d9: x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages
6bc7e9f: x86, mm: Add alloc_low_pages(num)
d90df25: x86, mm, Xen: Remove mapping_pagetable_reserve()
f6699d2: x86, mm: Move min_pfn_mapped back to mm/init.c
675697b: x86, mm: Merge alloc_low_page between 64bit and 32bit
a14a382: x86, mm: Remove parameter in alloc_low_page for 64bit
a0d7a52: x86, mm: Remove early_memremap workaround for page table
accessing on 64bit
384a79d: x86, mm: setup page table in top-down
16252f2: x86, mm: Break down init_all_memory_mapping
255a0bf: x86, mm: Don't clear page table if range is ram
4bc70c5: x86, mm: Use big page size for small memory range
dc62aa8: x86, mm: Align start address to correct big page size
18f374c: x86: Only direct map addresses that are marked as E820_RAM
150387c: x86: Fixup code testing if a pfn is direct mapped
45cb049: x86: if kernel .text .data .bss are not marked as E820_RAM,
complain and fix
8d0b8bd: x86, mm: Set memblock initial limit to 1M
6c712cf: x86, mm: Separate out calculate_table_space_size()
33b0520: x86, mm: Find early page table buffer together
a95ff4b: x86, mm: Change find_early_table_space() paramters
ea564f8: x86, mm: Revert back good_end setting for 64bit
912c686: x86, mm: Move init_memory_mapping calling out of setup.c
47cfa63: x86, mm: Move down find_early_table_space()
060ed6c: x86, mm: Split out split_mem_range from init_memory_mapping
2ad38b5: x86, mm: Add global page_size_mask and probe one time only

 arch/sparc/mm/init_64.c              |   24 +-
 arch/x86/include/asm/init.h          |   21 +--
 arch/x86/include/asm/numa.h          |    2 -
 arch/x86/include/asm/numa_64.h       |    6 -
 arch/x86/include/asm/page_types.h    |    2 +
 arch/x86/include/asm/pgtable.h       |    2 +
 arch/x86/include/asm/pgtable_types.h |    1 -
 arch/x86/include/asm/x86_init.h      |   12 -
 arch/x86/kernel/acpi/boot.c          |    1 -
 arch/x86/kernel/cpu/amd.c            |    9 +-
 arch/x86/kernel/cpu/intel.c          |    1 -
 arch/x86/kernel/e820.c               |   16 ++-
 arch/x86/kernel/setup.c              |   70 ++----
 arch/x86/kernel/x86_init.c           |    4 -
 arch/x86/mm/init.c                   |  445 ++++++++++++++++++++++------------
 arch/x86/mm/init_32.c                |  106 +++++---
 arch/x86/mm/init_64.c                |  140 ++++-------
 arch/x86/mm/mm_internal.h            |   19 ++
 arch/x86/mm/numa_64.c                |   13 -
 arch/x86/platform/efi/efi.c          |    7 +-
 arch/x86/xen/mmu.c                   |   28 ---
 include/linux/mm.h                   |    1 -
 mm/nobootmem.c                       |   14 -
 23 files changed, 480 insertions(+), 464 deletions(-)
 delete mode 100644 arch/x86/include/asm/numa_64.h
 create mode 100644 arch/x86/mm/mm_internal.h

-- 
1.7.7

^ permalink raw reply	[flat|nested] 115+ messages in thread

* [PATCH 39/42] x86, mm: kill numa_free_all_bootmem()
  2012-11-05 20:25             ` Yinghai Lu
@ 2012-11-05 20:27               ` Yinghai Lu
  2012-11-05 20:27                 ` [PATCH 40/42] x86, mm: kill numa_64.h Yinghai Lu
                                   ` (2 more replies)
  2012-11-07 16:11               ` [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Konrad Rzeszutek Wilk
  1 sibling, 3 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-05 20:27 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Now NO_BOOTMEM version free_all_bootmem_node() does not really
do free_bootmem at all, and it only call register_page_bootmem_info_node
instead.

That is confusing, try to kill that free_all_bootmem_node().

Before that, this patch will remove numa_free_all_bootmem().

That function could be replaced with register_page_bootmem_info() and
free_all_bootmem();

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/numa_64.h |    2 --
 arch/x86/mm/init_64.c          |   15 +++++++++++----
 arch/x86/mm/numa_64.c          |   13 -------------
 3 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/arch/x86/include/asm/numa_64.h b/arch/x86/include/asm/numa_64.h
index 0c05f7a..fe4d2d4 100644
--- a/arch/x86/include/asm/numa_64.h
+++ b/arch/x86/include/asm/numa_64.h
@@ -1,6 +1,4 @@
 #ifndef _ASM_X86_NUMA_64_H
 #define _ASM_X86_NUMA_64_H
 
-extern unsigned long numa_free_all_bootmem(void);
-
 #endif /* _ASM_X86_NUMA_64_H */
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 1d53def..4178530 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -629,6 +629,16 @@ EXPORT_SYMBOL_GPL(arch_add_memory);
 
 static struct kcore_list kcore_vsyscall;
 
+static void __init register_page_bootmem_info(void)
+{
+#ifdef CONFIG_NUMA
+	int i;
+
+	for_each_online_node(i)
+		register_page_bootmem_info_node(NODE_DATA(i));
+#endif
+}
+
 void __init mem_init(void)
 {
 	long codesize, reservedpages, datasize, initsize;
@@ -641,11 +651,8 @@ void __init mem_init(void)
 	reservedpages = 0;
 
 	/* this will put all low memory onto the freelists */
-#ifdef CONFIG_NUMA
-	totalram_pages = numa_free_all_bootmem();
-#else
+	register_page_bootmem_info();
 	totalram_pages = free_all_bootmem();
-#endif
 
 	absent_pages = absent_pages_in_range(0, max_pfn);
 	reservedpages = max_pfn - totalram_pages - absent_pages;
diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c
index 92e2711..9405ffc 100644
--- a/arch/x86/mm/numa_64.c
+++ b/arch/x86/mm/numa_64.c
@@ -10,16 +10,3 @@ void __init initmem_init(void)
 {
 	x86_numa_init();
 }
-
-unsigned long __init numa_free_all_bootmem(void)
-{
-	unsigned long pages = 0;
-	int i;
-
-	for_each_online_node(i)
-		pages += free_all_bootmem_node(NODE_DATA(i));
-
-	pages += free_low_memory_core_early(MAX_NUMNODES);
-
-	return pages;
-}
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 40/42] x86, mm: kill numa_64.h
  2012-11-05 20:27               ` [PATCH 39/42] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
@ 2012-11-05 20:27                 ` Yinghai Lu
  2012-11-05 20:27                   ` Yinghai Lu
  2012-11-05 20:27                 ` [PATCH 42/42] mm: Kill NO_BOOTMEM version free_all_bootmem_node() Yinghai Lu
  2 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-05 20:27 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/numa.h    |    2 --
 arch/x86/include/asm/numa_64.h |    4 ----
 arch/x86/kernel/acpi/boot.c    |    1 -
 arch/x86/kernel/cpu/amd.c      |    1 -
 arch/x86/kernel/cpu/intel.c    |    1 -
 arch/x86/kernel/setup.c        |    3 ---
 6 files changed, 0 insertions(+), 12 deletions(-)
 delete mode 100644 arch/x86/include/asm/numa_64.h

diff --git a/arch/x86/include/asm/numa.h b/arch/x86/include/asm/numa.h
index 49119fc..52560a2 100644
--- a/arch/x86/include/asm/numa.h
+++ b/arch/x86/include/asm/numa.h
@@ -54,8 +54,6 @@ static inline int numa_cpu_node(int cpu)
 
 #ifdef CONFIG_X86_32
 # include <asm/numa_32.h>
-#else
-# include <asm/numa_64.h>
 #endif
 
 #ifdef CONFIG_NUMA
diff --git a/arch/x86/include/asm/numa_64.h b/arch/x86/include/asm/numa_64.h
deleted file mode 100644
index fe4d2d4..0000000
--- a/arch/x86/include/asm/numa_64.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifndef _ASM_X86_NUMA_64_H
-#define _ASM_X86_NUMA_64_H
-
-#endif /* _ASM_X86_NUMA_64_H */
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index e651f7a..4b23aa1 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -51,7 +51,6 @@ EXPORT_SYMBOL(acpi_disabled);
 
 #ifdef	CONFIG_X86_64
 # include <asm/proto.h>
-# include <asm/numa_64.h>
 #endif				/* X86 */
 
 #define BAD_MADT_ENTRY(entry, end) (					    \
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 9619ba6..913f94f 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -12,7 +12,6 @@
 #include <asm/pci-direct.h>
 
 #ifdef CONFIG_X86_64
-# include <asm/numa_64.h>
 # include <asm/mmconfig.h>
 # include <asm/cacheflush.h>
 #endif
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index 198e019..3b547cc 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -17,7 +17,6 @@
 
 #ifdef CONFIG_X86_64
 #include <linux/topology.h>
-#include <asm/numa_64.h>
 #endif
 
 #include "cpu.h"
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 457de1d..8b0fb6fd 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -108,9 +108,6 @@
 #include <asm/topology.h>
 #include <asm/apicdef.h>
 #include <asm/amd_nb.h>
-#ifdef CONFIG_X86_64
-#include <asm/numa_64.h>
-#endif
 #include <asm/mce.h>
 #include <asm/alternative.h>
 #include <asm/prom.h>
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 41/42] sparc, mm: Remove calling of free_all_bootmem_node()
  2012-11-05 20:27               ` [PATCH 39/42] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
@ 2012-11-05 20:27                   ` Yinghai Lu
  2012-11-05 20:27                   ` Yinghai Lu
  2012-11-05 20:27                 ` [PATCH 42/42] mm: Kill NO_BOOTMEM version free_all_bootmem_node() Yinghai Lu
  2 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-05 20:27 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu, David S. Miller, sparclinux

Now NO_BOOTMEM version free_all_bootmem_node() does not really
do free_bootmem at all, and it only call
register_page_bootmem_info_node instead.

That is confusing, try to kill that free_all_bootmem_node().

Before that, this patch will remove calling of free_all_bootmem_node()

We add register_page_bootmem_info() to call register_page_bootmem_info_node
directly.

Also could use free_all_bootmem() for numa case, and it is just
the same as free_low_memory_core_early().

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: sparclinux@vger.kernel.org
---
 arch/sparc/mm/init_64.c |   24 +++++++++++-------------
 1 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 9e28a11..b24bac2 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -2021,6 +2021,16 @@ static void __init patch_tlb_miss_handler_bitmap(void)
 	flushi(&valid_addr_bitmap_insn[0]);
 }
 
+static void __init register_page_bootmem_info(void)
+{
+#ifdef CONFIG_NEED_MULTIPLE_NODES
+	int i;
+
+	for_each_online_node(i)
+		if (NODE_DATA(i)->node_spanned_pages)
+			register_page_bootmem_info_node(NODE_DATA(i));
+#endif
+}
 void __init mem_init(void)
 {
 	unsigned long codepages, datapages, initpages;
@@ -2038,20 +2048,8 @@ void __init mem_init(void)
 
 	high_memory = __va(last_valid_pfn << PAGE_SHIFT);
 
-#ifdef CONFIG_NEED_MULTIPLE_NODES
-	{
-		int i;
-		for_each_online_node(i) {
-			if (NODE_DATA(i)->node_spanned_pages != 0) {
-				totalram_pages +=
-					free_all_bootmem_node(NODE_DATA(i));
-			}
-		}
-		totalram_pages += free_low_memory_core_early(MAX_NUMNODES);
-	}
-#else
+	register_page_bootmem_info();
 	totalram_pages = free_all_bootmem();
-#endif
 
 	/* We subtract one to account for the mem_map_zero page
 	 * allocated below.
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 41/42] sparc, mm: Remove calling of free_all_bootmem_node()
@ 2012-11-05 20:27                   ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-05 20:27 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu, David S. Miller, sparclinux

Now NO_BOOTMEM version free_all_bootmem_node() does not really
do free_bootmem at all, and it only call
register_page_bootmem_info_node instead.

That is confusing, try to kill that free_all_bootmem_node().

Before that, this patch will remove calling of free_all_bootmem_node()

We add register_page_bootmem_info() to call register_page_bootmem_info_node
directly.

Also could use free_all_bootmem() for numa case, and it is just
the same as free_low_memory_core_early().

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: sparclinux@vger.kernel.org
---
 arch/sparc/mm/init_64.c |   24 +++++++++++-------------
 1 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 9e28a11..b24bac2 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -2021,6 +2021,16 @@ static void __init patch_tlb_miss_handler_bitmap(void)
 	flushi(&valid_addr_bitmap_insn[0]);
 }
 
+static void __init register_page_bootmem_info(void)
+{
+#ifdef CONFIG_NEED_MULTIPLE_NODES
+	int i;
+
+	for_each_online_node(i)
+		if (NODE_DATA(i)->node_spanned_pages)
+			register_page_bootmem_info_node(NODE_DATA(i));
+#endif
+}
 void __init mem_init(void)
 {
 	unsigned long codepages, datapages, initpages;
@@ -2038,20 +2048,8 @@ void __init mem_init(void)
 
 	high_memory = __va(last_valid_pfn << PAGE_SHIFT);
 
-#ifdef CONFIG_NEED_MULTIPLE_NODES
-	{
-		int i;
-		for_each_online_node(i) {
-			if (NODE_DATA(i)->node_spanned_pages != 0) {
-				totalram_pages +-					free_all_bootmem_node(NODE_DATA(i));
-			}
-		}
-		totalram_pages += free_low_memory_core_early(MAX_NUMNODES);
-	}
-#else
+	register_page_bootmem_info();
 	totalram_pages = free_all_bootmem();
-#endif
 
 	/* We subtract one to account for the mem_map_zero page
 	 * allocated below.
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 42/42] mm: Kill NO_BOOTMEM version free_all_bootmem_node()
  2012-11-05 20:27               ` [PATCH 39/42] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
  2012-11-05 20:27                 ` [PATCH 40/42] x86, mm: kill numa_64.h Yinghai Lu
  2012-11-05 20:27                   ` Yinghai Lu
@ 2012-11-05 20:27                 ` Yinghai Lu
  2 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-05 20:27 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Now NO_BOOTMEM version free_all_bootmem_node() does not really
do free_bootmem at all, and it only call register_page_bootmem_info_node
for online nodes instead.

That is confusing.

We can kill that free_all_bootmem_node(), after we kill two callings
in x86 and sparc.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 mm/nobootmem.c |   14 --------------
 1 files changed, 0 insertions(+), 14 deletions(-)

diff --git a/mm/nobootmem.c b/mm/nobootmem.c
index 714d5d6..f22c228 100644
--- a/mm/nobootmem.c
+++ b/mm/nobootmem.c
@@ -141,20 +141,6 @@ unsigned long __init free_low_memory_core_early(int nodeid)
 }
 
 /**
- * free_all_bootmem_node - release a node's free pages to the buddy allocator
- * @pgdat: node to be released
- *
- * Returns the number of pages actually released.
- */
-unsigned long __init free_all_bootmem_node(pg_data_t *pgdat)
-{
-	register_page_bootmem_info_node(pgdat);
-
-	/* free_low_memory_core_early(MAX_NUMNODES) will be called later */
-	return 0;
-}
-
-/**
  * free_all_bootmem - release free pages to the buddy allocator
  *
  * Returns the number of pages actually released.
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* Re: [PATCH 41/42] sparc, mm: Remove calling of free_all_bootmem_node()
  2012-11-05 20:27                   ` Yinghai Lu
@ 2012-11-06 17:44                     ` David Miller
  -1 siblings, 0 replies; 115+ messages in thread
From: David Miller @ 2012-11-06 17:44 UTC (permalink / raw)
  To: yinghai
  Cc: tglx, mingo, hpa, jacob.shin, akpm, stefano.stabellini,
	konrad.wilk, linux-kernel, sparclinux

From: Yinghai Lu <yinghai@kernel.org>
Date: Mon,  5 Nov 2012 12:27:42 -0800

> Now NO_BOOTMEM version free_all_bootmem_node() does not really
> do free_bootmem at all, and it only call
> register_page_bootmem_info_node instead.
> 
> That is confusing, try to kill that free_all_bootmem_node().
> 
> Before that, this patch will remove calling of free_all_bootmem_node()
> 
> We add register_page_bootmem_info() to call register_page_bootmem_info_node
> directly.
> 
> Also could use free_all_bootmem() for numa case, and it is just
> the same as free_low_memory_core_early().
> 
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>

Acked-by: David S. Miller <davem@davemloft.net>

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 41/42] sparc, mm: Remove calling of free_all_bootmem_node()
@ 2012-11-06 17:44                     ` David Miller
  0 siblings, 0 replies; 115+ messages in thread
From: David Miller @ 2012-11-06 17:44 UTC (permalink / raw)
  To: yinghai
  Cc: tglx, mingo, hpa, jacob.shin, akpm, stefano.stabellini,
	konrad.wilk, linux-kernel, sparclinux

From: Yinghai Lu <yinghai@kernel.org>
Date: Mon,  5 Nov 2012 12:27:42 -0800

> Now NO_BOOTMEM version free_all_bootmem_node() does not really
> do free_bootmem at all, and it only call
> register_page_bootmem_info_node instead.
> 
> That is confusing, try to kill that free_all_bootmem_node().
> 
> Before that, this patch will remove calling of free_all_bootmem_node()
> 
> We add register_page_bootmem_info() to call register_page_bootmem_info_node
> directly.
> 
> Also could use free_all_bootmem() for numa case, and it is just
> the same as free_low_memory_core_early().
> 
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>

Acked-by: David S. Miller <davem@davemloft.net>

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-11-05 20:25             ` Yinghai Lu
  2012-11-05 20:27               ` [PATCH 39/42] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
@ 2012-11-07 16:11               ` Konrad Rzeszutek Wilk
  2012-11-08  1:40                 ` Konrad Rzeszutek Wilk
  1 sibling, 1 reply; 115+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-11-07 16:11 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: H. Peter Anvin, Stefano Stabellini, Andrew Morton, Jacob Shin,
	Ingo Molnar, Thomas Gleixner, Tejun Heo, linux-kernel

On Mon, Nov 05, 2012 at 12:25:12PM -0800, Yinghai Lu wrote:
> On Sat, Nov 3, 2012 at 2:37 PM, H. Peter Anvin <hpa@zytor.com> wrote:
> > I am travelling at the moment... I hope to be able to look at it Sunday.
> >>
> >>can you put for-x86-mm-test to tip for more testing?
> >>
> >>or you want to rebase the whole patchset?
> 
> All,
> 
> please check branch that is rebased on top of 3.7-rc4.
> git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
> for-x86-mm

I did a overnight test and it passed that. Let me do a couple of more of bootups
with various memory configurations (1GB, 2GB, 3333M, 4G, 8GB, 16GB, 32GB) to
get a good feel.

Thanks!
> 
> Stefano, Konrad,
> please check them with xen parts, and give your acked-by or
> Reviewed-by accordingly.
> 
> Thanks
> 
> Yinghai
> 
> 
> >From 1b66ccf15ff4bd0200567e8d70446a8763f96ee7 Mon Sep 17 00:00:00 2001
> From: Yinghai Lu <yinghai@kernel.org>
> Date: Mon, 5 Nov 2012 11:54:12 -0800
> Subject: [PATCH v6 00/42] x86, mm: map ram from top-down with BRK and memblock.
> 
> rebase patchset together tip/x86/mm2 on top of linus v3.7-rc4
> 
> so this one include patchset : x86, mm: init_memory_mapping cleanup
> in tip/x86/mm2
> ---
> Current kernel init memory mapping between [0, TOML) and [4G, TOMH)
> Some AMD systems have mem hole between 4G and TOMH, around 1T.
> According to HPA, we should only mapping ram range.
> 1. Seperate calculate_table_space_size and find_early_page_table out with
>    init_memory_mapping.
> 2. For all ranges, will allocate page table one time
> 3. init mapping for ram range one by one.
> ---
> 
> pre mapping page table patcheset includes:
> 1. use brk to mapping first PMD_SIZE range under end of ram.
> 2. top down to initialize page table range by range.
> 3. get rid of calculate_page_table, and find_early_page_table.
> 4. remove early_ioremap in page table accessing.
> 5. remove workaround in xen to mark page RO.
> 
> v2: changes, update xen interface about pagetable_reserve, so not
>    use pgt_buf_* in xen code directly.
> v3: use range top-down to initialize page table, so will not use
>    calculating/find early table anymore.
>    also reorder the patches sequence.
> v4: add mapping_mark_page_ro to fix xen, also move pgt_buf_* to init.c
>     and merge alloc_low_page(), and for 32bit need to add alloc_low_pages
>     to fix 32bit kmap setting.
> v5: remove mark_page_ro workaround  and add another 5 cleanup patches.
> v6: rebase on v3.7-rc4 and add 4 cleanup patches.
> 
> could be found at:
>         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
> for-x86-mm
> 
> 1b66ccf: mm: Kill NO_BOOTMEM version free_all_bootmem_node()
> 0332736: sparc, mm: Remove calling of free_all_bootmem_node()
> 0f88d27: x86, mm: kill numa_64.h
> 10c4c68: x86, mm: kill numa_free_all_bootmem()
> 0187d6e: x86, mm: Let "memmap=" take more entries one time
> 2c20fd0: x86, mm: Use clamp_t() in init_range_memory_mapping
> 770db30: x86, mm: Move after_bootmem to mm_internel.h
> d9bd282: x86, mm: Unifying after_bootmem for 32bit and 64bit
> 003d654: x86, mm: use limit_pfn for end pfn
> 29f27b8: x86, mm: use pfn instead of pos in split_mem_range
> 8edaab8: x86, mm: use PFN_DOWN in split_mem_range()
> e652c73: x86, mm: use round_up/down in split_mem_range()
> 5fd1391: x86, mm: Add check before clear pte above max_low_pfn on 32bit
> f4fd136: x86, mm: Move function declaration into mm_internal.h
> ea421df: x86, mm: change low/hignmem_pfn_init to static on 32bit
> 867525b: x86, mm: Move init_gbpages() out of setup.c
> 97fb23a: x86, mm: Move back pgt_buf_* to mm/init.c
> ba55b2f: x86, mm: only call early_ioremap_page_table_range_init() once
> bb6d2d9: x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages
> 6bc7e9f: x86, mm: Add alloc_low_pages(num)
> d90df25: x86, mm, Xen: Remove mapping_pagetable_reserve()
> f6699d2: x86, mm: Move min_pfn_mapped back to mm/init.c
> 675697b: x86, mm: Merge alloc_low_page between 64bit and 32bit
> a14a382: x86, mm: Remove parameter in alloc_low_page for 64bit
> a0d7a52: x86, mm: Remove early_memremap workaround for page table
> accessing on 64bit
> 384a79d: x86, mm: setup page table in top-down
> 16252f2: x86, mm: Break down init_all_memory_mapping
> 255a0bf: x86, mm: Don't clear page table if range is ram
> 4bc70c5: x86, mm: Use big page size for small memory range
> dc62aa8: x86, mm: Align start address to correct big page size
> 18f374c: x86: Only direct map addresses that are marked as E820_RAM
> 150387c: x86: Fixup code testing if a pfn is direct mapped
> 45cb049: x86: if kernel .text .data .bss are not marked as E820_RAM,
> complain and fix
> 8d0b8bd: x86, mm: Set memblock initial limit to 1M
> 6c712cf: x86, mm: Separate out calculate_table_space_size()
> 33b0520: x86, mm: Find early page table buffer together
> a95ff4b: x86, mm: Change find_early_table_space() paramters
> ea564f8: x86, mm: Revert back good_end setting for 64bit
> 912c686: x86, mm: Move init_memory_mapping calling out of setup.c
> 47cfa63: x86, mm: Move down find_early_table_space()
> 060ed6c: x86, mm: Split out split_mem_range from init_memory_mapping
> 2ad38b5: x86, mm: Add global page_size_mask and probe one time only
> 
>  arch/sparc/mm/init_64.c              |   24 +-
>  arch/x86/include/asm/init.h          |   21 +--
>  arch/x86/include/asm/numa.h          |    2 -
>  arch/x86/include/asm/numa_64.h       |    6 -
>  arch/x86/include/asm/page_types.h    |    2 +
>  arch/x86/include/asm/pgtable.h       |    2 +
>  arch/x86/include/asm/pgtable_types.h |    1 -
>  arch/x86/include/asm/x86_init.h      |   12 -
>  arch/x86/kernel/acpi/boot.c          |    1 -
>  arch/x86/kernel/cpu/amd.c            |    9 +-
>  arch/x86/kernel/cpu/intel.c          |    1 -
>  arch/x86/kernel/e820.c               |   16 ++-
>  arch/x86/kernel/setup.c              |   70 ++----
>  arch/x86/kernel/x86_init.c           |    4 -
>  arch/x86/mm/init.c                   |  445 ++++++++++++++++++++++------------
>  arch/x86/mm/init_32.c                |  106 +++++---
>  arch/x86/mm/init_64.c                |  140 ++++-------
>  arch/x86/mm/mm_internal.h            |   19 ++
>  arch/x86/mm/numa_64.c                |   13 -
>  arch/x86/platform/efi/efi.c          |    7 +-
>  arch/x86/xen/mmu.c                   |   28 ---
>  include/linux/mm.h                   |    1 -
>  mm/nobootmem.c                       |   14 -
>  23 files changed, 480 insertions(+), 464 deletions(-)
>  delete mode 100644 arch/x86/include/asm/numa_64.h
>  create mode 100644 arch/x86/mm/mm_internal.h
> 
> -- 
> 1.7.7

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-11-07 16:11               ` [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Konrad Rzeszutek Wilk
@ 2012-11-08  1:40                 ` Konrad Rzeszutek Wilk
  2012-11-08  4:06                   ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-11-08  1:40 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: H. Peter Anvin, Stefano Stabellini, Andrew Morton, Jacob Shin,
	Ingo Molnar, Thomas Gleixner, Tejun Heo, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 2019 bytes --]

On Wed, Nov 07, 2012 at 11:11:44AM -0500, Konrad Rzeszutek Wilk wrote:
> On Mon, Nov 05, 2012 at 12:25:12PM -0800, Yinghai Lu wrote:
> > On Sat, Nov 3, 2012 at 2:37 PM, H. Peter Anvin <hpa@zytor.com> wrote:
> > > I am travelling at the moment... I hope to be able to look at it Sunday.
> > >>
> > >>can you put for-x86-mm-test to tip for more testing?
> > >>
> > >>or you want to rebase the whole patchset?
> > 
> > All,
> > 
> > please check branch that is rebased on top of 3.7-rc4.
> > git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
> > for-x86-mm
> 
> I did a overnight test and it passed that. Let me do a couple of more of bootups
> with various memory configurations (1GB, 2GB, 3333M, 4G, 8GB, 16GB, 32GB) to
> get a good feel.

I ran in a problem with launching an 8GB guest. When launching a 4GB it worked
fine, but with 8GB I get:

.000000] init_memory_mapping: [mem 0x1f4000000-0x1f47fffff]
[    0.000000]  [mem 0x1f4000000-0x1f47fffff] page 4k
[    0.000000] memblock_reserve: [0x000001f311c000-0x000001f311d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f311b000-0x000001f311c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f311a000-0x000001f311b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3119000-0x000001f311a000] alloc_low_pages+0x103/0x130
[    0.000000] Kernel panic - not syncing: initrd too large to handle, disabling initrd (348401664 needed, 524288 available)
[    0.000000] 
[    0.000000] Pid: 0, comm: swapper Not tainted 3.7.0-rc4upstream-00042-g1b66ccf #1
[    0.000000] Call Trace:
[    0.000000]  [<ffffffff81633a5c>] panic+0xbf/0x1df
[    0.000000]  [<ffffffff81ac00e1>] setup_arch+0x728/0xb29
[    0.000000]  [<ffffffff81633c48>] ? printk+0x48/0x4a
[    0.000000]  [<ffffffff81aba897>] start_kernel+0x90/0x39e
[    0.000000]  [<ffffffff81aba356>] x86_64_start_reservations+0x131/0x136
[    0.000000]  [<ffffffff81abca38>] xen_start_kernel+0x546/0x548

Attaching the full log.

[-- Attachment #2: 8gb-pv-domu.log --]
[-- Type: text/plain, Size: 381785 bytes --]

# cat /tm\b \best.xm
extra="console=hvc0 debug earlyprintk=xen memblock=debug"
kernel="/mnt/lab/bootstrap-x86_64/vmlinuz"
ramdisk="/mnt/lab/bootstrap-x86_64/initramfs.cpio.gz"
memory=8000
vcpus=1
maxvcpus=3
name="bootstrap-x86_64"
on_crash="preserve"
vif = [ 'mac=00:0F:4B:00:00:68, bridge=switch' ]
#vfb = [ 'vnc=1, vnclisten=0.0.0.0,vncunused=1']
vnc=1
vnclisten="0.0.0.0"
disk=['phy:/dev/guests/bootstrap-x86_64,xvda,w']
# xm create -c /test.xm
Using config file "/test.xm".
[  538.086293] device vif4.0 entered promiscuous mode
[  538.097636] IPv6: ADDRCONF(NETDEV_UP): vif4.0: link is not ready
mapping kernel into physical memory
Started domain bootstrap-x86_64 (id=4)
about to get started...
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Linux version 3.7.0-rc4upstream-00042-g1b66ccf (konrad@build.dumpdata.com) (gcc version 4.4.4 20100503 (Red Hat 4.4.4-2) (GCC) ) #1 SMP Wed Nov 7 18:10:00 EST 2012
[    0.000000] Command line: console=hvc0 debug earlyprintk=xen memblock=debug
[    0.000000] ACPI in unprivileged domain disabled
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] Xen: [mem 0x0000000000000000-0x000000000009ffff] usable
[    0.000000] Xen: [mem 0x00000000000a0000-0x00000000000fffff] reserved
[    0.000000] Xen: [mem 0x0000000000100000-0x00000001f47fffff] usable
[    0.000000] bootconsole [xenboot0] enabled
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] DMI not present or invalid.
[    0.000000] e820: update [mem 0x00000000-0x0000ffff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] No AGP bridge found
[    0.000000] e820: last_pfn = 0x1f4800 max_arch_pfn = 0x400000000
[    0.000000] e820: la 0x1f4790000 reserved size = 0x17139000
[    0.000000]  memory.cnt  = 0x2
[    0.000000]  memory[0x0]	[0x00000000010000-0x0000000009ffff], 0x90000 bytes
[    0.000000]  memory[0x1]	[0x00000000100000-0x000001f47fffff], 0x1f4700000 bytes
[    0.000000]  reserved.cnt  = 0x4
[    0.000000]  reserved[0x0]	[0x00000001000000-0x00000001c92fff], 0xc93000 bytes
[    0.000000]  reserved[0x1]	[0x00000002095000-0x00000017c7afff], 0x15be6000 bytes
[    0.000000]  reserved[0x2]	[0x00000017c7e000-0x00000017d3dfff], 0xc0000 bytes
[    0.000000]  reserved[0x3]	[0x000001f4000000-0x000001f47fffff], 0x800000 bytes
[    0.000000] initial memory mapped: [mem 0x00000000-0x16cd7fff]
[    0.000000] memblock_reserve: [0x0000000009a000-0x000000000a0000] setup_real_mode+0x69/0x19b
[    0.000000] Base memory trampoline at [ffff88000009a000] 9a000 size 24576
[    0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
[    0.000000]  [mem 0x00000000-0x000fffff] page 4k
[    0.000000] init_memory_mapping: [mem 0x1f3e00000-0x1f3ffffff]
[    0.000000]  [mem 0x1f3e00000-0x1f3ffffff] page 4k
[    0.000000] init_memory_mapping: [mem 0x1f0000000-0x1f3dfffff]
[    0.000000]  [mem 0x1f0000000-0x1f3dfffff] page 4k
[    0.000000] memblock_reserve: [0x000001f3fff000-0x000001f4000000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ffe000-0x000001f3fff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ffd000-0x000001f3ffe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ffc000-0x000001f3ffd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ffb000-0x000001f3ffc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ffa000-0x000001f3ffb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ff9000-0x000001f3ffa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ff8000-0x000001f3ff9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ff7000-0x000001f3ff8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ff6000-0x000001f3ff7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ff5000-0x000001f3ff6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ff4000-0x000001f3ff5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ff3000-0x000001f3ff4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ff2000-0x000001f3ff3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ff1000-0x000001f3ff2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ff0000-0x000001f3ff1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fef000-0x000001f3ff0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fee000-0x000001f3fef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fed000-0x000001f3fee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fec000-0x000001f3fed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3feb000-0x000001f3fec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fea000-0x000001f3feb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fe9000-0x000001f3fea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fe8000-0x000001f3fe9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fe7000-0x000001f3fe8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fe6000-0x000001f3fe7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fe5000-0x000001f3fe6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fe4000-0x000001f3fe5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fe3000-0x000001f3fe4000] alloc_low_pages+0x103/0x130
[    0.000000] init_memory_mapping: [mem 0x180000000-0x1efffffff]
[    0.000000]  [mem 0x180000000-0x1efffffff] page 4k
[    0.000000] memblock_reserve: [0x000001f3fe2000-0x000001f3fe3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fe1000-0x000001f3fe2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fe0000-0x000001f3fe1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fdf000-0x000001f3fe0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fde000-0x000001f3fdf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fdd000-0x000001f3fde000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fdc000-0x000001f3fdd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fdb000-0x000001f3fdc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fda000-0x000001f3fdb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fd9000-0x000001f3fda000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fd8000-0x000001f3fd9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fd7000-0x000001f3fd8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fd6000-0x000001f3fd7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fd5000-0x000001f3fd6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fd4000-0x000001f3fd5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fd3000-0x000001f3fd4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fd2000-0x000001f3fd3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fd1000-0x000001f3fd2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fd0000-0x000001f3fd1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fcf000-0x000001f3fd0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fce000-0x000001f3fcf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fcd000-0x000001f3fce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fcc000-0x000001f3fcd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fcb000-0x000001f3fcc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fca000-0x000001f3fcb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fc9000-0x000001f3fca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fc8000-0x000001f3fc9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fc7000-0x000001f3fc8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fc6000-0x000001f3fc7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fc5000-0x000001f3fc6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fc4000-0x000001f3fc5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fc3000-0x000001f3fc4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fc2000-0x000001f3fc3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fc1000-0x000001f3fc2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fc0000-0x000001f3fc1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fbf000-0x000001f3fc0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fbe000-0x000001f3fbf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fbd000-0x000001f3fbe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fbc000-0x000001f3fbd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fbb000-0x000001f3fbc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fba000-0x000001f3fbb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fb9000-0x000001f3fba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fb8000-0x000001f3fb9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fb7000-0x000001f3fb8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fb6000-0x000001f3fb7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fb5000-0x000001f3fb6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fb4000-0x000001f3fb5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fb3000-0x000001f3fb4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fb2000-0x000001f3fb3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fb1000-0x000001f3fb2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fb0000-0x000001f3fb1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3faf000-0x000001f3fb0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fae000-0x000001f3faf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fad000-0x000001f3fae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fac000-0x000001f3fad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fab000-0x000001f3fac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3faa000-0x000001f3fab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fa9000-0x000001f3faa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fa8000-0x000001f3fa9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fa7000-0x000001f3fa8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fa6000-0x000001f3fa7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fa5000-0x000001f3fa6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fa4000-0x000001f3fa5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fa3000-0x000001f3fa4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fa2000-0x000001f3fa3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fa1000-0x000001f3fa2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3fa0000-0x000001f3fa1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f9f000-0x000001f3fa0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f9e000-0x000001f3f9f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f9d000-0x000001f3f9e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f9c000-0x000001f3f9d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f9b000-0x000001f3f9c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f9a000-0x000001f3f9b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f99000-0x000001f3f9a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f98000-0x000001f3f99000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f97000-0x000001f3f98000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f96000-0x000001f3f97000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f95000-0x000001f3f96000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f94000-0x000001f3f95000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f93000-0x000001f3f94000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f92000-0x000001f3f93000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f91000-0x000001f3f92000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f90000-0x000001f3f91000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f8f000-0x000001f3f90000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f8e000-0x000001f3f8f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f8d000-0x000001f3f8e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f8c000-0x000001f3f8d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f8b000-0x000001f3f8c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f8a000-0x000001f3f8b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f89000-0x000001f3f8a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f88000-0x000001f3f89000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f87000-0x000001f3f88000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f86000-0x000001f3f87000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f85000-0x000001f3f86000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f84000-0x000001f3f85000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f83000-0x000001f3f84000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f82000-0x000001f3f83000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f81000-0x000001f3f82000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f80000-0x000001f3f81000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f7f000-0x000001f3f80000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f7e000-0x000001f3f7f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f7d000-0x000001f3f7e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f7c000-0x000001f3f7d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f7b000-0x000001f3f7c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f7a000-0x000001f3f7b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f79000-0x000001f3f7a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f78000-0x000001f3f79000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f77000-0x000001f3f78000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f76000-0x000001f3f77000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f75000-0x000001f3f76000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f74000-0x000001f3f75000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f73000-0x000001f3f74000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f72000-0x000001f3f73000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f71000-0x000001f3f72000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f70000-0x000001f3f71000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f6f000-0x000001f3f70000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f6e000-0x000001f3f6f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f6d000-0x000001f3f6e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f6c000-0x000001f3f6d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f6b000-0x000001f3f6c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f6a000-0x000001f3f6b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f69000-0x000001f3f6a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f68000-0x000001f3f69000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f67000-0x000001f3f68000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f66000-0x000001f3f67000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f65000-0x000001f3f66000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f64000-0x000001f3f65000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f63000-0x000001f3f64000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f62000-0x000001f3f63000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f61000-0x000001f3f62000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f60000-0x000001f3f61000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f5f000-0x000001f3f60000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f5e000-0x000001f3f5f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f5d000-0x000001f3f5e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f5c000-0x000001f3f5d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f5b000-0x000001f3f5c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f5a000-0x000001f3f5b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f59000-0x000001f3f5a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f58000-0x000001f3f59000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f57000-0x000001f3f58000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f56000-0x000001f3f57000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f55000-0x000001f3f56000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f54000-0x000001f3f55000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f53000-0x000001f3f54000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f52000-0x000001f3f53000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f51000-0x000001f3f52000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f50000-0x000001f3f51000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f4f000-0x000001f3f50000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f4e000-0x000001f3f4f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f4d000-0x000001f3f4e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f4c000-0x000001f3f4d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f4b000-0x000001f3f4c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f4a000-0x000001f3f4b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f49000-0x000001f3f4a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f48000-0x000001f3f49000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f47000-0x000001f3f48000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f46000-0x000001f3f47000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f45000-0x000001f3f46000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f44000-0x000001f3f45000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f43000-0x000001f3f44000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f42000-0x000001f3f43000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f41000-0x000001f3f42000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f40000-0x000001f3f41000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f3f000-0x000001f3f40000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f3e000-0x000001f3f3f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f3d000-0x000001f3f3e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f3c000-0x000001f3f3d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f3b000-0x000001f3f3c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f3a000-0x000001f3f3b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f39000-0x000001f3f3a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f38000-0x000001f3f39000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f37000-0x000001f3f38000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f36000-0x000001f3f37000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f35000-0x000001f3f36000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f34000-0x000001f3f35000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f33000-0x000001f3f34000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f32000-0x000001f3f33000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f31000-0x000001f3f32000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f30000-0x000001f3f31000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f2f000-0x000001f3f30000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f2e000-0x000001f3f2f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f2d000-0x000001f3f2e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f2c000-0x000001f3f2d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f2b000-0x000001f3f2c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f2a000-0x000001f3f2b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f29000-0x000001f3f2a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f28000-0x000001f3f29000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f27000-0x000001f3f28000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f26000-0x000001f3f27000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f25000-0x000001f3f26000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f24000-0x000001f3f25000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f23000-0x000001f3f24000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f22000-0x000001f3f23000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f21000-0x000001f3f22000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f20000-0x000001f3f21000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f1f000-0x000001f3f20000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f1e000-0x000001f3f1f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f1d000-0x000001f3f1e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f1c000-0x000001f3f1d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f1b000-0x000001f3f1c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f1a000-0x000001f3f1b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f19000-0x000001f3f1a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f18000-0x000001f3f19000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f17000-0x000001f3f18000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f16000-0x000001f3f17000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f15000-0x000001f3f16000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f14000-0x000001f3f15000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f13000-0x000001f3f14000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f12000-0x000001f3f13000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f11000-0x000001f3f12000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f10000-0x000001f3f11000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f0f000-0x000001f3f10000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f0e000-0x000001f3f0f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f0d000-0x000001f3f0e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f0c000-0x000001f3f0d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f0b000-0x000001f3f0c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f0a000-0x000001f3f0b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f09000-0x000001f3f0a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f08000-0x000001f3f09000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f07000-0x000001f3f08000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f06000-0x000001f3f07000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f05000-0x000001f3f06000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f04000-0x000001f3f05000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f03000-0x000001f3f04000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f02000-0x000001f3f03000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f01000-0x000001f3f02000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3f00000-0x000001f3f01000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eff000-0x000001f3f00000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3efe000-0x000001f3eff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3efd000-0x000001f3efe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3efc000-0x000001f3efd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3efb000-0x000001f3efc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3efa000-0x000001f3efb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ef9000-0x000001f3efa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ef8000-0x000001f3ef9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ef7000-0x000001f3ef8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ef6000-0x000001f3ef7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ef5000-0x000001f3ef6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ef4000-0x000001f3ef5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ef3000-0x000001f3ef4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ef2000-0x000001f3ef3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ef1000-0x000001f3ef2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ef0000-0x000001f3ef1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eef000-0x000001f3ef0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eee000-0x000001f3eef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eed000-0x000001f3eee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eec000-0x000001f3eed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eeb000-0x000001f3eec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eea000-0x000001f3eeb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ee9000-0x000001f3eea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ee8000-0x000001f3ee9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ee7000-0x000001f3ee8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ee6000-0x000001f3ee7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ee5000-0x000001f3ee6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ee4000-0x000001f3ee5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ee3000-0x000001f3ee4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ee2000-0x000001f3ee3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ee1000-0x000001f3ee2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ee0000-0x000001f3ee1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3edf000-0x000001f3ee0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ede000-0x000001f3edf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3edd000-0x000001f3ede000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3edc000-0x000001f3edd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3edb000-0x000001f3edc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eda000-0x000001f3edb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ed9000-0x000001f3eda000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ed8000-0x000001f3ed9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ed7000-0x000001f3ed8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ed6000-0x000001f3ed7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ed5000-0x000001f3ed6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ed4000-0x000001f3ed5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ed3000-0x000001f3ed4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ed2000-0x000001f3ed3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ed1000-0x000001f3ed2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ed0000-0x000001f3ed1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ecf000-0x000001f3ed0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ece000-0x000001f3ecf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ecd000-0x000001f3ece000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ecc000-0x000001f3ecd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ecb000-0x000001f3ecc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eca000-0x000001f3ecb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ec9000-0x000001f3eca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ec8000-0x000001f3ec9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ec7000-0x000001f3ec8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ec6000-0x000001f3ec7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ec5000-0x000001f3ec6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ec4000-0x000001f3ec5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ec3000-0x000001f3ec4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ec2000-0x000001f3ec3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ec1000-0x000001f3ec2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ec0000-0x000001f3ec1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ebf000-0x000001f3ec0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ebe000-0x000001f3ebf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ebd000-0x000001f3ebe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ebc000-0x000001f3ebd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ebb000-0x000001f3ebc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eba000-0x000001f3ebb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eb9000-0x000001f3eba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eb8000-0x000001f3eb9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eb7000-0x000001f3eb8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eb6000-0x000001f3eb7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eb5000-0x000001f3eb6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eb4000-0x000001f3eb5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eb3000-0x000001f3eb4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eb2000-0x000001f3eb3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eb1000-0x000001f3eb2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eb0000-0x000001f3eb1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eaf000-0x000001f3eb0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eae000-0x000001f3eaf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ead000-0x000001f3eae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eac000-0x000001f3ead000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eab000-0x000001f3eac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3eaa000-0x000001f3eab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ea9000-0x000001f3eaa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ea8000-0x000001f3ea9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ea7000-0x000001f3ea8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ea6000-0x000001f3ea7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ea5000-0x000001f3ea6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ea4000-0x000001f3ea5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ea3000-0x000001f3ea4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ea2000-0x000001f3ea3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ea1000-0x000001f3ea2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ea0000-0x000001f3ea1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e9f000-0x000001f3ea0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e9e000-0x000001f3e9f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e9d000-0x000001f3e9e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e9c000-0x000001f3e9d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e9b000-0x000001f3e9c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e9a000-0x000001f3e9b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e99000-0x000001f3e9a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e98000-0x000001f3e99000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e97000-0x000001f3e98000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e96000-0x000001f3e97000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e95000-0x000001f3e96000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e94000-0x000001f3e95000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e93000-0x000001f3e94000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e92000-0x000001f3e93000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e91000-0x000001f3e92000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e90000-0x000001f3e91000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e8f000-0x000001f3e90000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e8e000-0x000001f3e8f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e8d000-0x000001f3e8e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e8c000-0x000001f3e8d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e8b000-0x000001f3e8c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e8a000-0x000001f3e8b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e89000-0x000001f3e8a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e88000-0x000001f3e89000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e87000-0x000001f3e88000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e86000-0x000001f3e87000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e85000-0x000001f3e86000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e84000-0x000001f3e85000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e83000-0x000001f3e84000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e82000-0x000001f3e83000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e81000-0x000001f3e82000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e80000-0x000001f3e81000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e7f000-0x000001f3e80000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e7e000-0x000001f3e7f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e7d000-0x000001f3e7e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e7c000-0x000001f3e7d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e7b000-0x000001f3e7c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e7a000-0x000001f3e7b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e79000-0x000001f3e7a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e78000-0x000001f3e79000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e77000-0x000001f3e78000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e76000-0x000001f3e77000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e75000-0x000001f3e76000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e74000-0x000001f3e75000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e73000-0x000001f3e74000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e72000-0x000001f3e73000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e71000-0x000001f3e72000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e70000-0x000001f3e71000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e6f000-0x000001f3e70000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e6e000-0x000001f3e6f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e6d000-0x000001f3e6e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e6c000-0x000001f3e6d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e6b000-0x000001f3e6c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e6a000-0x000001f3e6b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e69000-0x000001f3e6a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e68000-0x000001f3e69000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e67000-0x000001f3e68000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e66000-0x000001f3e67000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e65000-0x000001f3e66000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e64000-0x000001f3e65000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e63000-0x000001f3e64000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e62000-0x000001f3e63000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e61000-0x000001f3e62000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e60000-0x000001f3e61000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e5f000-0x000001f3e60000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e5e000-0x000001f3e5f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e5d000-0x000001f3e5e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e5c000-0x000001f3e5d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e5b000-0x000001f3e5c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e5a000-0x000001f3e5b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e59000-0x000001f3e5a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e58000-0x000001f3e59000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e57000-0x000001f3e58000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e56000-0x000001f3e57000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e55000-0x000001f3e56000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e54000-0x000001f3e55000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e53000-0x000001f3e54000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e52000-0x000001f3e53000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e51000-0x000001f3e52000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e50000-0x000001f3e51000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e4f000-0x000001f3e50000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e4e000-0x000001f3e4f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e4d000-0x000001f3e4e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e4c000-0x000001f3e4d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e4b000-0x000001f3e4c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e4a000-0x000001f3e4b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e49000-0x000001f3e4a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e48000-0x000001f3e49000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e47000-0x000001f3e48000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e46000-0x000001f3e47000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e45000-0x000001f3e46000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e44000-0x000001f3e45000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e43000-0x000001f3e44000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e42000-0x000001f3e43000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e41000-0x000001f3e42000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e40000-0x000001f3e41000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e3f000-0x000001f3e40000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e3e000-0x000001f3e3f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e3d000-0x000001f3e3e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e3c000-0x000001f3e3d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e3b000-0x000001f3e3c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e3a000-0x000001f3e3b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e39000-0x000001f3e3a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e38000-0x000001f3e39000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e37000-0x000001f3e38000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e36000-0x000001f3e37000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e35000-0x000001f3e36000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e34000-0x000001f3e35000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e33000-0x000001f3e34000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e32000-0x000001f3e33000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e31000-0x000001f3e32000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e30000-0x000001f3e31000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e2f000-0x000001f3e30000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e2e000-0x000001f3e2f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e2d000-0x000001f3e2e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e2c000-0x000001f3e2d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e2b000-0x000001f3e2c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e2a000-0x000001f3e2b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e29000-0x000001f3e2a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e28000-0x000001f3e29000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e27000-0x000001f3e28000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e26000-0x000001f3e27000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e25000-0x000001f3e26000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e24000-0x000001f3e25000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e23000-0x000001f3e24000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e22000-0x000001f3e23000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e21000-0x000001f3e22000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e20000-0x000001f3e21000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e1f000-0x000001f3e20000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e1e000-0x000001f3e1f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e1d000-0x000001f3e1e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e1c000-0x000001f3e1d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e1b000-0x000001f3e1c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e1a000-0x000001f3e1b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e19000-0x000001f3e1a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e18000-0x000001f3e19000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e17000-0x000001f3e18000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e16000-0x000001f3e17000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e15000-0x000001f3e16000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e14000-0x000001f3e15000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e13000-0x000001f3e14000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e12000-0x000001f3e13000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e11000-0x000001f3e12000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e10000-0x000001f3e11000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e0f000-0x000001f3e10000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e0e000-0x000001f3e0f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e0d000-0x000001f3e0e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e0c000-0x000001f3e0d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e0b000-0x000001f3e0c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e0a000-0x000001f3e0b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e09000-0x000001f3e0a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e08000-0x000001f3e09000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e07000-0x000001f3e08000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e06000-0x000001f3e07000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e05000-0x000001f3e06000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e04000-0x000001f3e05000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e03000-0x000001f3e04000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e02000-0x000001f3e03000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e01000-0x000001f3e02000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3e00000-0x000001f3e01000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dff000-0x000001f3e00000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dfe000-0x000001f3dff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dfd000-0x000001f3dfe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dfc000-0x000001f3dfd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dfb000-0x000001f3dfc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dfa000-0x000001f3dfb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3df9000-0x000001f3dfa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3df8000-0x000001f3df9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3df7000-0x000001f3df8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3df6000-0x000001f3df7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3df5000-0x000001f3df6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3df4000-0x000001f3df5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3df3000-0x000001f3df4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3df2000-0x000001f3df3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3df1000-0x000001f3df2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3df0000-0x000001f3df1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3def000-0x000001f3df0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dee000-0x000001f3def000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ded000-0x000001f3dee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dec000-0x000001f3ded000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3deb000-0x000001f3dec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dea000-0x000001f3deb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3de9000-0x000001f3dea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3de8000-0x000001f3de9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3de7000-0x000001f3de8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3de6000-0x000001f3de7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3de5000-0x000001f3de6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3de4000-0x000001f3de5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3de3000-0x000001f3de4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3de2000-0x000001f3de3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3de1000-0x000001f3de2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3de0000-0x000001f3de1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ddf000-0x000001f3de0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dde000-0x000001f3ddf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ddd000-0x000001f3dde000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ddc000-0x000001f3ddd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ddb000-0x000001f3ddc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dda000-0x000001f3ddb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dd9000-0x000001f3dda000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dd8000-0x000001f3dd9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dd7000-0x000001f3dd8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dd6000-0x000001f3dd7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dd5000-0x000001f3dd6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dd4000-0x000001f3dd5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dd3000-0x000001f3dd4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dd2000-0x000001f3dd3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dd1000-0x000001f3dd2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dd0000-0x000001f3dd1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dcf000-0x000001f3dd0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dce000-0x000001f3dcf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dcd000-0x000001f3dce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dcc000-0x000001f3dcd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dcb000-0x000001f3dcc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dca000-0x000001f3dcb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dc9000-0x000001f3dca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dc8000-0x000001f3dc9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dc7000-0x000001f3dc8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dc6000-0x000001f3dc7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dc5000-0x000001f3dc6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dc4000-0x000001f3dc5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dc3000-0x000001f3dc4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dc2000-0x000001f3dc3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dc1000-0x000001f3dc2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dc0000-0x000001f3dc1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dbf000-0x000001f3dc0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dbe000-0x000001f3dbf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dbd000-0x000001f3dbe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dbc000-0x000001f3dbd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dbb000-0x000001f3dbc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dba000-0x000001f3dbb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3db9000-0x000001f3dba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3db8000-0x000001f3db9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3db7000-0x000001f3db8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3db6000-0x000001f3db7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3db5000-0x000001f3db6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3db4000-0x000001f3db5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3db3000-0x000001f3db4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3db2000-0x000001f3db3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3db1000-0x000001f3db2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3db0000-0x000001f3db1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3daf000-0x000001f3db0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dae000-0x000001f3daf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dad000-0x000001f3dae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dac000-0x000001f3dad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3dab000-0x000001f3dac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3daa000-0x000001f3dab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3da9000-0x000001f3daa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3da8000-0x000001f3da9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3da7000-0x000001f3da8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3da6000-0x000001f3da7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3da5000-0x000001f3da6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3da4000-0x000001f3da5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3da3000-0x000001f3da4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3da2000-0x000001f3da3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3da1000-0x000001f3da2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3da0000-0x000001f3da1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d9f000-0x000001f3da0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d9e000-0x000001f3d9f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d9d000-0x000001f3d9e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d9c000-0x000001f3d9d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d9b000-0x000001f3d9c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d9a000-0x000001f3d9b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d99000-0x000001f3d9a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d98000-0x000001f3d99000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d97000-0x000001f3d98000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d96000-0x000001f3d97000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d95000-0x000001f3d96000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d94000-0x000001f3d95000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d93000-0x000001f3d94000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d92000-0x000001f3d93000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d91000-0x000001f3d92000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d90000-0x000001f3d91000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d8f000-0x000001f3d90000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d8e000-0x000001f3d8f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d8d000-0x000001f3d8e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d8c000-0x000001f3d8d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d8b000-0x000001f3d8c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d8a000-0x000001f3d8b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d89000-0x000001f3d8a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d88000-0x000001f3d89000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d87000-0x000001f3d88000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d86000-0x000001f3d87000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d85000-0x000001f3d86000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d84000-0x000001f3d85000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d83000-0x000001f3d84000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d82000-0x000001f3d83000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d81000-0x000001f3d82000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d80000-0x000001f3d81000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d7f000-0x000001f3d80000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d7e000-0x000001f3d7f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d7d000-0x000001f3d7e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d7c000-0x000001f3d7d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d7b000-0x000001f3d7c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d7a000-0x000001f3d7b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d79000-0x000001f3d7a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d78000-0x000001f3d79000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d77000-0x000001f3d78000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d76000-0x000001f3d77000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d75000-0x000001f3d76000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d74000-0x000001f3d75000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d73000-0x000001f3d74000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d72000-0x000001f3d73000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d71000-0x000001f3d72000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d70000-0x000001f3d71000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d6f000-0x000001f3d70000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d6e000-0x000001f3d6f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d6d000-0x000001f3d6e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d6c000-0x000001f3d6d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d6b000-0x000001f3d6c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d6a000-0x000001f3d6b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d69000-0x000001f3d6a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d68000-0x000001f3d69000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d67000-0x000001f3d68000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d66000-0x000001f3d67000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d65000-0x000001f3d66000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d64000-0x000001f3d65000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d63000-0x000001f3d64000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d62000-0x000001f3d63000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d61000-0x000001f3d62000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d60000-0x000001f3d61000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d5f000-0x000001f3d60000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d5e000-0x000001f3d5f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d5d000-0x000001f3d5e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d5c000-0x000001f3d5d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d5b000-0x000001f3d5c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d5a000-0x000001f3d5b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d59000-0x000001f3d5a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d58000-0x000001f3d59000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d57000-0x000001f3d58000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d56000-0x000001f3d57000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d55000-0x000001f3d56000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d54000-0x000001f3d55000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d53000-0x000001f3d54000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d52000-0x000001f3d53000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d51000-0x000001f3d52000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d50000-0x000001f3d51000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d4f000-0x000001f3d50000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d4e000-0x000001f3d4f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d4d000-0x000001f3d4e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d4c000-0x000001f3d4d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d4b000-0x000001f3d4c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d4a000-0x000001f3d4b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d49000-0x000001f3d4a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d48000-0x000001f3d49000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d47000-0x000001f3d48000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d46000-0x000001f3d47000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d45000-0x000001f3d46000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d44000-0x000001f3d45000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d43000-0x000001f3d44000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d42000-0x000001f3d43000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d41000-0x000001f3d42000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d40000-0x000001f3d41000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d3f000-0x000001f3d40000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d3e000-0x000001f3d3f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d3d000-0x000001f3d3e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d3c000-0x000001f3d3d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d3b000-0x000001f3d3c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d3a000-0x000001f3d3b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d39000-0x000001f3d3a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d38000-0x000001f3d39000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d37000-0x000001f3d38000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d36000-0x000001f3d37000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d35000-0x000001f3d36000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d34000-0x000001f3d35000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d33000-0x000001f3d34000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d32000-0x000001f3d33000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d31000-0x000001f3d32000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d30000-0x000001f3d31000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d2f000-0x000001f3d30000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d2e000-0x000001f3d2f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d2d000-0x000001f3d2e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d2c000-0x000001f3d2d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d2b000-0x000001f3d2c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d2a000-0x000001f3d2b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d29000-0x000001f3d2a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d28000-0x000001f3d29000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d27000-0x000001f3d28000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d26000-0x000001f3d27000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d25000-0x000001f3d26000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d24000-0x000001f3d25000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d23000-0x000001f3d24000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d22000-0x000001f3d23000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d21000-0x000001f3d22000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d20000-0x000001f3d21000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d1f000-0x000001f3d20000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d1e000-0x000001f3d1f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d1d000-0x000001f3d1e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d1c000-0x000001f3d1d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d1b000-0x000001f3d1c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d1a000-0x000001f3d1b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d19000-0x000001f3d1a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d18000-0x000001f3d19000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d17000-0x000001f3d18000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d16000-0x000001f3d17000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d15000-0x000001f3d16000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d14000-0x000001f3d15000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d13000-0x000001f3d14000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d12000-0x000001f3d13000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d11000-0x000001f3d12000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d10000-0x000001f3d11000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d0f000-0x000001f3d10000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d0e000-0x000001f3d0f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d0d000-0x000001f3d0e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d0c000-0x000001f3d0d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d0b000-0x000001f3d0c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d0a000-0x000001f3d0b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d09000-0x000001f3d0a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d08000-0x000001f3d09000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d07000-0x000001f3d08000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d06000-0x000001f3d07000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d05000-0x000001f3d06000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d04000-0x000001f3d05000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d03000-0x000001f3d04000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d02000-0x000001f3d03000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d01000-0x000001f3d02000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3d00000-0x000001f3d01000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cff000-0x000001f3d00000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cfe000-0x000001f3cff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cfd000-0x000001f3cfe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cfc000-0x000001f3cfd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cfb000-0x000001f3cfc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cfa000-0x000001f3cfb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cf9000-0x000001f3cfa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cf8000-0x000001f3cf9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cf7000-0x000001f3cf8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cf6000-0x000001f3cf7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cf5000-0x000001f3cf6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cf4000-0x000001f3cf5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cf3000-0x000001f3cf4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cf2000-0x000001f3cf3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cf1000-0x000001f3cf2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cf0000-0x000001f3cf1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cef000-0x000001f3cf0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cee000-0x000001f3cef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ced000-0x000001f3cee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cec000-0x000001f3ced000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ceb000-0x000001f3cec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cea000-0x000001f3ceb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ce9000-0x000001f3cea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ce8000-0x000001f3ce9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ce7000-0x000001f3ce8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ce6000-0x000001f3ce7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ce5000-0x000001f3ce6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ce4000-0x000001f3ce5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ce3000-0x000001f3ce4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ce2000-0x000001f3ce3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ce1000-0x000001f3ce2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ce0000-0x000001f3ce1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cdf000-0x000001f3ce0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cde000-0x000001f3cdf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cdd000-0x000001f3cde000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cdc000-0x000001f3cdd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cdb000-0x000001f3cdc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cda000-0x000001f3cdb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cd9000-0x000001f3cda000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cd8000-0x000001f3cd9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cd7000-0x000001f3cd8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cd6000-0x000001f3cd7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cd5000-0x000001f3cd6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cd4000-0x000001f3cd5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cd3000-0x000001f3cd4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cd2000-0x000001f3cd3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cd1000-0x000001f3cd2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cd0000-0x000001f3cd1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ccf000-0x000001f3cd0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cce000-0x000001f3ccf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ccd000-0x000001f3cce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ccc000-0x000001f3ccd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ccb000-0x000001f3ccc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cca000-0x000001f3ccb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cc9000-0x000001f3cca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cc8000-0x000001f3cc9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cc7000-0x000001f3cc8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cc6000-0x000001f3cc7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cc5000-0x000001f3cc6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cc4000-0x000001f3cc5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cc3000-0x000001f3cc4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cc2000-0x000001f3cc3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cc1000-0x000001f3cc2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cc0000-0x000001f3cc1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cbf000-0x000001f3cc0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cbe000-0x000001f3cbf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cbd000-0x000001f3cbe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cbc000-0x000001f3cbd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cbb000-0x000001f3cbc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cba000-0x000001f3cbb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cb9000-0x000001f3cba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cb8000-0x000001f3cb9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cb7000-0x000001f3cb8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cb6000-0x000001f3cb7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cb5000-0x000001f3cb6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cb4000-0x000001f3cb5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cb3000-0x000001f3cb4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cb2000-0x000001f3cb3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cb1000-0x000001f3cb2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cb0000-0x000001f3cb1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3caf000-0x000001f3cb0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cae000-0x000001f3caf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cad000-0x000001f3cae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cac000-0x000001f3cad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3cab000-0x000001f3cac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3caa000-0x000001f3cab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ca9000-0x000001f3caa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ca8000-0x000001f3ca9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ca7000-0x000001f3ca8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ca6000-0x000001f3ca7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ca5000-0x000001f3ca6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ca4000-0x000001f3ca5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ca3000-0x000001f3ca4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ca2000-0x000001f3ca3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ca1000-0x000001f3ca2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ca0000-0x000001f3ca1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c9f000-0x000001f3ca0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c9e000-0x000001f3c9f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c9d000-0x000001f3c9e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c9c000-0x000001f3c9d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c9b000-0x000001f3c9c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c9a000-0x000001f3c9b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c99000-0x000001f3c9a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c98000-0x000001f3c99000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c97000-0x000001f3c98000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c96000-0x000001f3c97000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c95000-0x000001f3c96000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c94000-0x000001f3c95000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c93000-0x000001f3c94000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c92000-0x000001f3c93000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c91000-0x000001f3c92000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c90000-0x000001f3c91000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c8f000-0x000001f3c90000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c8e000-0x000001f3c8f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c8d000-0x000001f3c8e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c8c000-0x000001f3c8d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c8b000-0x000001f3c8c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c8a000-0x000001f3c8b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c89000-0x000001f3c8a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c88000-0x000001f3c89000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c87000-0x000001f3c88000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c86000-0x000001f3c87000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c85000-0x000001f3c86000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c84000-0x000001f3c85000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c83000-0x000001f3c84000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c82000-0x000001f3c83000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c81000-0x000001f3c82000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c80000-0x000001f3c81000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c7f000-0x000001f3c80000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c7e000-0x000001f3c7f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c7d000-0x000001f3c7e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c7c000-0x000001f3c7d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c7b000-0x000001f3c7c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c7a000-0x000001f3c7b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c79000-0x000001f3c7a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c78000-0x000001f3c79000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c77000-0x000001f3c78000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c76000-0x000001f3c77000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c75000-0x000001f3c76000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c74000-0x000001f3c75000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c73000-0x000001f3c74000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c72000-0x000001f3c73000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c71000-0x000001f3c72000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c70000-0x000001f3c71000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c6f000-0x000001f3c70000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c6e000-0x000001f3c6f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c6d000-0x000001f3c6e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c6c000-0x000001f3c6d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c6b000-0x000001f3c6c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c6a000-0x000001f3c6b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c69000-0x000001f3c6a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c68000-0x000001f3c69000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c67000-0x000001f3c68000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c66000-0x000001f3c67000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c65000-0x000001f3c66000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c64000-0x000001f3c65000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c63000-0x000001f3c64000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c62000-0x000001f3c63000] alloc_low_pages+0x103/0x130
[    0.000000] init_memory_mapping: [mem 0x00100000-0x17fffffff]
[    0.000000]  [mem 0x00100000-0x17fffffff] page 4k
[    0.000000] memblock_reserve: [0x000001f3c61000-0x000001f3c62000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c60000-0x000001f3c61000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c5f000-0x000001f3c60000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c5e000-0x000001f3c5f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c5d000-0x000001f3c5e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c5c000-0x000001f3c5d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c5b000-0x000001f3c5c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c5a000-0x000001f3c5b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c59000-0x000001f3c5a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c58000-0x000001f3c59000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c57000-0x000001f3c58000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c56000-0x000001f3c57000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c55000-0x000001f3c56000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c54000-0x000001f3c55000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c53000-0x000001f3c54000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c52000-0x000001f3c53000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c51000-0x000001f3c52000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c50000-0x000001f3c51000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c4f000-0x000001f3c50000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c4e000-0x000001f3c4f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c4d000-0x000001f3c4e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c4c000-0x000001f3c4d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c4b000-0x000001f3c4c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c4a000-0x000001f3c4b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c49000-0x000001f3c4a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c48000-0x000001f3c49000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c47000-0x000001f3c48000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c46000-0x000001f3c47000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c45000-0x000001f3c46000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c44000-0x000001f3c45000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c43000-0x000001f3c44000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c42000-0x000001f3c43000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c41000-0x000001f3c42000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c40000-0x000001f3c41000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c3f000-0x000001f3c40000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c3e000-0x000001f3c3f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c3d000-0x000001f3c3e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c3c000-0x000001f3c3d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c3b000-0x000001f3c3c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c3a000-0x000001f3c3b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c39000-0x000001f3c3a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c38000-0x000001f3c39000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c37000-0x000001f3c38000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c36000-0x000001f3c37000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c35000-0x000001f3c36000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c34000-0x000001f3c35000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c33000-0x000001f3c34000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c32000-0x000001f3c33000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c31000-0x000001f3c32000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c30000-0x000001f3c31000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c2f000-0x000001f3c30000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c2e000-0x000001f3c2f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c2d000-0x000001f3c2e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c2c000-0x000001f3c2d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c2b000-0x000001f3c2c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c2a000-0x000001f3c2b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c29000-0x000001f3c2a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c28000-0x000001f3c29000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c27000-0x000001f3c28000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c26000-0x000001f3c27000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c25000-0x000001f3c26000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c24000-0x000001f3c25000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c23000-0x000001f3c24000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c22000-0x000001f3c23000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c21000-0x000001f3c22000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c20000-0x000001f3c21000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c1f000-0x000001f3c20000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c1e000-0x000001f3c1f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c1d000-0x000001f3c1e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c1c000-0x000001f3c1d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c1b000-0x000001f3c1c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c1a000-0x000001f3c1b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c19000-0x000001f3c1a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c18000-0x000001f3c19000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c17000-0x000001f3c18000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c16000-0x000001f3c17000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c15000-0x000001f3c16000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c14000-0x000001f3c15000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c13000-0x000001f3c14000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c12000-0x000001f3c13000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c11000-0x000001f3c12000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c10000-0x000001f3c11000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c0f000-0x000001f3c10000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c0e000-0x000001f3c0f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c0d000-0x000001f3c0e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c0c000-0x000001f3c0d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c0b000-0x000001f3c0c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c0a000-0x000001f3c0b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c09000-0x000001f3c0a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c08000-0x000001f3c09000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c07000-0x000001f3c08000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c06000-0x000001f3c07000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c05000-0x000001f3c06000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c04000-0x000001f3c05000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c03000-0x000001f3c04000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c02000-0x000001f3c03000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c01000-0x000001f3c02000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3c00000-0x000001f3c01000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bff000-0x000001f3c00000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bfe000-0x000001f3bff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bfd000-0x000001f3bfe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bfc000-0x000001f3bfd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bfb000-0x000001f3bfc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bfa000-0x000001f3bfb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bf9000-0x000001f3bfa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bf8000-0x000001f3bf9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bf7000-0x000001f3bf8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bf6000-0x000001f3bf7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bf5000-0x000001f3bf6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bf4000-0x000001f3bf5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bf3000-0x000001f3bf4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bf2000-0x000001f3bf3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bf1000-0x000001f3bf2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bf0000-0x000001f3bf1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bef000-0x000001f3bf0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bee000-0x000001f3bef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bed000-0x000001f3bee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bec000-0x000001f3bed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3beb000-0x000001f3bec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bea000-0x000001f3beb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3be9000-0x000001f3bea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3be8000-0x000001f3be9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3be7000-0x000001f3be8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3be6000-0x000001f3be7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3be5000-0x000001f3be6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3be4000-0x000001f3be5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3be3000-0x000001f3be4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3be2000-0x000001f3be3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3be1000-0x000001f3be2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3be0000-0x000001f3be1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bdf000-0x000001f3be0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bde000-0x000001f3bdf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bdd000-0x000001f3bde000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bdc000-0x000001f3bdd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bdb000-0x000001f3bdc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bda000-0x000001f3bdb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bd9000-0x000001f3bda000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bd8000-0x000001f3bd9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bd7000-0x000001f3bd8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bd6000-0x000001f3bd7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bd5000-0x000001f3bd6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bd4000-0x000001f3bd5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bd3000-0x000001f3bd4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bd2000-0x000001f3bd3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bd1000-0x000001f3bd2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bd0000-0x000001f3bd1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bcf000-0x000001f3bd0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bce000-0x000001f3bcf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bcd000-0x000001f3bce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bcc000-0x000001f3bcd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bcb000-0x000001f3bcc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bca000-0x000001f3bcb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bc9000-0x000001f3bca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bc8000-0x000001f3bc9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bc7000-0x000001f3bc8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bc6000-0x000001f3bc7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bc5000-0x000001f3bc6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bc4000-0x000001f3bc5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bc3000-0x000001f3bc4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bc2000-0x000001f3bc3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bc1000-0x000001f3bc2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bc0000-0x000001f3bc1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bbf000-0x000001f3bc0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bbe000-0x000001f3bbf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bbd000-0x000001f3bbe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bbc000-0x000001f3bbd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bbb000-0x000001f3bbc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bba000-0x000001f3bbb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bb9000-0x000001f3bba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bb8000-0x000001f3bb9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bb7000-0x000001f3bb8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bb6000-0x000001f3bb7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bb5000-0x000001f3bb6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bb4000-0x000001f3bb5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bb3000-0x000001f3bb4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bb2000-0x000001f3bb3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bb1000-0x000001f3bb2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bb0000-0x000001f3bb1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3baf000-0x000001f3bb0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bae000-0x000001f3baf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bad000-0x000001f3bae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bac000-0x000001f3bad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3bab000-0x000001f3bac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3baa000-0x000001f3bab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ba9000-0x000001f3baa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ba8000-0x000001f3ba9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ba7000-0x000001f3ba8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ba6000-0x000001f3ba7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ba5000-0x000001f3ba6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ba4000-0x000001f3ba5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ba3000-0x000001f3ba4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ba2000-0x000001f3ba3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ba1000-0x000001f3ba2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ba0000-0x000001f3ba1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b9f000-0x000001f3ba0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b9e000-0x000001f3b9f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b9d000-0x000001f3b9e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b9c000-0x000001f3b9d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b9b000-0x000001f3b9c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b9a000-0x000001f3b9b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b99000-0x000001f3b9a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b98000-0x000001f3b99000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b97000-0x000001f3b98000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b96000-0x000001f3b97000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b95000-0x000001f3b96000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b94000-0x000001f3b95000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b93000-0x000001f3b94000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b92000-0x000001f3b93000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b91000-0x000001f3b92000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b90000-0x000001f3b91000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b8f000-0x000001f3b90000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b8e000-0x000001f3b8f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b8d000-0x000001f3b8e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b8c000-0x000001f3b8d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b8b000-0x000001f3b8c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b8a000-0x000001f3b8b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b89000-0x000001f3b8a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b88000-0x000001f3b89000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b87000-0x000001f3b88000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b86000-0x000001f3b87000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b85000-0x000001f3b86000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b84000-0x000001f3b85000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b83000-0x000001f3b84000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b82000-0x000001f3b83000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b81000-0x000001f3b82000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b80000-0x000001f3b81000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b7f000-0x000001f3b80000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b7e000-0x000001f3b7f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b7d000-0x000001f3b7e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b7c000-0x000001f3b7d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b7b000-0x000001f3b7c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b7a000-0x000001f3b7b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b79000-0x000001f3b7a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b78000-0x000001f3b79000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b77000-0x000001f3b78000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b76000-0x000001f3b77000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b75000-0x000001f3b76000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b74000-0x000001f3b75000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b73000-0x000001f3b74000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b72000-0x000001f3b73000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b71000-0x000001f3b72000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b70000-0x000001f3b71000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b6f000-0x000001f3b70000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b6e000-0x000001f3b6f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b6d000-0x000001f3b6e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b6c000-0x000001f3b6d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b6b000-0x000001f3b6c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b6a000-0x000001f3b6b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b69000-0x000001f3b6a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b68000-0x000001f3b69000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b67000-0x000001f3b68000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b66000-0x000001f3b67000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b65000-0x000001f3b66000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b64000-0x000001f3b65000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b63000-0x000001f3b64000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b62000-0x000001f3b63000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b61000-0x000001f3b62000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b60000-0x000001f3b61000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b5f000-0x000001f3b60000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b5e000-0x000001f3b5f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b5d000-0x000001f3b5e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b5c000-0x000001f3b5d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b5b000-0x000001f3b5c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b5a000-0x000001f3b5b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b59000-0x000001f3b5a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b58000-0x000001f3b59000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b57000-0x000001f3b58000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b56000-0x000001f3b57000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b55000-0x000001f3b56000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b54000-0x000001f3b55000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b53000-0x000001f3b54000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b52000-0x000001f3b53000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b51000-0x000001f3b52000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b50000-0x000001f3b51000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b4f000-0x000001f3b50000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b4e000-0x000001f3b4f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b4d000-0x000001f3b4e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b4c000-0x000001f3b4d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b4b000-0x000001f3b4c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b4a000-0x000001f3b4b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b49000-0x000001f3b4a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b48000-0x000001f3b49000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b47000-0x000001f3b48000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b46000-0x000001f3b47000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b45000-0x000001f3b46000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b44000-0x000001f3b45000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b43000-0x000001f3b44000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b42000-0x000001f3b43000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b41000-0x000001f3b42000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b40000-0x000001f3b41000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b3f000-0x000001f3b40000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b3e000-0x000001f3b3f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b3d000-0x000001f3b3e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b3c000-0x000001f3b3d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b3b000-0x000001f3b3c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b3a000-0x000001f3b3b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b39000-0x000001f3b3a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b38000-0x000001f3b39000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b37000-0x000001f3b38000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b36000-0x000001f3b37000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b35000-0x000001f3b36000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b34000-0x000001f3b35000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b33000-0x000001f3b34000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b32000-0x000001f3b33000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b31000-0x000001f3b32000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b30000-0x000001f3b31000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b2f000-0x000001f3b30000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b2e000-0x000001f3b2f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b2d000-0x000001f3b2e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b2c000-0x000001f3b2d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b2b000-0x000001f3b2c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b2a000-0x000001f3b2b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b29000-0x000001f3b2a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b28000-0x000001f3b29000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b27000-0x000001f3b28000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b26000-0x000001f3b27000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b25000-0x000001f3b26000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b24000-0x000001f3b25000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b23000-0x000001f3b24000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b22000-0x000001f3b23000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b21000-0x000001f3b22000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b20000-0x000001f3b21000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b1f000-0x000001f3b20000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b1e000-0x000001f3b1f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b1d000-0x000001f3b1e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b1c000-0x000001f3b1d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b1b000-0x000001f3b1c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b1a000-0x000001f3b1b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b19000-0x000001f3b1a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b18000-0x000001f3b19000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b17000-0x000001f3b18000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b16000-0x000001f3b17000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b15000-0x000001f3b16000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b14000-0x000001f3b15000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b13000-0x000001f3b14000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b12000-0x000001f3b13000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b11000-0x000001f3b12000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b10000-0x000001f3b11000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b0f000-0x000001f3b10000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b0e000-0x000001f3b0f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b0d000-0x000001f3b0e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b0c000-0x000001f3b0d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b0b000-0x000001f3b0c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b0a000-0x000001f3b0b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b09000-0x000001f3b0a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b08000-0x000001f3b09000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b07000-0x000001f3b08000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b06000-0x000001f3b07000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b05000-0x000001f3b06000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b04000-0x000001f3b05000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b03000-0x000001f3b04000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b02000-0x000001f3b03000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b01000-0x000001f3b02000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3b00000-0x000001f3b01000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aff000-0x000001f3b00000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3afe000-0x000001f3aff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3afd000-0x000001f3afe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3afc000-0x000001f3afd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3afb000-0x000001f3afc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3afa000-0x000001f3afb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3af9000-0x000001f3afa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3af8000-0x000001f3af9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3af7000-0x000001f3af8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3af6000-0x000001f3af7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3af5000-0x000001f3af6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3af4000-0x000001f3af5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3af3000-0x000001f3af4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3af2000-0x000001f3af3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3af1000-0x000001f3af2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3af0000-0x000001f3af1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aef000-0x000001f3af0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aee000-0x000001f3aef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aed000-0x000001f3aee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aec000-0x000001f3aed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aeb000-0x000001f3aec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aea000-0x000001f3aeb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ae9000-0x000001f3aea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ae8000-0x000001f3ae9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ae7000-0x000001f3ae8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ae6000-0x000001f3ae7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ae5000-0x000001f3ae6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ae4000-0x000001f3ae5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ae3000-0x000001f3ae4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ae2000-0x000001f3ae3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ae1000-0x000001f3ae2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ae0000-0x000001f3ae1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3adf000-0x000001f3ae0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ade000-0x000001f3adf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3add000-0x000001f3ade000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3adc000-0x000001f3add000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3adb000-0x000001f3adc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ada000-0x000001f3adb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ad9000-0x000001f3ada000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ad8000-0x000001f3ad9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ad7000-0x000001f3ad8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ad6000-0x000001f3ad7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ad5000-0x000001f3ad6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ad4000-0x000001f3ad5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ad3000-0x000001f3ad4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ad2000-0x000001f3ad3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ad1000-0x000001f3ad2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ad0000-0x000001f3ad1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3acf000-0x000001f3ad0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ace000-0x000001f3acf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3acd000-0x000001f3ace000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3acc000-0x000001f3acd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3acb000-0x000001f3acc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aca000-0x000001f3acb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ac9000-0x000001f3aca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ac8000-0x000001f3ac9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ac7000-0x000001f3ac8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ac6000-0x000001f3ac7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ac5000-0x000001f3ac6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ac4000-0x000001f3ac5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ac3000-0x000001f3ac4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ac2000-0x000001f3ac3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ac1000-0x000001f3ac2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ac0000-0x000001f3ac1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3abf000-0x000001f3ac0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3abe000-0x000001f3abf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3abd000-0x000001f3abe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3abc000-0x000001f3abd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3abb000-0x000001f3abc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aba000-0x000001f3abb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ab9000-0x000001f3aba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ab8000-0x000001f3ab9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ab7000-0x000001f3ab8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ab6000-0x000001f3ab7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ab5000-0x000001f3ab6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ab4000-0x000001f3ab5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ab3000-0x000001f3ab4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ab2000-0x000001f3ab3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ab1000-0x000001f3ab2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3ab0000-0x000001f3ab1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aaf000-0x000001f3ab0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aae000-0x000001f3aaf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aad000-0x000001f3aae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aac000-0x000001f3aad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aab000-0x000001f3aac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aaa000-0x000001f3aab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aa9000-0x000001f3aaa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aa8000-0x000001f3aa9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aa7000-0x000001f3aa8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aa6000-0x000001f3aa7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aa5000-0x000001f3aa6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aa4000-0x000001f3aa5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aa3000-0x000001f3aa4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aa2000-0x000001f3aa3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aa1000-0x000001f3aa2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3aa0000-0x000001f3aa1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a9f000-0x000001f3aa0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a9e000-0x000001f3a9f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a9d000-0x000001f3a9e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a9c000-0x000001f3a9d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a9b000-0x000001f3a9c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a9a000-0x000001f3a9b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a99000-0x000001f3a9a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a98000-0x000001f3a99000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a97000-0x000001f3a98000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a96000-0x000001f3a97000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a95000-0x000001f3a96000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a94000-0x000001f3a95000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a93000-0x000001f3a94000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a92000-0x000001f3a93000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a91000-0x000001f3a92000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a90000-0x000001f3a91000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a8f000-0x000001f3a90000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a8e000-0x000001f3a8f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a8d000-0x000001f3a8e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a8c000-0x000001f3a8d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a8b000-0x000001f3a8c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a8a000-0x000001f3a8b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a89000-0x000001f3a8a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a88000-0x000001f3a89000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a87000-0x000001f3a88000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a86000-0x000001f3a87000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a85000-0x000001f3a86000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a84000-0x000001f3a85000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a83000-0x000001f3a84000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a82000-0x000001f3a83000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a81000-0x000001f3a82000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a80000-0x000001f3a81000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a7f000-0x000001f3a80000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a7e000-0x000001f3a7f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a7d000-0x000001f3a7e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a7c000-0x000001f3a7d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a7b000-0x000001f3a7c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a7a000-0x000001f3a7b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a79000-0x000001f3a7a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a78000-0x000001f3a79000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a77000-0x000001f3a78000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a76000-0x000001f3a77000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a75000-0x000001f3a76000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a74000-0x000001f3a75000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a73000-0x000001f3a74000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a72000-0x000001f3a73000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a71000-0x000001f3a72000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a70000-0x000001f3a71000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a6f000-0x000001f3a70000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a6e000-0x000001f3a6f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a6d000-0x000001f3a6e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a6c000-0x000001f3a6d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a6b000-0x000001f3a6c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a6a000-0x000001f3a6b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a69000-0x000001f3a6a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a68000-0x000001f3a69000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a67000-0x000001f3a68000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a66000-0x000001f3a67000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a65000-0x000001f3a66000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a64000-0x000001f3a65000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a63000-0x000001f3a64000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a62000-0x000001f3a63000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a61000-0x000001f3a62000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a60000-0x000001f3a61000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a5f000-0x000001f3a60000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a5e000-0x000001f3a5f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a5d000-0x000001f3a5e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a5c000-0x000001f3a5d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a5b000-0x000001f3a5c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a5a000-0x000001f3a5b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a59000-0x000001f3a5a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a58000-0x000001f3a59000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a57000-0x000001f3a58000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a56000-0x000001f3a57000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a55000-0x000001f3a56000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a54000-0x000001f3a55000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a53000-0x000001f3a54000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a52000-0x000001f3a53000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a51000-0x000001f3a52000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a50000-0x000001f3a51000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a4f000-0x000001f3a50000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a4e000-0x000001f3a4f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a4d000-0x000001f3a4e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a4c000-0x000001f3a4d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a4b000-0x000001f3a4c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a4a000-0x000001f3a4b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a49000-0x000001f3a4a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a48000-0x000001f3a49000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a47000-0x000001f3a48000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a46000-0x000001f3a47000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a45000-0x000001f3a46000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a44000-0x000001f3a45000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a43000-0x000001f3a44000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a42000-0x000001f3a43000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a41000-0x000001f3a42000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a40000-0x000001f3a41000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a3f000-0x000001f3a40000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a3e000-0x000001f3a3f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a3d000-0x000001f3a3e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a3c000-0x000001f3a3d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a3b000-0x000001f3a3c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a3a000-0x000001f3a3b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a39000-0x000001f3a3a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a38000-0x000001f3a39000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a37000-0x000001f3a38000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a36000-0x000001f3a37000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a35000-0x000001f3a36000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a34000-0x000001f3a35000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a33000-0x000001f3a34000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a32000-0x000001f3a33000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a31000-0x000001f3a32000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a30000-0x000001f3a31000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a2f000-0x000001f3a30000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a2e000-0x000001f3a2f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a2d000-0x000001f3a2e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a2c000-0x000001f3a2d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a2b000-0x000001f3a2c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a2a000-0x000001f3a2b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a29000-0x000001f3a2a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a28000-0x000001f3a29000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a27000-0x000001f3a28000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a26000-0x000001f3a27000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a25000-0x000001f3a26000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a24000-0x000001f3a25000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a23000-0x000001f3a24000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a22000-0x000001f3a23000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a21000-0x000001f3a22000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a20000-0x000001f3a21000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a1f000-0x000001f3a20000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a1e000-0x000001f3a1f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a1d000-0x000001f3a1e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a1c000-0x000001f3a1d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a1b000-0x000001f3a1c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a1a000-0x000001f3a1b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a19000-0x000001f3a1a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a18000-0x000001f3a19000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a17000-0x000001f3a18000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a16000-0x000001f3a17000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a15000-0x000001f3a16000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a14000-0x000001f3a15000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a13000-0x000001f3a14000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a12000-0x000001f3a13000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a11000-0x000001f3a12000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a10000-0x000001f3a11000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a0f000-0x000001f3a10000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a0e000-0x000001f3a0f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a0d000-0x000001f3a0e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a0c000-0x000001f3a0d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a0b000-0x000001f3a0c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a0a000-0x000001f3a0b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a09000-0x000001f3a0a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a08000-0x000001f3a09000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a07000-0x000001f3a08000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a06000-0x000001f3a07000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a05000-0x000001f3a06000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a04000-0x000001f3a05000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a03000-0x000001f3a04000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a02000-0x000001f3a03000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a01000-0x000001f3a02000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3a00000-0x000001f3a01000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ff000-0x000001f3a00000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39fe000-0x000001f39ff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39fd000-0x000001f39fe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39fc000-0x000001f39fd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39fb000-0x000001f39fc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39fa000-0x000001f39fb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39f9000-0x000001f39fa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39f8000-0x000001f39f9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39f7000-0x000001f39f8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39f6000-0x000001f39f7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39f5000-0x000001f39f6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39f4000-0x000001f39f5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39f3000-0x000001f39f4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39f2000-0x000001f39f3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39f1000-0x000001f39f2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39f0000-0x000001f39f1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ef000-0x000001f39f0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ee000-0x000001f39ef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ed000-0x000001f39ee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ec000-0x000001f39ed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39eb000-0x000001f39ec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ea000-0x000001f39eb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39e9000-0x000001f39ea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39e8000-0x000001f39e9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39e7000-0x000001f39e8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39e6000-0x000001f39e7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39e5000-0x000001f39e6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39e4000-0x000001f39e5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39e3000-0x000001f39e4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39e2000-0x000001f39e3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39e1000-0x000001f39e2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39e0000-0x000001f39e1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39df000-0x000001f39e0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39de000-0x000001f39df000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39dd000-0x000001f39de000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39dc000-0x000001f39dd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39db000-0x000001f39dc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39da000-0x000001f39db000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39d9000-0x000001f39da000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39d8000-0x000001f39d9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39d7000-0x000001f39d8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39d6000-0x000001f39d7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39d5000-0x000001f39d6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39d4000-0x000001f39d5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39d3000-0x000001f39d4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39d2000-0x000001f39d3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39d1000-0x000001f39d2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39d0000-0x000001f39d1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39cf000-0x000001f39d0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ce000-0x000001f39cf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39cd000-0x000001f39ce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39cc000-0x000001f39cd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39cb000-0x000001f39cc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ca000-0x000001f39cb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39c9000-0x000001f39ca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39c8000-0x000001f39c9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39c7000-0x000001f39c8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39c6000-0x000001f39c7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39c5000-0x000001f39c6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39c4000-0x000001f39c5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39c3000-0x000001f39c4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39c2000-0x000001f39c3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39c1000-0x000001f39c2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39c0000-0x000001f39c1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39bf000-0x000001f39c0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39be000-0x000001f39bf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39bd000-0x000001f39be000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39bc000-0x000001f39bd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39bb000-0x000001f39bc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ba000-0x000001f39bb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39b9000-0x000001f39ba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39b8000-0x000001f39b9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39b7000-0x000001f39b8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39b6000-0x000001f39b7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39b5000-0x000001f39b6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39b4000-0x000001f39b5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39b3000-0x000001f39b4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39b2000-0x000001f39b3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39b1000-0x000001f39b2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39b0000-0x000001f39b1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39af000-0x000001f39b0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ae000-0x000001f39af000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ad000-0x000001f39ae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ac000-0x000001f39ad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39ab000-0x000001f39ac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39aa000-0x000001f39ab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39a9000-0x000001f39aa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39a8000-0x000001f39a9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39a7000-0x000001f39a8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39a6000-0x000001f39a7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39a5000-0x000001f39a6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39a4000-0x000001f39a5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39a3000-0x000001f39a4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39a2000-0x000001f39a3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39a1000-0x000001f39a2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f39a0000-0x000001f39a1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f399f000-0x000001f39a0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f399e000-0x000001f399f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f399d000-0x000001f399e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f399c000-0x000001f399d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f399b000-0x000001f399c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f399a000-0x000001f399b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3999000-0x000001f399a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3998000-0x000001f3999000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3997000-0x000001f3998000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3996000-0x000001f3997000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3995000-0x000001f3996000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3994000-0x000001f3995000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3993000-0x000001f3994000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3992000-0x000001f3993000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3991000-0x000001f3992000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3990000-0x000001f3991000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f398f000-0x000001f3990000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f398e000-0x000001f398f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f398d000-0x000001f398e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f398c000-0x000001f398d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f398b000-0x000001f398c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f398a000-0x000001f398b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3989000-0x000001f398a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3988000-0x000001f3989000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3987000-0x000001f3988000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3986000-0x000001f3987000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3985000-0x000001f3986000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3984000-0x000001f3985000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3983000-0x000001f3984000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3982000-0x000001f3983000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3981000-0x000001f3982000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3980000-0x000001f3981000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f397f000-0x000001f3980000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f397e000-0x000001f397f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f397d000-0x000001f397e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f397c000-0x000001f397d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f397b000-0x000001f397c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f397a000-0x000001f397b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3979000-0x000001f397a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3978000-0x000001f3979000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3977000-0x000001f3978000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3976000-0x000001f3977000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3975000-0x000001f3976000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3974000-0x000001f3975000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3973000-0x000001f3974000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3972000-0x000001f3973000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3971000-0x000001f3972000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3970000-0x000001f3971000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f396f000-0x000001f3970000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f396e000-0x000001f396f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f396d000-0x000001f396e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f396c000-0x000001f396d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f396b000-0x000001f396c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f396a000-0x000001f396b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3969000-0x000001f396a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3968000-0x000001f3969000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3967000-0x000001f3968000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3966000-0x000001f3967000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3965000-0x000001f3966000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3964000-0x000001f3965000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3963000-0x000001f3964000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3962000-0x000001f3963000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3961000-0x000001f3962000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3960000-0x000001f3961000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f395f000-0x000001f3960000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f395e000-0x000001f395f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f395d000-0x000001f395e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f395c000-0x000001f395d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f395b000-0x000001f395c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f395a000-0x000001f395b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3959000-0x000001f395a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3958000-0x000001f3959000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3957000-0x000001f3958000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3956000-0x000001f3957000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3955000-0x000001f3956000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3954000-0x000001f3955000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3953000-0x000001f3954000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3952000-0x000001f3953000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3951000-0x000001f3952000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3950000-0x000001f3951000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f394f000-0x000001f3950000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f394e000-0x000001f394f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f394d000-0x000001f394e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f394c000-0x000001f394d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f394b000-0x000001f394c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f394a000-0x000001f394b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3949000-0x000001f394a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3948000-0x000001f3949000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3947000-0x000001f3948000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3946000-0x000001f3947000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3945000-0x000001f3946000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3944000-0x000001f3945000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3943000-0x000001f3944000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3942000-0x000001f3943000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3941000-0x000001f3942000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3940000-0x000001f3941000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f393f000-0x000001f3940000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f393e000-0x000001f393f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f393d000-0x000001f393e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f393c000-0x000001f393d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f393b000-0x000001f393c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f393a000-0x000001f393b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3939000-0x000001f393a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3938000-0x000001f3939000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3937000-0x000001f3938000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3936000-0x000001f3937000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3935000-0x000001f3936000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3934000-0x000001f3935000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3933000-0x000001f3934000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3932000-0x000001f3933000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3931000-0x000001f3932000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3930000-0x000001f3931000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f392f000-0x000001f3930000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f392e000-0x000001f392f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f392d000-0x000001f392e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f392c000-0x000001f392d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f392b000-0x000001f392c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f392a000-0x000001f392b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3929000-0x000001f392a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3928000-0x000001f3929000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3927000-0x000001f3928000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3926000-0x000001f3927000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3925000-0x000001f3926000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3924000-0x000001f3925000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3923000-0x000001f3924000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3922000-0x000001f3923000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3921000-0x000001f3922000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3920000-0x000001f3921000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f391f000-0x000001f3920000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f391e000-0x000001f391f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f391d000-0x000001f391e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f391c000-0x000001f391d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f391b000-0x000001f391c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f391a000-0x000001f391b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3919000-0x000001f391a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3918000-0x000001f3919000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3917000-0x000001f3918000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3916000-0x000001f3917000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3915000-0x000001f3916000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3914000-0x000001f3915000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3913000-0x000001f3914000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3912000-0x000001f3913000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3911000-0x000001f3912000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3910000-0x000001f3911000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f390f000-0x000001f3910000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f390e000-0x000001f390f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f390d000-0x000001f390e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f390c000-0x000001f390d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f390b000-0x000001f390c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f390a000-0x000001f390b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3909000-0x000001f390a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3908000-0x000001f3909000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3907000-0x000001f3908000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3906000-0x000001f3907000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3905000-0x000001f3906000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3904000-0x000001f3905000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3903000-0x000001f3904000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3902000-0x000001f3903000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3901000-0x000001f3902000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3900000-0x000001f3901000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ff000-0x000001f3900000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38fe000-0x000001f38ff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38fd000-0x000001f38fe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38fc000-0x000001f38fd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38fb000-0x000001f38fc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38fa000-0x000001f38fb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38f9000-0x000001f38fa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38f8000-0x000001f38f9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38f7000-0x000001f38f8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38f6000-0x000001f38f7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38f5000-0x000001f38f6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38f4000-0x000001f38f5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38f3000-0x000001f38f4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38f2000-0x000001f38f3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38f1000-0x000001f38f2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38f0000-0x000001f38f1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ef000-0x000001f38f0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ee000-0x000001f38ef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ed000-0x000001f38ee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ec000-0x000001f38ed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38eb000-0x000001f38ec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ea000-0x000001f38eb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38e9000-0x000001f38ea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38e8000-0x000001f38e9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38e7000-0x000001f38e8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38e6000-0x000001f38e7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38e5000-0x000001f38e6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38e4000-0x000001f38e5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38e3000-0x000001f38e4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38e2000-0x000001f38e3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38e1000-0x000001f38e2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38e0000-0x000001f38e1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38df000-0x000001f38e0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38de000-0x000001f38df000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38dd000-0x000001f38de000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38dc000-0x000001f38dd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38db000-0x000001f38dc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38da000-0x000001f38db000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38d9000-0x000001f38da000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38d8000-0x000001f38d9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38d7000-0x000001f38d8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38d6000-0x000001f38d7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38d5000-0x000001f38d6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38d4000-0x000001f38d5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38d3000-0x000001f38d4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38d2000-0x000001f38d3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38d1000-0x000001f38d2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38d0000-0x000001f38d1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38cf000-0x000001f38d0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ce000-0x000001f38cf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38cd000-0x000001f38ce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38cc000-0x000001f38cd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38cb000-0x000001f38cc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ca000-0x000001f38cb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38c9000-0x000001f38ca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38c8000-0x000001f38c9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38c7000-0x000001f38c8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38c6000-0x000001f38c7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38c5000-0x000001f38c6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38c4000-0x000001f38c5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38c3000-0x000001f38c4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38c2000-0x000001f38c3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38c1000-0x000001f38c2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38c0000-0x000001f38c1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38bf000-0x000001f38c0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38be000-0x000001f38bf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38bd000-0x000001f38be000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38bc000-0x000001f38bd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38bb000-0x000001f38bc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ba000-0x000001f38bb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38b9000-0x000001f38ba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38b8000-0x000001f38b9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38b7000-0x000001f38b8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38b6000-0x000001f38b7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38b5000-0x000001f38b6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38b4000-0x000001f38b5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38b3000-0x000001f38b4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38b2000-0x000001f38b3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38b1000-0x000001f38b2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38b0000-0x000001f38b1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38af000-0x000001f38b0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ae000-0x000001f38af000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ad000-0x000001f38ae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ac000-0x000001f38ad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38ab000-0x000001f38ac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38aa000-0x000001f38ab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38a9000-0x000001f38aa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38a8000-0x000001f38a9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38a7000-0x000001f38a8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38a6000-0x000001f38a7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38a5000-0x000001f38a6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38a4000-0x000001f38a5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38a3000-0x000001f38a4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38a2000-0x000001f38a3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38a1000-0x000001f38a2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f38a0000-0x000001f38a1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f389f000-0x000001f38a0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f389e000-0x000001f389f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f389d000-0x000001f389e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f389c000-0x000001f389d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f389b000-0x000001f389c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f389a000-0x000001f389b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3899000-0x000001f389a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3898000-0x000001f3899000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3897000-0x000001f3898000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3896000-0x000001f3897000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3895000-0x000001f3896000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3894000-0x000001f3895000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3893000-0x000001f3894000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3892000-0x000001f3893000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3891000-0x000001f3892000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3890000-0x000001f3891000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f388f000-0x000001f3890000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f388e000-0x000001f388f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f388d000-0x000001f388e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f388c000-0x000001f388d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f388b000-0x000001f388c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f388a000-0x000001f388b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3889000-0x000001f388a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3888000-0x000001f3889000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3887000-0x000001f3888000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3886000-0x000001f3887000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3885000-0x000001f3886000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3884000-0x000001f3885000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3883000-0x000001f3884000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3882000-0x000001f3883000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3881000-0x000001f3882000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3880000-0x000001f3881000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f387f000-0x000001f3880000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f387e000-0x000001f387f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f387d000-0x000001f387e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f387c000-0x000001f387d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f387b000-0x000001f387c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f387a000-0x000001f387b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3879000-0x000001f387a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3878000-0x000001f3879000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3877000-0x000001f3878000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3876000-0x000001f3877000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3875000-0x000001f3876000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3874000-0x000001f3875000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3873000-0x000001f3874000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3872000-0x000001f3873000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3871000-0x000001f3872000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3870000-0x000001f3871000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f386f000-0x000001f3870000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f386e000-0x000001f386f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f386d000-0x000001f386e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f386c000-0x000001f386d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f386b000-0x000001f386c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f386a000-0x000001f386b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3869000-0x000001f386a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3868000-0x000001f3869000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3867000-0x000001f3868000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3866000-0x000001f3867000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3865000-0x000001f3866000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3864000-0x000001f3865000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3863000-0x000001f3864000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3862000-0x000001f3863000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3861000-0x000001f3862000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3860000-0x000001f3861000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f385f000-0x000001f3860000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f385e000-0x000001f385f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f385d000-0x000001f385e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f385c000-0x000001f385d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f385b000-0x000001f385c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f385a000-0x000001f385b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3859000-0x000001f385a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3858000-0x000001f3859000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3857000-0x000001f3858000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3856000-0x000001f3857000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3855000-0x000001f3856000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3854000-0x000001f3855000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3853000-0x000001f3854000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3852000-0x000001f3853000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3851000-0x000001f3852000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3850000-0x000001f3851000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f384f000-0x000001f3850000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f384e000-0x000001f384f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f384d000-0x000001f384e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f384c000-0x000001f384d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f384b000-0x000001f384c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f384a000-0x000001f384b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3849000-0x000001f384a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3848000-0x000001f3849000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3847000-0x000001f3848000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3846000-0x000001f3847000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3845000-0x000001f3846000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3844000-0x000001f3845000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3843000-0x000001f3844000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3842000-0x000001f3843000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3841000-0x000001f3842000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3840000-0x000001f3841000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f383f000-0x000001f3840000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f383e000-0x000001f383f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f383d000-0x000001f383e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f383c000-0x000001f383d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f383b000-0x000001f383c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f383a000-0x000001f383b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3839000-0x000001f383a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3838000-0x000001f3839000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3837000-0x000001f3838000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3836000-0x000001f3837000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3835000-0x000001f3836000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3834000-0x000001f3835000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3833000-0x000001f3834000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3832000-0x000001f3833000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3831000-0x000001f3832000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3830000-0x000001f3831000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f382f000-0x000001f3830000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f382e000-0x000001f382f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f382d000-0x000001f382e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f382c000-0x000001f382d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f382b000-0x000001f382c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f382a000-0x000001f382b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3829000-0x000001f382a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3828000-0x000001f3829000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3827000-0x000001f3828000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3826000-0x000001f3827000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3825000-0x000001f3826000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3824000-0x000001f3825000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3823000-0x000001f3824000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3822000-0x000001f3823000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3821000-0x000001f3822000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3820000-0x000001f3821000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f381f000-0x000001f3820000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f381e000-0x000001f381f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f381d000-0x000001f381e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f381c000-0x000001f381d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f381b000-0x000001f381c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f381a000-0x000001f381b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3819000-0x000001f381a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3818000-0x000001f3819000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3817000-0x000001f3818000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3816000-0x000001f3817000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3815000-0x000001f3816000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3814000-0x000001f3815000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3813000-0x000001f3814000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3812000-0x000001f3813000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3811000-0x000001f3812000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3810000-0x000001f3811000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f380f000-0x000001f3810000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f380e000-0x000001f380f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f380d000-0x000001f380e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f380c000-0x000001f380d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f380b000-0x000001f380c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f380a000-0x000001f380b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3809000-0x000001f380a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3808000-0x000001f3809000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3807000-0x000001f3808000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3806000-0x000001f3807000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3805000-0x000001f3806000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3804000-0x000001f3805000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3803000-0x000001f3804000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3802000-0x000001f3803000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3801000-0x000001f3802000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3800000-0x000001f3801000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ff000-0x000001f3800000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37fe000-0x000001f37ff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37fd000-0x000001f37fe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37fc000-0x000001f37fd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37fb000-0x000001f37fc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37fa000-0x000001f37fb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37f9000-0x000001f37fa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37f8000-0x000001f37f9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37f7000-0x000001f37f8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37f6000-0x000001f37f7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37f5000-0x000001f37f6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37f4000-0x000001f37f5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37f3000-0x000001f37f4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37f2000-0x000001f37f3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37f1000-0x000001f37f2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37f0000-0x000001f37f1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ef000-0x000001f37f0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ee000-0x000001f37ef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ed000-0x000001f37ee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ec000-0x000001f37ed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37eb000-0x000001f37ec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ea000-0x000001f37eb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37e9000-0x000001f37ea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37e8000-0x000001f37e9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37e7000-0x000001f37e8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37e6000-0x000001f37e7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37e5000-0x000001f37e6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37e4000-0x000001f37e5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37e3000-0x000001f37e4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37e2000-0x000001f37e3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37e1000-0x000001f37e2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37e0000-0x000001f37e1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37df000-0x000001f37e0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37de000-0x000001f37df000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37dd000-0x000001f37de000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37dc000-0x000001f37dd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37db000-0x000001f37dc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37da000-0x000001f37db000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37d9000-0x000001f37da000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37d8000-0x000001f37d9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37d7000-0x000001f37d8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37d6000-0x000001f37d7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37d5000-0x000001f37d6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37d4000-0x000001f37d5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37d3000-0x000001f37d4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37d2000-0x000001f37d3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37d1000-0x000001f37d2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37d0000-0x000001f37d1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37cf000-0x000001f37d0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ce000-0x000001f37cf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37cd000-0x000001f37ce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37cc000-0x000001f37cd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37cb000-0x000001f37cc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ca000-0x000001f37cb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37c9000-0x000001f37ca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37c8000-0x000001f37c9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37c7000-0x000001f37c8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37c6000-0x000001f37c7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37c5000-0x000001f37c6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37c4000-0x000001f37c5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37c3000-0x000001f37c4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37c2000-0x000001f37c3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37c1000-0x000001f37c2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37c0000-0x000001f37c1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37bf000-0x000001f37c0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37be000-0x000001f37bf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37bd000-0x000001f37be000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37bc000-0x000001f37bd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37bb000-0x000001f37bc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ba000-0x000001f37bb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37b9000-0x000001f37ba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37b8000-0x000001f37b9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37b7000-0x000001f37b8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37b6000-0x000001f37b7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37b5000-0x000001f37b6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37b4000-0x000001f37b5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37b3000-0x000001f37b4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37b2000-0x000001f37b3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37b1000-0x000001f37b2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37b0000-0x000001f37b1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37af000-0x000001f37b0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ae000-0x000001f37af000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ad000-0x000001f37ae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ac000-0x000001f37ad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37ab000-0x000001f37ac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37aa000-0x000001f37ab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37a9000-0x000001f37aa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37a8000-0x000001f37a9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37a7000-0x000001f37a8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37a6000-0x000001f37a7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37a5000-0x000001f37a6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37a4000-0x000001f37a5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37a3000-0x000001f37a4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37a2000-0x000001f37a3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37a1000-0x000001f37a2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f37a0000-0x000001f37a1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f379f000-0x000001f37a0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f379e000-0x000001f379f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f379d000-0x000001f379e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f379c000-0x000001f379d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f379b000-0x000001f379c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f379a000-0x000001f379b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3799000-0x000001f379a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3798000-0x000001f3799000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3797000-0x000001f3798000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3796000-0x000001f3797000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3795000-0x000001f3796000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3794000-0x000001f3795000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3793000-0x000001f3794000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3792000-0x000001f3793000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3791000-0x000001f3792000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3790000-0x000001f3791000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f378f000-0x000001f3790000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f378e000-0x000001f378f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f378d000-0x000001f378e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f378c000-0x000001f378d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f378b000-0x000001f378c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f378a000-0x000001f378b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3789000-0x000001f378a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3788000-0x000001f3789000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3787000-0x000001f3788000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3786000-0x000001f3787000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3785000-0x000001f3786000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3784000-0x000001f3785000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3783000-0x000001f3784000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3782000-0x000001f3783000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3781000-0x000001f3782000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3780000-0x000001f3781000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f377f000-0x000001f3780000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f377e000-0x000001f377f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f377d000-0x000001f377e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f377c000-0x000001f377d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f377b000-0x000001f377c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f377a000-0x000001f377b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3779000-0x000001f377a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3778000-0x000001f3779000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3777000-0x000001f3778000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3776000-0x000001f3777000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3775000-0x000001f3776000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3774000-0x000001f3775000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3773000-0x000001f3774000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3772000-0x000001f3773000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3771000-0x000001f3772000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3770000-0x000001f3771000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f376f000-0x000001f3770000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f376e000-0x000001f376f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f376d000-0x000001f376e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f376c000-0x000001f376d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f376b000-0x000001f376c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f376a000-0x000001f376b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3769000-0x000001f376a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3768000-0x000001f3769000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3767000-0x000001f3768000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3766000-0x000001f3767000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3765000-0x000001f3766000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3764000-0x000001f3765000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3763000-0x000001f3764000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3762000-0x000001f3763000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3761000-0x000001f3762000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3760000-0x000001f3761000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f375f000-0x000001f3760000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f375e000-0x000001f375f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f375d000-0x000001f375e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f375c000-0x000001f375d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f375b000-0x000001f375c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f375a000-0x000001f375b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3759000-0x000001f375a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3758000-0x000001f3759000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3757000-0x000001f3758000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3756000-0x000001f3757000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3755000-0x000001f3756000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3754000-0x000001f3755000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3753000-0x000001f3754000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3752000-0x000001f3753000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3751000-0x000001f3752000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3750000-0x000001f3751000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f374f000-0x000001f3750000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f374e000-0x000001f374f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f374d000-0x000001f374e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f374c000-0x000001f374d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f374b000-0x000001f374c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f374a000-0x000001f374b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3749000-0x000001f374a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3748000-0x000001f3749000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3747000-0x000001f3748000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3746000-0x000001f3747000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3745000-0x000001f3746000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3744000-0x000001f3745000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3743000-0x000001f3744000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3742000-0x000001f3743000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3741000-0x000001f3742000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3740000-0x000001f3741000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f373f000-0x000001f3740000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f373e000-0x000001f373f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f373d000-0x000001f373e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f373c000-0x000001f373d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f373b000-0x000001f373c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f373a000-0x000001f373b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3739000-0x000001f373a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3738000-0x000001f3739000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3737000-0x000001f3738000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3736000-0x000001f3737000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3735000-0x000001f3736000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3734000-0x000001f3735000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3733000-0x000001f3734000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3732000-0x000001f3733000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3731000-0x000001f3732000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3730000-0x000001f3731000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f372f000-0x000001f3730000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f372e000-0x000001f372f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f372d000-0x000001f372e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f372c000-0x000001f372d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f372b000-0x000001f372c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f372a000-0x000001f372b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3729000-0x000001f372a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3728000-0x000001f3729000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3727000-0x000001f3728000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3726000-0x000001f3727000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3725000-0x000001f3726000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3724000-0x000001f3725000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3723000-0x000001f3724000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3722000-0x000001f3723000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3721000-0x000001f3722000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3720000-0x000001f3721000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f371f000-0x000001f3720000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f371e000-0x000001f371f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f371d000-0x000001f371e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f371c000-0x000001f371d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f371b000-0x000001f371c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f371a000-0x000001f371b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3719000-0x000001f371a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3718000-0x000001f3719000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3717000-0x000001f3718000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3716000-0x000001f3717000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3715000-0x000001f3716000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3714000-0x000001f3715000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3713000-0x000001f3714000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3712000-0x000001f3713000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3711000-0x000001f3712000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3710000-0x000001f3711000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f370f000-0x000001f3710000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f370e000-0x000001f370f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f370d000-0x000001f370e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f370c000-0x000001f370d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f370b000-0x000001f370c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f370a000-0x000001f370b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3709000-0x000001f370a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3708000-0x000001f3709000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3707000-0x000001f3708000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3706000-0x000001f3707000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3705000-0x000001f3706000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3704000-0x000001f3705000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3703000-0x000001f3704000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3702000-0x000001f3703000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3701000-0x000001f3702000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3700000-0x000001f3701000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ff000-0x000001f3700000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36fe000-0x000001f36ff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36fd000-0x000001f36fe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36fc000-0x000001f36fd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36fb000-0x000001f36fc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36fa000-0x000001f36fb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36f9000-0x000001f36fa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36f8000-0x000001f36f9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36f7000-0x000001f36f8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36f6000-0x000001f36f7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36f5000-0x000001f36f6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36f4000-0x000001f36f5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36f3000-0x000001f36f4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36f2000-0x000001f36f3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36f1000-0x000001f36f2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36f0000-0x000001f36f1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ef000-0x000001f36f0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ee000-0x000001f36ef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ed000-0x000001f36ee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ec000-0x000001f36ed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36eb000-0x000001f36ec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ea000-0x000001f36eb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36e9000-0x000001f36ea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36e8000-0x000001f36e9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36e7000-0x000001f36e8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36e6000-0x000001f36e7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36e5000-0x000001f36e6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36e4000-0x000001f36e5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36e3000-0x000001f36e4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36e2000-0x000001f36e3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36e1000-0x000001f36e2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36e0000-0x000001f36e1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36df000-0x000001f36e0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36de000-0x000001f36df000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36dd000-0x000001f36de000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36dc000-0x000001f36dd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36db000-0x000001f36dc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36da000-0x000001f36db000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36d9000-0x000001f36da000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36d8000-0x000001f36d9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36d7000-0x000001f36d8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36d6000-0x000001f36d7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36d5000-0x000001f36d6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36d4000-0x000001f36d5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36d3000-0x000001f36d4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36d2000-0x000001f36d3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36d1000-0x000001f36d2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36d0000-0x000001f36d1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36cf000-0x000001f36d0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ce000-0x000001f36cf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36cd000-0x000001f36ce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36cc000-0x000001f36cd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36cb000-0x000001f36cc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ca000-0x000001f36cb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36c9000-0x000001f36ca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36c8000-0x000001f36c9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36c7000-0x000001f36c8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36c6000-0x000001f36c7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36c5000-0x000001f36c6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36c4000-0x000001f36c5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36c3000-0x000001f36c4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36c2000-0x000001f36c3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36c1000-0x000001f36c2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36c0000-0x000001f36c1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36bf000-0x000001f36c0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36be000-0x000001f36bf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36bd000-0x000001f36be000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36bc000-0x000001f36bd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36bb000-0x000001f36bc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ba000-0x000001f36bb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36b9000-0x000001f36ba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36b8000-0x000001f36b9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36b7000-0x000001f36b8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36b6000-0x000001f36b7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36b5000-0x000001f36b6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36b4000-0x000001f36b5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36b3000-0x000001f36b4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36b2000-0x000001f36b3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36b1000-0x000001f36b2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36b0000-0x000001f36b1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36af000-0x000001f36b0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ae000-0x000001f36af000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ad000-0x000001f36ae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ac000-0x000001f36ad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36ab000-0x000001f36ac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36aa000-0x000001f36ab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36a9000-0x000001f36aa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36a8000-0x000001f36a9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36a7000-0x000001f36a8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36a6000-0x000001f36a7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36a5000-0x000001f36a6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36a4000-0x000001f36a5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36a3000-0x000001f36a4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36a2000-0x000001f36a3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36a1000-0x000001f36a2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f36a0000-0x000001f36a1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f369f000-0x000001f36a0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f369e000-0x000001f369f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f369d000-0x000001f369e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f369c000-0x000001f369d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f369b000-0x000001f369c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f369a000-0x000001f369b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3699000-0x000001f369a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3698000-0x000001f3699000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3697000-0x000001f3698000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3696000-0x000001f3697000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3695000-0x000001f3696000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3694000-0x000001f3695000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3693000-0x000001f3694000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3692000-0x000001f3693000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3691000-0x000001f3692000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3690000-0x000001f3691000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f368f000-0x000001f3690000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f368e000-0x000001f368f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f368d000-0x000001f368e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f368c000-0x000001f368d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f368b000-0x000001f368c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f368a000-0x000001f368b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3689000-0x000001f368a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3688000-0x000001f3689000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3687000-0x000001f3688000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3686000-0x000001f3687000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3685000-0x000001f3686000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3684000-0x000001f3685000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3683000-0x000001f3684000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3682000-0x000001f3683000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3681000-0x000001f3682000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3680000-0x000001f3681000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f367f000-0x000001f3680000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f367e000-0x000001f367f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f367d000-0x000001f367e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f367c000-0x000001f367d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f367b000-0x000001f367c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f367a000-0x000001f367b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3679000-0x000001f367a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3678000-0x000001f3679000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3677000-0x000001f3678000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3676000-0x000001f3677000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3675000-0x000001f3676000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3674000-0x000001f3675000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3673000-0x000001f3674000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3672000-0x000001f3673000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3671000-0x000001f3672000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3670000-0x000001f3671000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f366f000-0x000001f3670000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f366e000-0x000001f366f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f366d000-0x000001f366e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f366c000-0x000001f366d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f366b000-0x000001f366c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f366a000-0x000001f366b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3669000-0x000001f366a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3668000-0x000001f3669000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3667000-0x000001f3668000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3666000-0x000001f3667000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3665000-0x000001f3666000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3664000-0x000001f3665000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3663000-0x000001f3664000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3662000-0x000001f3663000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3661000-0x000001f3662000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3660000-0x000001f3661000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f365f000-0x000001f3660000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f365e000-0x000001f365f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f365d000-0x000001f365e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f365c000-0x000001f365d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f365b000-0x000001f365c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f365a000-0x000001f365b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3659000-0x000001f365a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3658000-0x000001f3659000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3657000-0x000001f3658000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3656000-0x000001f3657000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3655000-0x000001f3656000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3654000-0x000001f3655000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3653000-0x000001f3654000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3652000-0x000001f3653000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3651000-0x000001f3652000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3650000-0x000001f3651000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f364f000-0x000001f3650000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f364e000-0x000001f364f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f364d000-0x000001f364e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f364c000-0x000001f364d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f364b000-0x000001f364c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f364a000-0x000001f364b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3649000-0x000001f364a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3648000-0x000001f3649000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3647000-0x000001f3648000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3646000-0x000001f3647000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3645000-0x000001f3646000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3644000-0x000001f3645000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3643000-0x000001f3644000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3642000-0x000001f3643000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3641000-0x000001f3642000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3640000-0x000001f3641000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f363f000-0x000001f3640000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f363e000-0x000001f363f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f363d000-0x000001f363e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f363c000-0x000001f363d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f363b000-0x000001f363c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f363a000-0x000001f363b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3639000-0x000001f363a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3638000-0x000001f3639000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3637000-0x000001f3638000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3636000-0x000001f3637000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3635000-0x000001f3636000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3634000-0x000001f3635000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3633000-0x000001f3634000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3632000-0x000001f3633000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3631000-0x000001f3632000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3630000-0x000001f3631000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f362f000-0x000001f3630000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f362e000-0x000001f362f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f362d000-0x000001f362e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f362c000-0x000001f362d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f362b000-0x000001f362c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f362a000-0x000001f362b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3629000-0x000001f362a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3628000-0x000001f3629000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3627000-0x000001f3628000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3626000-0x000001f3627000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3625000-0x000001f3626000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3624000-0x000001f3625000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3623000-0x000001f3624000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3622000-0x000001f3623000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3621000-0x000001f3622000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3620000-0x000001f3621000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f361f000-0x000001f3620000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f361e000-0x000001f361f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f361d000-0x000001f361e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f361c000-0x000001f361d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f361b000-0x000001f361c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f361a000-0x000001f361b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3619000-0x000001f361a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3618000-0x000001f3619000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3617000-0x000001f3618000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3616000-0x000001f3617000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3615000-0x000001f3616000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3614000-0x000001f3615000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3613000-0x000001f3614000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3612000-0x000001f3613000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3611000-0x000001f3612000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3610000-0x000001f3611000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f360f000-0x000001f3610000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f360e000-0x000001f360f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f360d000-0x000001f360e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f360c000-0x000001f360d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f360b000-0x000001f360c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f360a000-0x000001f360b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3609000-0x000001f360a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3608000-0x000001f3609000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3607000-0x000001f3608000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3606000-0x000001f3607000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3605000-0x000001f3606000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3604000-0x000001f3605000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3603000-0x000001f3604000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3602000-0x000001f3603000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3601000-0x000001f3602000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3600000-0x000001f3601000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ff000-0x000001f3600000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35fe000-0x000001f35ff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35fd000-0x000001f35fe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35fc000-0x000001f35fd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35fb000-0x000001f35fc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35fa000-0x000001f35fb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35f9000-0x000001f35fa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35f8000-0x000001f35f9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35f7000-0x000001f35f8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35f6000-0x000001f35f7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35f5000-0x000001f35f6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35f4000-0x000001f35f5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35f3000-0x000001f35f4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35f2000-0x000001f35f3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35f1000-0x000001f35f2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35f0000-0x000001f35f1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ef000-0x000001f35f0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ee000-0x000001f35ef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ed000-0x000001f35ee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ec000-0x000001f35ed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35eb000-0x000001f35ec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ea000-0x000001f35eb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35e9000-0x000001f35ea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35e8000-0x000001f35e9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35e7000-0x000001f35e8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35e6000-0x000001f35e7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35e5000-0x000001f35e6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35e4000-0x000001f35e5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35e3000-0x000001f35e4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35e2000-0x000001f35e3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35e1000-0x000001f35e2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35e0000-0x000001f35e1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35df000-0x000001f35e0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35de000-0x000001f35df000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35dd000-0x000001f35de000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35dc000-0x000001f35dd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35db000-0x000001f35dc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35da000-0x000001f35db000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35d9000-0x000001f35da000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35d8000-0x000001f35d9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35d7000-0x000001f35d8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35d6000-0x000001f35d7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35d5000-0x000001f35d6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35d4000-0x000001f35d5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35d3000-0x000001f35d4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35d2000-0x000001f35d3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35d1000-0x000001f35d2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35d0000-0x000001f35d1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35cf000-0x000001f35d0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ce000-0x000001f35cf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35cd000-0x000001f35ce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35cc000-0x000001f35cd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35cb000-0x000001f35cc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ca000-0x000001f35cb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35c9000-0x000001f35ca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35c8000-0x000001f35c9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35c7000-0x000001f35c8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35c6000-0x000001f35c7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35c5000-0x000001f35c6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35c4000-0x000001f35c5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35c3000-0x000001f35c4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35c2000-0x000001f35c3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35c1000-0x000001f35c2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35c0000-0x000001f35c1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35bf000-0x000001f35c0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35be000-0x000001f35bf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35bd000-0x000001f35be000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35bc000-0x000001f35bd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35bb000-0x000001f35bc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ba000-0x000001f35bb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35b9000-0x000001f35ba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35b8000-0x000001f35b9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35b7000-0x000001f35b8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35b6000-0x000001f35b7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35b5000-0x000001f35b6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35b4000-0x000001f35b5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35b3000-0x000001f35b4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35b2000-0x000001f35b3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35b1000-0x000001f35b2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35b0000-0x000001f35b1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35af000-0x000001f35b0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ae000-0x000001f35af000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ad000-0x000001f35ae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ac000-0x000001f35ad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35ab000-0x000001f35ac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35aa000-0x000001f35ab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35a9000-0x000001f35aa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35a8000-0x000001f35a9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35a7000-0x000001f35a8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35a6000-0x000001f35a7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35a5000-0x000001f35a6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35a4000-0x000001f35a5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35a3000-0x000001f35a4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35a2000-0x000001f35a3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35a1000-0x000001f35a2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f35a0000-0x000001f35a1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f359f000-0x000001f35a0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f359e000-0x000001f359f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f359d000-0x000001f359e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f359c000-0x000001f359d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f359b000-0x000001f359c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f359a000-0x000001f359b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3599000-0x000001f359a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3598000-0x000001f3599000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3597000-0x000001f3598000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3596000-0x000001f3597000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3595000-0x000001f3596000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3594000-0x000001f3595000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3593000-0x000001f3594000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3592000-0x000001f3593000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3591000-0x000001f3592000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3590000-0x000001f3591000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f358f000-0x000001f3590000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f358e000-0x000001f358f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f358d000-0x000001f358e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f358c000-0x000001f358d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f358b000-0x000001f358c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f358a000-0x000001f358b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3589000-0x000001f358a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3588000-0x000001f3589000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3587000-0x000001f3588000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3586000-0x000001f3587000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3585000-0x000001f3586000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3584000-0x000001f3585000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3583000-0x000001f3584000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3582000-0x000001f3583000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3581000-0x000001f3582000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3580000-0x000001f3581000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f357f000-0x000001f3580000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f357e000-0x000001f357f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f357d000-0x000001f357e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f357c000-0x000001f357d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f357b000-0x000001f357c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f357a000-0x000001f357b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3579000-0x000001f357a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3578000-0x000001f3579000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3577000-0x000001f3578000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3576000-0x000001f3577000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3575000-0x000001f3576000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3574000-0x000001f3575000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3573000-0x000001f3574000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3572000-0x000001f3573000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3571000-0x000001f3572000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3570000-0x000001f3571000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f356f000-0x000001f3570000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f356e000-0x000001f356f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f356d000-0x000001f356e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f356c000-0x000001f356d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f356b000-0x000001f356c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f356a000-0x000001f356b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3569000-0x000001f356a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3568000-0x000001f3569000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3567000-0x000001f3568000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3566000-0x000001f3567000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3565000-0x000001f3566000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3564000-0x000001f3565000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3563000-0x000001f3564000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3562000-0x000001f3563000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3561000-0x000001f3562000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3560000-0x000001f3561000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f355f000-0x000001f3560000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f355e000-0x000001f355f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f355d000-0x000001f355e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f355c000-0x000001f355d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f355b000-0x000001f355c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f355a000-0x000001f355b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3559000-0x000001f355a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3558000-0x000001f3559000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3557000-0x000001f3558000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3556000-0x000001f3557000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3555000-0x000001f3556000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3554000-0x000001f3555000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3553000-0x000001f3554000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3552000-0x000001f3553000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3551000-0x000001f3552000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3550000-0x000001f3551000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f354f000-0x000001f3550000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f354e000-0x000001f354f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f354d000-0x000001f354e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f354c000-0x000001f354d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f354b000-0x000001f354c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f354a000-0x000001f354b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3549000-0x000001f354a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3548000-0x000001f3549000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3547000-0x000001f3548000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3546000-0x000001f3547000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3545000-0x000001f3546000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3544000-0x000001f3545000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3543000-0x000001f3544000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3542000-0x000001f3543000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3541000-0x000001f3542000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3540000-0x000001f3541000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f353f000-0x000001f3540000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f353e000-0x000001f353f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f353d000-0x000001f353e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f353c000-0x000001f353d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f353b000-0x000001f353c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f353a000-0x000001f353b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3539000-0x000001f353a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3538000-0x000001f3539000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3537000-0x000001f3538000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3536000-0x000001f3537000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3535000-0x000001f3536000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3534000-0x000001f3535000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3533000-0x000001f3534000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3532000-0x000001f3533000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3531000-0x000001f3532000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3530000-0x000001f3531000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f352f000-0x000001f3530000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f352e000-0x000001f352f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f352d000-0x000001f352e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f352c000-0x000001f352d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f352b000-0x000001f352c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f352a000-0x000001f352b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3529000-0x000001f352a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3528000-0x000001f3529000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3527000-0x000001f3528000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3526000-0x000001f3527000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3525000-0x000001f3526000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3524000-0x000001f3525000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3523000-0x000001f3524000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3522000-0x000001f3523000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3521000-0x000001f3522000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3520000-0x000001f3521000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f351f000-0x000001f3520000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f351e000-0x000001f351f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f351d000-0x000001f351e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f351c000-0x000001f351d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f351b000-0x000001f351c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f351a000-0x000001f351b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3519000-0x000001f351a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3518000-0x000001f3519000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3517000-0x000001f3518000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3516000-0x000001f3517000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3515000-0x000001f3516000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3514000-0x000001f3515000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3513000-0x000001f3514000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3512000-0x000001f3513000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3511000-0x000001f3512000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3510000-0x000001f3511000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f350f000-0x000001f3510000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f350e000-0x000001f350f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f350d000-0x000001f350e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f350c000-0x000001f350d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f350b000-0x000001f350c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f350a000-0x000001f350b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3509000-0x000001f350a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3508000-0x000001f3509000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3507000-0x000001f3508000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3506000-0x000001f3507000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3505000-0x000001f3506000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3504000-0x000001f3505000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3503000-0x000001f3504000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3502000-0x000001f3503000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3501000-0x000001f3502000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3500000-0x000001f3501000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ff000-0x000001f3500000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34fe000-0x000001f34ff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34fd000-0x000001f34fe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34fc000-0x000001f34fd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34fb000-0x000001f34fc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34fa000-0x000001f34fb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34f9000-0x000001f34fa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34f8000-0x000001f34f9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34f7000-0x000001f34f8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34f6000-0x000001f34f7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34f5000-0x000001f34f6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34f4000-0x000001f34f5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34f3000-0x000001f34f4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34f2000-0x000001f34f3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34f1000-0x000001f34f2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34f0000-0x000001f34f1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ef000-0x000001f34f0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ee000-0x000001f34ef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ed000-0x000001f34ee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ec000-0x000001f34ed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34eb000-0x000001f34ec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ea000-0x000001f34eb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34e9000-0x000001f34ea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34e8000-0x000001f34e9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34e7000-0x000001f34e8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34e6000-0x000001f34e7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34e5000-0x000001f34e6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34e4000-0x000001f34e5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34e3000-0x000001f34e4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34e2000-0x000001f34e3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34e1000-0x000001f34e2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34e0000-0x000001f34e1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34df000-0x000001f34e0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34de000-0x000001f34df000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34dd000-0x000001f34de000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34dc000-0x000001f34dd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34db000-0x000001f34dc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34da000-0x000001f34db000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34d9000-0x000001f34da000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34d8000-0x000001f34d9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34d7000-0x000001f34d8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34d6000-0x000001f34d7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34d5000-0x000001f34d6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34d4000-0x000001f34d5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34d3000-0x000001f34d4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34d2000-0x000001f34d3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34d1000-0x000001f34d2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34d0000-0x000001f34d1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34cf000-0x000001f34d0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ce000-0x000001f34cf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34cd000-0x000001f34ce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34cc000-0x000001f34cd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34cb000-0x000001f34cc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ca000-0x000001f34cb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34c9000-0x000001f34ca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34c8000-0x000001f34c9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34c7000-0x000001f34c8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34c6000-0x000001f34c7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34c5000-0x000001f34c6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34c4000-0x000001f34c5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34c3000-0x000001f34c4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34c2000-0x000001f34c3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34c1000-0x000001f34c2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34c0000-0x000001f34c1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34bf000-0x000001f34c0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34be000-0x000001f34bf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34bd000-0x000001f34be000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34bc000-0x000001f34bd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34bb000-0x000001f34bc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ba000-0x000001f34bb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34b9000-0x000001f34ba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34b8000-0x000001f34b9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34b7000-0x000001f34b8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34b6000-0x000001f34b7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34b5000-0x000001f34b6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34b4000-0x000001f34b5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34b3000-0x000001f34b4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34b2000-0x000001f34b3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34b1000-0x000001f34b2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34b0000-0x000001f34b1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34af000-0x000001f34b0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ae000-0x000001f34af000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ad000-0x000001f34ae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ac000-0x000001f34ad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34ab000-0x000001f34ac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34aa000-0x000001f34ab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34a9000-0x000001f34aa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34a8000-0x000001f34a9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34a7000-0x000001f34a8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34a6000-0x000001f34a7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34a5000-0x000001f34a6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34a4000-0x000001f34a5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34a3000-0x000001f34a4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34a2000-0x000001f34a3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34a1000-0x000001f34a2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f34a0000-0x000001f34a1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f349f000-0x000001f34a0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f349e000-0x000001f349f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f349d000-0x000001f349e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f349c000-0x000001f349d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f349b000-0x000001f349c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f349a000-0x000001f349b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3499000-0x000001f349a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3498000-0x000001f3499000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3497000-0x000001f3498000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3496000-0x000001f3497000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3495000-0x000001f3496000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3494000-0x000001f3495000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3493000-0x000001f3494000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3492000-0x000001f3493000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3491000-0x000001f3492000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3490000-0x000001f3491000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f348f000-0x000001f3490000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f348e000-0x000001f348f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f348d000-0x000001f348e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f348c000-0x000001f348d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f348b000-0x000001f348c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f348a000-0x000001f348b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3489000-0x000001f348a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3488000-0x000001f3489000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3487000-0x000001f3488000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3486000-0x000001f3487000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3485000-0x000001f3486000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3484000-0x000001f3485000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3483000-0x000001f3484000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3482000-0x000001f3483000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3481000-0x000001f3482000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3480000-0x000001f3481000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f347f000-0x000001f3480000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f347e000-0x000001f347f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f347d000-0x000001f347e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f347c000-0x000001f347d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f347b000-0x000001f347c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f347a000-0x000001f347b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3479000-0x000001f347a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3478000-0x000001f3479000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3477000-0x000001f3478000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3476000-0x000001f3477000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3475000-0x000001f3476000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3474000-0x000001f3475000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3473000-0x000001f3474000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3472000-0x000001f3473000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3471000-0x000001f3472000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3470000-0x000001f3471000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f346f000-0x000001f3470000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f346e000-0x000001f346f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f346d000-0x000001f346e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f346c000-0x000001f346d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f346b000-0x000001f346c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f346a000-0x000001f346b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3469000-0x000001f346a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3468000-0x000001f3469000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3467000-0x000001f3468000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3466000-0x000001f3467000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3465000-0x000001f3466000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3464000-0x000001f3465000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3463000-0x000001f3464000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3462000-0x000001f3463000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3461000-0x000001f3462000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3460000-0x000001f3461000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f345f000-0x000001f3460000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f345e000-0x000001f345f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f345d000-0x000001f345e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f345c000-0x000001f345d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f345b000-0x000001f345c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f345a000-0x000001f345b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3459000-0x000001f345a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3458000-0x000001f3459000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3457000-0x000001f3458000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3456000-0x000001f3457000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3455000-0x000001f3456000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3454000-0x000001f3455000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3453000-0x000001f3454000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3452000-0x000001f3453000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3451000-0x000001f3452000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3450000-0x000001f3451000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f344f000-0x000001f3450000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f344e000-0x000001f344f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f344d000-0x000001f344e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f344c000-0x000001f344d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f344b000-0x000001f344c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f344a000-0x000001f344b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3449000-0x000001f344a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3448000-0x000001f3449000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3447000-0x000001f3448000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3446000-0x000001f3447000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3445000-0x000001f3446000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3444000-0x000001f3445000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3443000-0x000001f3444000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3442000-0x000001f3443000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3441000-0x000001f3442000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3440000-0x000001f3441000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f343f000-0x000001f3440000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f343e000-0x000001f343f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f343d000-0x000001f343e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f343c000-0x000001f343d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f343b000-0x000001f343c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f343a000-0x000001f343b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3439000-0x000001f343a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3438000-0x000001f3439000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3437000-0x000001f3438000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3436000-0x000001f3437000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3435000-0x000001f3436000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3434000-0x000001f3435000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3433000-0x000001f3434000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3432000-0x000001f3433000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3431000-0x000001f3432000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3430000-0x000001f3431000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f342f000-0x000001f3430000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f342e000-0x000001f342f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f342d000-0x000001f342e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f342c000-0x000001f342d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f342b000-0x000001f342c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f342a000-0x000001f342b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3429000-0x000001f342a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3428000-0x000001f3429000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3427000-0x000001f3428000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3426000-0x000001f3427000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3425000-0x000001f3426000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3424000-0x000001f3425000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3423000-0x000001f3424000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3422000-0x000001f3423000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3421000-0x000001f3422000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3420000-0x000001f3421000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f341f000-0x000001f3420000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f341e000-0x000001f341f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f341d000-0x000001f341e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f341c000-0x000001f341d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f341b000-0x000001f341c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f341a000-0x000001f341b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3419000-0x000001f341a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3418000-0x000001f3419000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3417000-0x000001f3418000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3416000-0x000001f3417000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3415000-0x000001f3416000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3414000-0x000001f3415000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3413000-0x000001f3414000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3412000-0x000001f3413000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3411000-0x000001f3412000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3410000-0x000001f3411000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f340f000-0x000001f3410000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f340e000-0x000001f340f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f340d000-0x000001f340e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f340c000-0x000001f340d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f340b000-0x000001f340c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f340a000-0x000001f340b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3409000-0x000001f340a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3408000-0x000001f3409000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3407000-0x000001f3408000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3406000-0x000001f3407000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3405000-0x000001f3406000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3404000-0x000001f3405000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3403000-0x000001f3404000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3402000-0x000001f3403000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3401000-0x000001f3402000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3400000-0x000001f3401000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ff000-0x000001f3400000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33fe000-0x000001f33ff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33fd000-0x000001f33fe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33fc000-0x000001f33fd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33fb000-0x000001f33fc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33fa000-0x000001f33fb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33f9000-0x000001f33fa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33f8000-0x000001f33f9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33f7000-0x000001f33f8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33f6000-0x000001f33f7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33f5000-0x000001f33f6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33f4000-0x000001f33f5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33f3000-0x000001f33f4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33f2000-0x000001f33f3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33f1000-0x000001f33f2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33f0000-0x000001f33f1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ef000-0x000001f33f0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ee000-0x000001f33ef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ed000-0x000001f33ee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ec000-0x000001f33ed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33eb000-0x000001f33ec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ea000-0x000001f33eb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33e9000-0x000001f33ea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33e8000-0x000001f33e9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33e7000-0x000001f33e8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33e6000-0x000001f33e7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33e5000-0x000001f33e6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33e4000-0x000001f33e5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33e3000-0x000001f33e4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33e2000-0x000001f33e3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33e1000-0x000001f33e2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33e0000-0x000001f33e1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33df000-0x000001f33e0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33de000-0x000001f33df000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33dd000-0x000001f33de000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33dc000-0x000001f33dd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33db000-0x000001f33dc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33da000-0x000001f33db000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33d9000-0x000001f33da000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33d8000-0x000001f33d9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33d7000-0x000001f33d8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33d6000-0x000001f33d7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33d5000-0x000001f33d6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33d4000-0x000001f33d5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33d3000-0x000001f33d4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33d2000-0x000001f33d3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33d1000-0x000001f33d2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33d0000-0x000001f33d1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33cf000-0x000001f33d0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ce000-0x000001f33cf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33cd000-0x000001f33ce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33cc000-0x000001f33cd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33cb000-0x000001f33cc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ca000-0x000001f33cb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33c9000-0x000001f33ca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33c8000-0x000001f33c9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33c7000-0x000001f33c8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33c6000-0x000001f33c7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33c5000-0x000001f33c6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33c4000-0x000001f33c5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33c3000-0x000001f33c4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33c2000-0x000001f33c3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33c1000-0x000001f33c2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33c0000-0x000001f33c1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33bf000-0x000001f33c0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33be000-0x000001f33bf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33bd000-0x000001f33be000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33bc000-0x000001f33bd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33bb000-0x000001f33bc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ba000-0x000001f33bb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33b9000-0x000001f33ba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33b8000-0x000001f33b9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33b7000-0x000001f33b8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33b6000-0x000001f33b7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33b5000-0x000001f33b6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33b4000-0x000001f33b5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33b3000-0x000001f33b4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33b2000-0x000001f33b3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33b1000-0x000001f33b2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33b0000-0x000001f33b1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33af000-0x000001f33b0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ae000-0x000001f33af000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ad000-0x000001f33ae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ac000-0x000001f33ad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33ab000-0x000001f33ac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33aa000-0x000001f33ab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33a9000-0x000001f33aa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33a8000-0x000001f33a9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33a7000-0x000001f33a8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33a6000-0x000001f33a7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33a5000-0x000001f33a6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33a4000-0x000001f33a5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33a3000-0x000001f33a4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33a2000-0x000001f33a3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33a1000-0x000001f33a2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f33a0000-0x000001f33a1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f339f000-0x000001f33a0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f339e000-0x000001f339f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f339d000-0x000001f339e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f339c000-0x000001f339d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f339b000-0x000001f339c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f339a000-0x000001f339b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3399000-0x000001f339a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3398000-0x000001f3399000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3397000-0x000001f3398000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3396000-0x000001f3397000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3395000-0x000001f3396000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3394000-0x000001f3395000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3393000-0x000001f3394000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3392000-0x000001f3393000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3391000-0x000001f3392000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3390000-0x000001f3391000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f338f000-0x000001f3390000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f338e000-0x000001f338f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f338d000-0x000001f338e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f338c000-0x000001f338d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f338b000-0x000001f338c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f338a000-0x000001f338b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3389000-0x000001f338a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3388000-0x000001f3389000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3387000-0x000001f3388000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3386000-0x000001f3387000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3385000-0x000001f3386000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3384000-0x000001f3385000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3383000-0x000001f3384000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3382000-0x000001f3383000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3381000-0x000001f3382000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3380000-0x000001f3381000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f337f000-0x000001f3380000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f337e000-0x000001f337f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f337d000-0x000001f337e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f337c000-0x000001f337d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f337b000-0x000001f337c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f337a000-0x000001f337b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3379000-0x000001f337a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3378000-0x000001f3379000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3377000-0x000001f3378000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3376000-0x000001f3377000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3375000-0x000001f3376000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3374000-0x000001f3375000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3373000-0x000001f3374000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3372000-0x000001f3373000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3371000-0x000001f3372000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3370000-0x000001f3371000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f336f000-0x000001f3370000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f336e000-0x000001f336f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f336d000-0x000001f336e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f336c000-0x000001f336d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f336b000-0x000001f336c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f336a000-0x000001f336b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3369000-0x000001f336a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3368000-0x000001f3369000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3367000-0x000001f3368000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3366000-0x000001f3367000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3365000-0x000001f3366000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3364000-0x000001f3365000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3363000-0x000001f3364000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3362000-0x000001f3363000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3361000-0x000001f3362000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3360000-0x000001f3361000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f335f000-0x000001f3360000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f335e000-0x000001f335f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f335d000-0x000001f335e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f335c000-0x000001f335d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f335b000-0x000001f335c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f335a000-0x000001f335b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3359000-0x000001f335a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3358000-0x000001f3359000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3357000-0x000001f3358000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3356000-0x000001f3357000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3355000-0x000001f3356000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3354000-0x000001f3355000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3353000-0x000001f3354000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3352000-0x000001f3353000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3351000-0x000001f3352000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3350000-0x000001f3351000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f334f000-0x000001f3350000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f334e000-0x000001f334f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f334d000-0x000001f334e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f334c000-0x000001f334d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f334b000-0x000001f334c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f334a000-0x000001f334b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3349000-0x000001f334a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3348000-0x000001f3349000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3347000-0x000001f3348000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3346000-0x000001f3347000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3345000-0x000001f3346000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3344000-0x000001f3345000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3343000-0x000001f3344000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3342000-0x000001f3343000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3341000-0x000001f3342000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3340000-0x000001f3341000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f333f000-0x000001f3340000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f333e000-0x000001f333f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f333d000-0x000001f333e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f333c000-0x000001f333d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f333b000-0x000001f333c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f333a000-0x000001f333b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3339000-0x000001f333a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3338000-0x000001f3339000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3337000-0x000001f3338000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3336000-0x000001f3337000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3335000-0x000001f3336000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3334000-0x000001f3335000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3333000-0x000001f3334000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3332000-0x000001f3333000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3331000-0x000001f3332000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3330000-0x000001f3331000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f332f000-0x000001f3330000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f332e000-0x000001f332f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f332d000-0x000001f332e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f332c000-0x000001f332d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f332b000-0x000001f332c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f332a000-0x000001f332b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3329000-0x000001f332a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3328000-0x000001f3329000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3327000-0x000001f3328000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3326000-0x000001f3327000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3325000-0x000001f3326000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3324000-0x000001f3325000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3323000-0x000001f3324000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3322000-0x000001f3323000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3321000-0x000001f3322000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3320000-0x000001f3321000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f331f000-0x000001f3320000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f331e000-0x000001f331f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f331d000-0x000001f331e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f331c000-0x000001f331d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f331b000-0x000001f331c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f331a000-0x000001f331b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3319000-0x000001f331a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3318000-0x000001f3319000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3317000-0x000001f3318000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3316000-0x000001f3317000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3315000-0x000001f3316000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3314000-0x000001f3315000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3313000-0x000001f3314000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3312000-0x000001f3313000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3311000-0x000001f3312000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3310000-0x000001f3311000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f330f000-0x000001f3310000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f330e000-0x000001f330f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f330d000-0x000001f330e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f330c000-0x000001f330d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f330b000-0x000001f330c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f330a000-0x000001f330b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3309000-0x000001f330a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3308000-0x000001f3309000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3307000-0x000001f3308000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3306000-0x000001f3307000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3305000-0x000001f3306000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3304000-0x000001f3305000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3303000-0x000001f3304000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3302000-0x000001f3303000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3301000-0x000001f3302000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3300000-0x000001f3301000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ff000-0x000001f3300000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32fe000-0x000001f32ff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32fd000-0x000001f32fe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32fc000-0x000001f32fd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32fb000-0x000001f32fc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32fa000-0x000001f32fb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32f9000-0x000001f32fa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32f8000-0x000001f32f9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32f7000-0x000001f32f8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32f6000-0x000001f32f7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32f5000-0x000001f32f6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32f4000-0x000001f32f5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32f3000-0x000001f32f4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32f2000-0x000001f32f3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32f1000-0x000001f32f2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32f0000-0x000001f32f1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ef000-0x000001f32f0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ee000-0x000001f32ef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ed000-0x000001f32ee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ec000-0x000001f32ed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32eb000-0x000001f32ec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ea000-0x000001f32eb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32e9000-0x000001f32ea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32e8000-0x000001f32e9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32e7000-0x000001f32e8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32e6000-0x000001f32e7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32e5000-0x000001f32e6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32e4000-0x000001f32e5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32e3000-0x000001f32e4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32e2000-0x000001f32e3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32e1000-0x000001f32e2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32e0000-0x000001f32e1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32df000-0x000001f32e0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32de000-0x000001f32df000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32dd000-0x000001f32de000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32dc000-0x000001f32dd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32db000-0x000001f32dc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32da000-0x000001f32db000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32d9000-0x000001f32da000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32d8000-0x000001f32d9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32d7000-0x000001f32d8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32d6000-0x000001f32d7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32d5000-0x000001f32d6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32d4000-0x000001f32d5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32d3000-0x000001f32d4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32d2000-0x000001f32d3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32d1000-0x000001f32d2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32d0000-0x000001f32d1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32cf000-0x000001f32d0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ce000-0x000001f32cf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32cd000-0x000001f32ce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32cc000-0x000001f32cd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32cb000-0x000001f32cc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ca000-0x000001f32cb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32c9000-0x000001f32ca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32c8000-0x000001f32c9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32c7000-0x000001f32c8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32c6000-0x000001f32c7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32c5000-0x000001f32c6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32c4000-0x000001f32c5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32c3000-0x000001f32c4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32c2000-0x000001f32c3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32c1000-0x000001f32c2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32c0000-0x000001f32c1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32bf000-0x000001f32c0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32be000-0x000001f32bf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32bd000-0x000001f32be000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32bc000-0x000001f32bd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32bb000-0x000001f32bc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ba000-0x000001f32bb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32b9000-0x000001f32ba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32b8000-0x000001f32b9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32b7000-0x000001f32b8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32b6000-0x000001f32b7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32b5000-0x000001f32b6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32b4000-0x000001f32b5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32b3000-0x000001f32b4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32b2000-0x000001f32b3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32b1000-0x000001f32b2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32b0000-0x000001f32b1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32af000-0x000001f32b0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ae000-0x000001f32af000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ad000-0x000001f32ae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ac000-0x000001f32ad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32ab000-0x000001f32ac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32aa000-0x000001f32ab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32a9000-0x000001f32aa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32a8000-0x000001f32a9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32a7000-0x000001f32a8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32a6000-0x000001f32a7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32a5000-0x000001f32a6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32a4000-0x000001f32a5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32a3000-0x000001f32a4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32a2000-0x000001f32a3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32a1000-0x000001f32a2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f32a0000-0x000001f32a1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f329f000-0x000001f32a0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f329e000-0x000001f329f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f329d000-0x000001f329e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f329c000-0x000001f329d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f329b000-0x000001f329c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f329a000-0x000001f329b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3299000-0x000001f329a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3298000-0x000001f3299000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3297000-0x000001f3298000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3296000-0x000001f3297000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3295000-0x000001f3296000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3294000-0x000001f3295000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3293000-0x000001f3294000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3292000-0x000001f3293000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3291000-0x000001f3292000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3290000-0x000001f3291000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f328f000-0x000001f3290000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f328e000-0x000001f328f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f328d000-0x000001f328e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f328c000-0x000001f328d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f328b000-0x000001f328c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f328a000-0x000001f328b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3289000-0x000001f328a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3288000-0x000001f3289000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3287000-0x000001f3288000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3286000-0x000001f3287000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3285000-0x000001f3286000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3284000-0x000001f3285000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3283000-0x000001f3284000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3282000-0x000001f3283000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3281000-0x000001f3282000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3280000-0x000001f3281000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f327f000-0x000001f3280000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f327e000-0x000001f327f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f327d000-0x000001f327e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f327c000-0x000001f327d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f327b000-0x000001f327c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f327a000-0x000001f327b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3279000-0x000001f327a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3278000-0x000001f3279000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3277000-0x000001f3278000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3276000-0x000001f3277000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3275000-0x000001f3276000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3274000-0x000001f3275000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3273000-0x000001f3274000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3272000-0x000001f3273000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3271000-0x000001f3272000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3270000-0x000001f3271000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f326f000-0x000001f3270000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f326e000-0x000001f326f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f326d000-0x000001f326e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f326c000-0x000001f326d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f326b000-0x000001f326c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f326a000-0x000001f326b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3269000-0x000001f326a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3268000-0x000001f3269000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3267000-0x000001f3268000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3266000-0x000001f3267000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3265000-0x000001f3266000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3264000-0x000001f3265000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3263000-0x000001f3264000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3262000-0x000001f3263000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3261000-0x000001f3262000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3260000-0x000001f3261000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f325f000-0x000001f3260000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f325e000-0x000001f325f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f325d000-0x000001f325e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f325c000-0x000001f325d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f325b000-0x000001f325c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f325a000-0x000001f325b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3259000-0x000001f325a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3258000-0x000001f3259000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3257000-0x000001f3258000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3256000-0x000001f3257000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3255000-0x000001f3256000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3254000-0x000001f3255000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3253000-0x000001f3254000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3252000-0x000001f3253000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3251000-0x000001f3252000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3250000-0x000001f3251000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f324f000-0x000001f3250000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f324e000-0x000001f324f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f324d000-0x000001f324e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f324c000-0x000001f324d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f324b000-0x000001f324c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f324a000-0x000001f324b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3249000-0x000001f324a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3248000-0x000001f3249000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3247000-0x000001f3248000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3246000-0x000001f3247000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3245000-0x000001f3246000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3244000-0x000001f3245000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3243000-0x000001f3244000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3242000-0x000001f3243000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3241000-0x000001f3242000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3240000-0x000001f3241000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f323f000-0x000001f3240000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f323e000-0x000001f323f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f323d000-0x000001f323e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f323c000-0x000001f323d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f323b000-0x000001f323c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f323a000-0x000001f323b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3239000-0x000001f323a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3238000-0x000001f3239000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3237000-0x000001f3238000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3236000-0x000001f3237000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3235000-0x000001f3236000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3234000-0x000001f3235000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3233000-0x000001f3234000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3232000-0x000001f3233000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3231000-0x000001f3232000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3230000-0x000001f3231000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f322f000-0x000001f3230000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f322e000-0x000001f322f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f322d000-0x000001f322e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f322c000-0x000001f322d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f322b000-0x000001f322c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f322a000-0x000001f322b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3229000-0x000001f322a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3228000-0x000001f3229000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3227000-0x000001f3228000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3226000-0x000001f3227000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3225000-0x000001f3226000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3224000-0x000001f3225000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3223000-0x000001f3224000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3222000-0x000001f3223000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3221000-0x000001f3222000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3220000-0x000001f3221000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f321f000-0x000001f3220000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f321e000-0x000001f321f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f321d000-0x000001f321e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f321c000-0x000001f321d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f321b000-0x000001f321c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f321a000-0x000001f321b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3219000-0x000001f321a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3218000-0x000001f3219000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3217000-0x000001f3218000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3216000-0x000001f3217000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3215000-0x000001f3216000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3214000-0x000001f3215000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3213000-0x000001f3214000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3212000-0x000001f3213000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3211000-0x000001f3212000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3210000-0x000001f3211000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f320f000-0x000001f3210000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f320e000-0x000001f320f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f320d000-0x000001f320e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f320c000-0x000001f320d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f320b000-0x000001f320c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f320a000-0x000001f320b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3209000-0x000001f320a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3208000-0x000001f3209000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3207000-0x000001f3208000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3206000-0x000001f3207000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3205000-0x000001f3206000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3204000-0x000001f3205000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3203000-0x000001f3204000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3202000-0x000001f3203000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3201000-0x000001f3202000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3200000-0x000001f3201000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ff000-0x000001f3200000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31fe000-0x000001f31ff000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31fd000-0x000001f31fe000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31fc000-0x000001f31fd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31fb000-0x000001f31fc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31fa000-0x000001f31fb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31f9000-0x000001f31fa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31f8000-0x000001f31f9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31f7000-0x000001f31f8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31f6000-0x000001f31f7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31f5000-0x000001f31f6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31f4000-0x000001f31f5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31f3000-0x000001f31f4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31f2000-0x000001f31f3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31f1000-0x000001f31f2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31f0000-0x000001f31f1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ef000-0x000001f31f0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ee000-0x000001f31ef000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ed000-0x000001f31ee000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ec000-0x000001f31ed000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31eb000-0x000001f31ec000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ea000-0x000001f31eb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31e9000-0x000001f31ea000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31e8000-0x000001f31e9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31e7000-0x000001f31e8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31e6000-0x000001f31e7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31e5000-0x000001f31e6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31e4000-0x000001f31e5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31e3000-0x000001f31e4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31e2000-0x000001f31e3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31e1000-0x000001f31e2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31e0000-0x000001f31e1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31df000-0x000001f31e0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31de000-0x000001f31df000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31dd000-0x000001f31de000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31dc000-0x000001f31dd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31db000-0x000001f31dc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31da000-0x000001f31db000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31d9000-0x000001f31da000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31d8000-0x000001f31d9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31d7000-0x000001f31d8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31d6000-0x000001f31d7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31d5000-0x000001f31d6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31d4000-0x000001f31d5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31d3000-0x000001f31d4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31d2000-0x000001f31d3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31d1000-0x000001f31d2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31d0000-0x000001f31d1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31cf000-0x000001f31d0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ce000-0x000001f31cf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31cd000-0x000001f31ce000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31cc000-0x000001f31cd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31cb000-0x000001f31cc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ca000-0x000001f31cb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31c9000-0x000001f31ca000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31c8000-0x000001f31c9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31c7000-0x000001f31c8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31c6000-0x000001f31c7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31c5000-0x000001f31c6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31c4000-0x000001f31c5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31c3000-0x000001f31c4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31c2000-0x000001f31c3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31c1000-0x000001f31c2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31c0000-0x000001f31c1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31bf000-0x000001f31c0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31be000-0x000001f31bf000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31bd000-0x000001f31be000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31bc000-0x000001f31bd000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31bb000-0x000001f31bc000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ba000-0x000001f31bb000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31b9000-0x000001f31ba000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31b8000-0x000001f31b9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31b7000-0x000001f31b8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31b6000-0x000001f31b7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31b5000-0x000001f31b6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31b4000-0x000001f31b5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31b3000-0x000001f31b4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31b2000-0x000001f31b3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31b1000-0x000001f31b2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31b0000-0x000001f31b1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31af000-0x000001f31b0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ae000-0x000001f31af000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ad000-0x000001f31ae000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ac000-0x000001f31ad000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31ab000-0x000001f31ac000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31aa000-0x000001f31ab000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31a9000-0x000001f31aa000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31a8000-0x000001f31a9000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31a7000-0x000001f31a8000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31a6000-0x000001f31a7000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31a5000-0x000001f31a6000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31a4000-0x000001f31a5000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31a3000-0x000001f31a4000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31a2000-0x000001f31a3000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31a1000-0x000001f31a2000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f31a0000-0x000001f31a1000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f319f000-0x000001f31a0000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f319e000-0x000001f319f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f319d000-0x000001f319e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f319c000-0x000001f319d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f319b000-0x000001f319c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f319a000-0x000001f319b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3199000-0x000001f319a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3198000-0x000001f3199000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3197000-0x000001f3198000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3196000-0x000001f3197000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3195000-0x000001f3196000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3194000-0x000001f3195000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3193000-0x000001f3194000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3192000-0x000001f3193000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3191000-0x000001f3192000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3190000-0x000001f3191000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f318f000-0x000001f3190000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f318e000-0x000001f318f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f318d000-0x000001f318e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f318c000-0x000001f318d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f318b000-0x000001f318c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f318a000-0x000001f318b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3189000-0x000001f318a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3188000-0x000001f3189000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3187000-0x000001f3188000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3186000-0x000001f3187000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3185000-0x000001f3186000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3184000-0x000001f3185000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3183000-0x000001f3184000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3182000-0x000001f3183000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3181000-0x000001f3182000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3180000-0x000001f3181000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f317f000-0x000001f3180000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f317e000-0x000001f317f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f317d000-0x000001f317e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f317c000-0x000001f317d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f317b000-0x000001f317c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f317a000-0x000001f317b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3179000-0x000001f317a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3178000-0x000001f3179000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3177000-0x000001f3178000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3176000-0x000001f3177000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3175000-0x000001f3176000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3174000-0x000001f3175000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3173000-0x000001f3174000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3172000-0x000001f3173000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3171000-0x000001f3172000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3170000-0x000001f3171000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f316f000-0x000001f3170000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f316e000-0x000001f316f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f316d000-0x000001f316e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f316c000-0x000001f316d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f316b000-0x000001f316c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f316a000-0x000001f316b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3169000-0x000001f316a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3168000-0x000001f3169000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3167000-0x000001f3168000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3166000-0x000001f3167000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3165000-0x000001f3166000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3164000-0x000001f3165000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3163000-0x000001f3164000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3162000-0x000001f3163000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3161000-0x000001f3162000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3160000-0x000001f3161000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f315f000-0x000001f3160000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f315e000-0x000001f315f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f315d000-0x000001f315e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f315c000-0x000001f315d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f315b000-0x000001f315c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f315a000-0x000001f315b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3159000-0x000001f315a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3158000-0x000001f3159000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3157000-0x000001f3158000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3156000-0x000001f3157000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3155000-0x000001f3156000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3154000-0x000001f3155000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3153000-0x000001f3154000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3152000-0x000001f3153000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3151000-0x000001f3152000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3150000-0x000001f3151000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f314f000-0x000001f3150000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f314e000-0x000001f314f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f314d000-0x000001f314e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f314c000-0x000001f314d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f314b000-0x000001f314c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f314a000-0x000001f314b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3149000-0x000001f314a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3148000-0x000001f3149000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3147000-0x000001f3148000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3146000-0x000001f3147000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3145000-0x000001f3146000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3144000-0x000001f3145000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3143000-0x000001f3144000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3142000-0x000001f3143000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3141000-0x000001f3142000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3140000-0x000001f3141000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f313f000-0x000001f3140000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f313e000-0x000001f313f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f313d000-0x000001f313e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f313c000-0x000001f313d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f313b000-0x000001f313c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f313a000-0x000001f313b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3139000-0x000001f313a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3138000-0x000001f3139000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3137000-0x000001f3138000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3136000-0x000001f3137000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3135000-0x000001f3136000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3134000-0x000001f3135000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3133000-0x000001f3134000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3132000-0x000001f3133000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3131000-0x000001f3132000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3130000-0x000001f3131000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f312f000-0x000001f3130000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f312e000-0x000001f312f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f312d000-0x000001f312e000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f312c000-0x000001f312d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f312b000-0x000001f312c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f312a000-0x000001f312b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3129000-0x000001f312a000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3128000-0x000001f3129000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3127000-0x000001f3128000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3126000-0x000001f3127000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3125000-0x000001f3126000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3124000-0x000001f3125000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3123000-0x000001f3124000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3122000-0x000001f3123000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3121000-0x000001f3122000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3120000-0x000001f3121000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f311f000-0x000001f3120000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f311e000-0x000001f311f000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f311d000-0x000001f311e000] alloc_low_pages+0x103/0x130
[    0.000000] init_memory_mapping: [mem 0x1f4000000-0x1f47fffff]
[    0.000000]  [mem 0x1f4000000-0x1f47fffff] page 4k
[    0.000000] memblock_reserve: [0x000001f311c000-0x000001f311d000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f311b000-0x000001f311c000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f311a000-0x000001f311b000] alloc_low_pages+0x103/0x130
[    0.000000] memblock_reserve: [0x000001f3119000-0x000001f311a000] alloc_low_pages+0x103/0x130
[    0.000000] Kernel panic - not syncing: initrd too large to handle, disabling initrd (348401664 needed, 524288 available)
[    0.000000] 
[    0.000000] Pid: 0, comm: swapper Not tainted 3.7.0-rc4upstream-00042-g1b66ccf #1
[    0.000000] Call Trace:
[    0.000000]  [<ffffffff81633a5c>] panic+0xbf/0x1df
[    0.000000]  [<ffffffff81ac00e1>] setup_arch+0x728/0xb29
[    0.000000]  [<ffffffff81633c48>] ? printk+0x48/0x4a
[    0.000000]  [<ffffffff81aba897>] start_kernel+0x90/0x39e
[    0.000000]  [<ffffffff81aba356>] x86_64_start_reservations+0x131/0x136
[    0.000000]  [<ffffffff81abca38>] xen_start_kernel+0x546/0x548

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-11-08  1:40                 ` Konrad Rzeszutek Wilk
@ 2012-11-08  4:06                   ` Yinghai Lu
  2012-11-09 20:31                     ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-08  4:06 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: H. Peter Anvin, Stefano Stabellini, Andrew Morton, Jacob Shin,
	Ingo Molnar, Thomas Gleixner, Tejun Heo, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1855 bytes --]

On Wed, Nov 7, 2012 at 5:40 PM, Konrad Rzeszutek Wilk
<konrad.wilk@oracle.com> wrote:
>
> I ran in a problem with launching an 8GB guest. When launching a 4GB it worked
> fine, but with 8GB I get:
>
> .000000] init_memory_mapping: [mem 0x1f4000000-0x1f47fffff]
> [    0.000000]  [mem 0x1f4000000-0x1f47fffff] page 4k
> [    0.000000] memblock_reserve: [0x000001f311c000-0x000001f311d000] alloc_low_pages+0x103/0x130
> [    0.000000] memblock_reserve: [0x000001f311b000-0x000001f311c000] alloc_low_pages+0x103/0x130
> [    0.000000] memblock_reserve: [0x000001f311a000-0x000001f311b000] alloc_low_pages+0x103/0x130
> [    0.000000] memblock_reserve: [0x000001f3119000-0x000001f311a000] alloc_low_pages+0x103/0x130
> [    0.000000] Kernel panic - not syncing: initrd too large to handle, disabling initrd (348401664 needed, 524288 available)
> [    0.000000]
> [    0.000000] Pid: 0, comm: swapper Not tainted 3.7.0-rc4upstream-00042-g1b66ccf #1
> [    0.000000] Call Trace:
> [    0.000000]  [<ffffffff81633a5c>] panic+0xbf/0x1df
> [    0.000000]  [<ffffffff81ac00e1>] setup_arch+0x728/0xb29
> [    0.000000]  [<ffffffff81633c48>] ? printk+0x48/0x4a
> [    0.000000]  [<ffffffff81aba897>] start_kernel+0x90/0x39e
> [    0.000000]  [<ffffffff81aba356>] x86_64_start_reservations+0x131/0x136
> [    0.000000]  [<ffffffff81abca38>] xen_start_kernel+0x546/0x548
>

xen memmap

[    0.000000] Xen: [mem 0x0000000000000000-0x000000000009ffff] usable
[    0.000000] Xen: [mem 0x00000000000a0000-0x00000000000fffff] reserved
[    0.000000] Xen: [mem 0x0000000000100000-0x00000001f47fffff] usable

there is no hole under 4G, trigger the bug about max_low_pfn_mapped updating in
add_pfn_range_mapped().

please check attached patch, that should fix the problem.

then I will fold it into corresponding commit that instroduce
add_pfn_range_mapped().

Thanks

Yinghai

[-- Attachment #2: fix_max_low_pfn_mapped.patch --]
[-- Type: application/octet-stream, Size: 692 bytes --]

---
 arch/x86/mm/init.c |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Index: linux-2.6/arch/x86/mm/init.c
===================================================================
--- linux-2.6.orig/arch/x86/mm/init.c
+++ linux-2.6/arch/x86/mm/init.c
@@ -305,8 +305,9 @@ static void add_pfn_range_mapped(unsigne
 
 	max_pfn_mapped = max(max_pfn_mapped, end_pfn);
 
-	if (end_pfn <= (1UL << (32 - PAGE_SHIFT)))
-		max_low_pfn_mapped = max(max_low_pfn_mapped, end_pfn);
+	if (start_pfn < (1UL<<(32-PAGE_SHIFT)))
+		max_low_pfn_mapped = max(max_low_pfn_mapped,
+					 min(end_pfn, 1UL<<(32-PAGE_SHIFT)));
 }
 
 bool pfn_range_is_mapped(unsigned long start_pfn, unsigned long end_pfn)

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-11-08  4:06                   ` Yinghai Lu
@ 2012-11-09 20:31                     ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-09 20:31 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: H. Peter Anvin, Stefano Stabellini, Andrew Morton, Jacob Shin,
	Ingo Molnar, Thomas Gleixner, Tejun Heo, linux-kernel

On Wed, Nov 7, 2012 at 8:06 PM, Yinghai Lu <yinghai@kernel.org> wrote:
> On Wed, Nov 7, 2012 at 5:40 PM, Konrad Rzeszutek Wilk
> <konrad.wilk@oracle.com> wrote:
>>
>> I ran in a problem with launching an 8GB guest. When launching a 4GB it worked
>> fine, but with 8GB I get:
>>
>> .000000] init_memory_mapping: [mem 0x1f4000000-0x1f47fffff]
>> [    0.000000]  [mem 0x1f4000000-0x1f47fffff] page 4k
>> [    0.000000] memblock_reserve: [0x000001f311c000-0x000001f311d000] alloc_low_pages+0x103/0x130
>> [    0.000000] memblock_reserve: [0x000001f311b000-0x000001f311c000] alloc_low_pages+0x103/0x130
>> [    0.000000] memblock_reserve: [0x000001f311a000-0x000001f311b000] alloc_low_pages+0x103/0x130
>> [    0.000000] memblock_reserve: [0x000001f3119000-0x000001f311a000] alloc_low_pages+0x103/0x130
>> [    0.000000] Kernel panic - not syncing: initrd too large to handle, disabling initrd (348401664 needed, 524288 available)
>> [    0.000000]
>> [    0.000000] Pid: 0, comm: swapper Not tainted 3.7.0-rc4upstream-00042-g1b66ccf #1
>> [    0.000000] Call Trace:
>> [    0.000000]  [<ffffffff81633a5c>] panic+0xbf/0x1df
>> [    0.000000]  [<ffffffff81ac00e1>] setup_arch+0x728/0xb29
>> [    0.000000]  [<ffffffff81633c48>] ? printk+0x48/0x4a
>> [    0.000000]  [<ffffffff81aba897>] start_kernel+0x90/0x39e
>> [    0.000000]  [<ffffffff81aba356>] x86_64_start_reservations+0x131/0x136
>> [    0.000000]  [<ffffffff81abca38>] xen_start_kernel+0x546/0x548
>>
>
> xen memmap
>
> [    0.000000] Xen: [mem 0x0000000000000000-0x000000000009ffff] usable
> [    0.000000] Xen: [mem 0x00000000000a0000-0x00000000000fffff] reserved
> [    0.000000] Xen: [mem 0x0000000000100000-0x00000001f47fffff] usable
>
> there is no hole under 4G, trigger the bug about max_low_pfn_mapped updating in
> add_pfn_range_mapped().
>
> please check attached patch, that should fix the problem.
>
> then I will fold it into corresponding commit that instroduce
> add_pfn_range_mapped().
>

If you did not try the patch yet, please get for-x86-mm again.
I folded that patch into that commit about add_pfn_range_mapped.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy
  2012-11-03 21:35         ` Yinghai Lu
  2012-11-03 21:37           ` H. Peter Anvin
@ 2012-11-12 19:30           ` Konrad Rzeszutek Wilk
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
  1 sibling, 1 reply; 115+ messages in thread
From: Konrad Rzeszutek Wilk @ 2012-11-12 19:30 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: H. Peter Anvin, Ingo Molnar, Stefano Stabellini, Thomas Gleixner,
	Jacob Shin, Tejun Heo, linux-kernel

On Sat, Nov 03, 2012 at 02:35:54PM -0700, Yinghai Lu wrote:
> On Tue, Oct 30, 2012 at 7:47 AM, Yinghai Lu <yinghai@kernel.org> wrote:
> > On Tue, Oct 30, 2012 at 6:44 AM, Konrad Rzeszutek Wilk
> > <konrad@kernel.org> wrote:
> >> On Wed, Oct 10, 2012 at 11:13:45PM -0700, Yinghai Lu wrote:
> >> So which branch should I try out? Do you have one with all of the
> >> required patches so I can just do a 3.7-rc3 'git pull' and try it out?
> >
> > add for-x86-mm-test branch, and it is based on 3.7-rc3, and merged
> > with for-x86-mm branch.
> >
> > so you can try
> >         git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
> > for-x86-mm-test
> >
> > there is conflicts between for-x86-mm and 3.7-rc3, and attached patch
> > could be used to fix them
> >
> 
> Peter/Ingo,
> 
> can you put for-x86-mm-test to tip for more testing?

Yinghai,

I've tested it the patches with the modifications and they were
working.

Can you repost them once more so that I can review the last time
and provide the proper acks, etc.


> 
> or you want to rebase the whole patchset?
> 
> Thanks
> 
> Yinghai
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock.
  2012-11-12 19:30           ` Konrad Rzeszutek Wilk
@ 2012-11-12 21:17             ` Yinghai Lu
  2012-11-12 21:17               ` [PATCH 01/46] x86, mm: Add global page_size_mask and probe one time only Yinghai Lu
                                 ` (45 more replies)
  0 siblings, 46 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:17 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

rebase patchset together tip/x86/mm2 on top of linus v3.7-rc4

so this one include patchset : x86, mm: init_memory_mapping cleanup
in tip/x86/mm2
---
Current kernel init memory mapping between [0, TOML) and [4G, TOMH)
Some AMD systems have mem hole between 4G and TOMH, around 1T.
According to HPA, we should only mapping ram range.
1. Seperate calculate_table_space_size and find_early_page_table out with
   init_memory_mapping.
2. For all ranges, will allocate page table one time
3. init mapping for ram range one by one.
---

pre mapping page table patcheset includes:
1. use brk to mapping first PMD_SIZE range under end of ram.
2. top down to initialize page table range by range.
3. get rid of calculate_page_table, and find_early_page_table.
4. remove early_ioremap in page table accessing.
5. remove workaround in xen to mark page RO.

v2: changes, update xen interface about pagetable_reserve, so not
   use pgt_buf_* in xen code directly.
v3: use range top-down to initialize page table, so will not use
   calculating/find early table anymore.
   also reorder the patches sequence.
v4: add mapping_mark_page_ro to fix xen, also move pgt_buf_* to init.c
    and merge alloc_low_page(), and for 32bit need to add alloc_low_pages
    to fix 32bit kmap setting.
v5: remove mark_page_ro workaround  and add another 5 cleanup patches.
v6: rebase on v3.7-rc4 and add 4 cleanup patches.
v7: fix max_low_pfn_mapped for xen domu memmap that does not have hole under 4g
    add pfn_range_is_mapped() calling for left over.

could be found at:
        git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git for-x86-mm

4d02fa2: x86, mm: Let "memmap=" take more entries one time
69c9485: mm: Kill NO_BOOTMEM version free_all_bootmem_node()
27a6151: sparc, mm: Remove calling of free_all_bootmem_node()
60d9772: x86, mm: kill numa_64.h
37c4eb8: x86, mm: kill numa_free_all_bootmem()
96e6c74: x86, mm: Use clamp_t() in init_range_memory_mapping
714535a: x86, mm: Move after_bootmem to mm_internel.h
5b10dbc: x86, mm: Unifying after_bootmem for 32bit and 64bit
84c1df0: x86, mm: use limit_pfn for end pfn
1108331: x86, mm: use pfn instead of pos in split_mem_range
7c1bf23: x86, mm: use PFN_DOWN in split_mem_range()
3ba0781: x86, mm: use round_up/down in split_mem_range()
34fb23f: x86, mm: Add check before clear pte above max_low_pfn on 32bit
df4a7d9: x86, mm: Move function declaration into mm_internal.h
c9b0822: x86, mm: change low/hignmem_pfn_init to static on 32bit
0467f80: x86, mm: Move init_gbpages() out of setup.c
28170b7: x86, mm: Move back pgt_buf_* to mm/init.c
b678b7c: x86, mm: only call early_ioremap_page_table_range_init() once
c31ef78: x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages
ef4d350: x86, mm: Add alloc_low_pages(num)
ceaa6ce: x86, mm, Xen: Remove mapping_pagetable_reserve()
8782e42: x86, mm: Move min_pfn_mapped back to mm/init.c
fd3fb05: x86, mm: Merge alloc_low_page between 64bit and 32bit
2c0d92c: x86, mm: Remove parameter in alloc_low_page for 64bit
2a0c505: x86, mm: Remove early_memremap workaround for page table accessing on 64bit
e14b94f: x86, mm: setup page table in top-down
6db7bfb: x86, mm: Break down init_all_memory_mapping
2f799be: x86, mm: Don't clear page table if range is ram
686f1c4: x86, mm: Use big page size for small memory range
a473cf6: x86, mm: Align start address to correct big page size
114b025: x86, mm: relocate initrd under all mem for 64bit
bb3c507: x86, mm: Only direct map addresses that are marked as E820_RAM
7d59f08: x86, mm: use pfn_range_is_mapped() with reserve_initrd
2d2a11e: x86, mm: use pfn_range_is_mapped() with gart
e108072: x86, mm: use pfn_range_is_mapped() with CPA
4894260: x86, mm: Fixup code testing if a pfn is direct mapped
b0771c3: x86, mm: if kernel .text .data .bss are not marked as E820_RAM, complain and fix
3159e6b: x86, mm: Set memblock initial limit to 1M
593cf88: x86, mm: Separate out calculate_table_space_size()
fba94e2: x86, mm: Find early page table buffer together
e1585d2: x86, mm: Change find_early_table_space() paramters
6a93a89: x86, mm: Revert back good_end setting for 64bit
306c44a: x86, mm: Move init_memory_mapping calling out of setup.c
fb40d13: x86, mm: Move down find_early_table_space()
e748645: x86, mm: Split out split_mem_range from init_memory_mapping
e419542: x86, mm: Add global page_size_mask and probe one time only

 arch/sparc/mm/init_64.c              |   24 +-
 arch/x86/include/asm/init.h          |   21 +--
 arch/x86/include/asm/numa.h          |    2 -
 arch/x86/include/asm/numa_64.h       |    6 -
 arch/x86/include/asm/page_types.h    |    2 +
 arch/x86/include/asm/pgtable.h       |    2 +
 arch/x86/include/asm/pgtable_types.h |    1 -
 arch/x86/include/asm/x86_init.h      |   12 -
 arch/x86/kernel/acpi/boot.c          |    1 -
 arch/x86/kernel/amd_gart_64.c        |    5 +-
 arch/x86/kernel/cpu/amd.c            |    9 +-
 arch/x86/kernel/cpu/intel.c          |    1 -
 arch/x86/kernel/e820.c               |   16 ++-
 arch/x86/kernel/setup.c              |  121 ++++------
 arch/x86/kernel/x86_init.c           |    4 -
 arch/x86/mm/init.c                   |  446 ++++++++++++++++++++++------------
 arch/x86/mm/init_32.c                |  106 +++++---
 arch/x86/mm/init_64.c                |  140 ++++-------
 arch/x86/mm/mm_internal.h            |   19 ++
 arch/x86/mm/numa_64.c                |   13 -
 arch/x86/mm/pageattr.c               |   16 +-
 arch/x86/platform/efi/efi.c          |    7 +-
 arch/x86/xen/mmu.c                   |   28 ---
 include/linux/mm.h                   |    1 -
 mm/nobootmem.c                       |   14 -
 25 files changed, 513 insertions(+), 504 deletions(-)
 delete mode 100644 arch/x86/include/asm/numa_64.h
 create mode 100644 arch/x86/mm/mm_internal.h

-- 
1.7.7


^ permalink raw reply	[flat|nested] 115+ messages in thread

* [PATCH 01/46] x86, mm: Add global page_size_mask and probe one time only
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
@ 2012-11-12 21:17               ` Yinghai Lu
  2012-11-12 21:17               ` [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping Yinghai Lu
                                 ` (44 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:17 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Now we pass around use_gbpages and use_pse for calculating page table size,
Later we will need to call init_memory_mapping for every ram range one by one,
that mean those calculation will be done several times.

Those information are the same for all ram range and could be stored in
page_size_mask and could be probed it one time only.

Move that probing code out of init_memory_mapping into separated function
probe_page_size_mask(), and call it before all init_memory_mapping.

Suggested-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
---
 arch/x86/include/asm/pgtable.h |    1 +
 arch/x86/kernel/setup.c        |    1 +
 arch/x86/mm/init.c             |   55 ++++++++++++++++++---------------------
 3 files changed, 27 insertions(+), 30 deletions(-)

diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
index a1f780d..98ac76d 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -602,6 +602,7 @@ static inline int pgd_none(pgd_t pgd)
 #ifndef __ASSEMBLY__
 
 extern int direct_gbpages;
+void probe_page_size_mask(void);
 
 /* local pte updates need not use xchg for locking */
 static inline pte_t native_local_ptep_get_and_clear(pte_t *ptep)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index ca45696..01fb5f9 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -913,6 +913,7 @@ void __init setup_arch(char **cmdline_p)
 	setup_real_mode();
 
 	init_gbpages();
+	probe_page_size_mask();
 
 	/* max_pfn_mapped is updated here */
 	max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index d7aea41..aa5b0da 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -35,6 +35,7 @@ struct map_range {
 	unsigned page_size_mask;
 };
 
+static int page_size_mask;
 /*
  * First calculate space needed for kernel direct mapping page tables to cover
  * mr[0].start to mr[nr_range - 1].end, while accounting for possible 2M and 1GB
@@ -94,6 +95,30 @@ static void __init find_early_table_space(struct map_range *mr, int nr_range)
 		(pgt_buf_top << PAGE_SHIFT) - 1);
 }
 
+void probe_page_size_mask(void)
+{
+#if !defined(CONFIG_DEBUG_PAGEALLOC) && !defined(CONFIG_KMEMCHECK)
+	/*
+	 * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages.
+	 * This will simplify cpa(), which otherwise needs to support splitting
+	 * large pages into small in interrupt context, etc.
+	 */
+	if (direct_gbpages)
+		page_size_mask |= 1 << PG_LEVEL_1G;
+	if (cpu_has_pse)
+		page_size_mask |= 1 << PG_LEVEL_2M;
+#endif
+
+	/* Enable PSE if available */
+	if (cpu_has_pse)
+		set_in_cr4(X86_CR4_PSE);
+
+	/* Enable PGE if available */
+	if (cpu_has_pge) {
+		set_in_cr4(X86_CR4_PGE);
+		__supported_pte_mask |= _PAGE_GLOBAL;
+	}
+}
 void __init native_pagetable_reserve(u64 start, u64 end)
 {
 	memblock_reserve(start, end - start);
@@ -129,45 +154,15 @@ static int __meminit save_mr(struct map_range *mr, int nr_range,
 unsigned long __init_refok init_memory_mapping(unsigned long start,
 					       unsigned long end)
 {
-	unsigned long page_size_mask = 0;
 	unsigned long start_pfn, end_pfn;
 	unsigned long ret = 0;
 	unsigned long pos;
-
 	struct map_range mr[NR_RANGE_MR];
 	int nr_range, i;
-	int use_pse, use_gbpages;
 
 	printk(KERN_INFO "init_memory_mapping: [mem %#010lx-%#010lx]\n",
 	       start, end - 1);
 
-#if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KMEMCHECK)
-	/*
-	 * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages.
-	 * This will simplify cpa(), which otherwise needs to support splitting
-	 * large pages into small in interrupt context, etc.
-	 */
-	use_pse = use_gbpages = 0;
-#else
-	use_pse = cpu_has_pse;
-	use_gbpages = direct_gbpages;
-#endif
-
-	/* Enable PSE if available */
-	if (cpu_has_pse)
-		set_in_cr4(X86_CR4_PSE);
-
-	/* Enable PGE if available */
-	if (cpu_has_pge) {
-		set_in_cr4(X86_CR4_PGE);
-		__supported_pte_mask |= _PAGE_GLOBAL;
-	}
-
-	if (use_gbpages)
-		page_size_mask |= 1 << PG_LEVEL_1G;
-	if (use_pse)
-		page_size_mask |= 1 << PG_LEVEL_2M;
-
 	memset(mr, 0, sizeof(mr));
 	nr_range = 0;
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
  2012-11-12 21:17               ` [PATCH 01/46] x86, mm: Add global page_size_mask and probe one time only Yinghai Lu
@ 2012-11-12 21:17               ` Yinghai Lu
  2012-11-13  5:51                 ` Yasuaki Ishimatsu
  2012-11-12 21:17               ` [PATCH 03/46] x86, mm: Move down find_early_table_space() Yinghai Lu
                                 ` (43 subsequent siblings)
  45 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:17 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

So make init_memory_mapping smaller and readable.

Suggested-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
---
 arch/x86/mm/init.c |   42 ++++++++++++++++++++++++++----------------
 1 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index aa5b0da..6d8e102 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -146,25 +146,13 @@ static int __meminit save_mr(struct map_range *mr, int nr_range,
 	return nr_range;
 }
 
-/*
- * Setup the direct mapping of the physical memory at PAGE_OFFSET.
- * This runs before bootmem is initialized and gets pages directly from
- * the physical memory. To access them they are temporarily mapped.
- */
-unsigned long __init_refok init_memory_mapping(unsigned long start,
-					       unsigned long end)
+static int __meminit split_mem_range(struct map_range *mr, int nr_range,
+				     unsigned long start,
+				     unsigned long end)
 {
 	unsigned long start_pfn, end_pfn;
-	unsigned long ret = 0;
 	unsigned long pos;
-	struct map_range mr[NR_RANGE_MR];
-	int nr_range, i;
-
-	printk(KERN_INFO "init_memory_mapping: [mem %#010lx-%#010lx]\n",
-	       start, end - 1);
-
-	memset(mr, 0, sizeof(mr));
-	nr_range = 0;
+	int i;
 
 	/* head if not big page alignment ? */
 	start_pfn = start >> PAGE_SHIFT;
@@ -258,6 +246,28 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 			(mr[i].page_size_mask & (1<<PG_LEVEL_1G))?"1G":(
 			 (mr[i].page_size_mask & (1<<PG_LEVEL_2M))?"2M":"4k"));
 
+	return nr_range;
+}
+
+/*
+ * Setup the direct mapping of the physical memory at PAGE_OFFSET.
+ * This runs before bootmem is initialized and gets pages directly from
+ * the physical memory. To access them they are temporarily mapped.
+ */
+unsigned long __init_refok init_memory_mapping(unsigned long start,
+					       unsigned long end)
+{
+	struct map_range mr[NR_RANGE_MR];
+	unsigned long ret = 0;
+	int nr_range, i;
+
+	pr_info("init_memory_mapping: [mem %#010lx-%#010lx]\n",
+	       start, end - 1);
+
+	memset(mr, 0, sizeof(mr));
+	nr_range = 0;
+	nr_range = split_mem_range(mr, nr_range, start, end);
+
 	/*
 	 * Find space for the kernel direct mapping tables.
 	 *
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 03/46] x86, mm: Move down find_early_table_space()
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
  2012-11-12 21:17               ` [PATCH 01/46] x86, mm: Add global page_size_mask and probe one time only Yinghai Lu
  2012-11-12 21:17               ` [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping Yinghai Lu
@ 2012-11-12 21:17               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 04/46] x86, mm: Move init_memory_mapping calling out of setup.c Yinghai Lu
                                 ` (42 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:17 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

It will need to call split_mem_range().
Move it down after that to avoid extra declaration.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |  117 ++++++++++++++++++++++++++--------------------------
 1 files changed, 59 insertions(+), 58 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 6d8e102..4a372d7 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -36,64 +36,6 @@ struct map_range {
 };
 
 static int page_size_mask;
-/*
- * First calculate space needed for kernel direct mapping page tables to cover
- * mr[0].start to mr[nr_range - 1].end, while accounting for possible 2M and 1GB
- * pages. Then find enough contiguous space for those page tables.
- */
-static void __init find_early_table_space(struct map_range *mr, int nr_range)
-{
-	int i;
-	unsigned long puds = 0, pmds = 0, ptes = 0, tables;
-	unsigned long start = 0, good_end;
-	phys_addr_t base;
-
-	for (i = 0; i < nr_range; i++) {
-		unsigned long range, extra;
-
-		range = mr[i].end - mr[i].start;
-		puds += (range + PUD_SIZE - 1) >> PUD_SHIFT;
-
-		if (mr[i].page_size_mask & (1 << PG_LEVEL_1G)) {
-			extra = range - ((range >> PUD_SHIFT) << PUD_SHIFT);
-			pmds += (extra + PMD_SIZE - 1) >> PMD_SHIFT;
-		} else {
-			pmds += (range + PMD_SIZE - 1) >> PMD_SHIFT;
-		}
-
-		if (mr[i].page_size_mask & (1 << PG_LEVEL_2M)) {
-			extra = range - ((range >> PMD_SHIFT) << PMD_SHIFT);
-#ifdef CONFIG_X86_32
-			extra += PMD_SIZE;
-#endif
-			ptes += (extra + PAGE_SIZE - 1) >> PAGE_SHIFT;
-		} else {
-			ptes += (range + PAGE_SIZE - 1) >> PAGE_SHIFT;
-		}
-	}
-
-	tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
-	tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE);
-	tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE);
-
-#ifdef CONFIG_X86_32
-	/* for fixmap */
-	tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE);
-#endif
-	good_end = max_pfn_mapped << PAGE_SHIFT;
-
-	base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE);
-	if (!base)
-		panic("Cannot find space for the kernel page tables");
-
-	pgt_buf_start = base >> PAGE_SHIFT;
-	pgt_buf_end = pgt_buf_start;
-	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
-
-	printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx]\n",
-		mr[nr_range - 1].end - 1, pgt_buf_start << PAGE_SHIFT,
-		(pgt_buf_top << PAGE_SHIFT) - 1);
-}
 
 void probe_page_size_mask(void)
 {
@@ -250,6 +192,65 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 }
 
 /*
+ * First calculate space needed for kernel direct mapping page tables to cover
+ * mr[0].start to mr[nr_range - 1].end, while accounting for possible 2M and 1GB
+ * pages. Then find enough contiguous space for those page tables.
+ */
+static void __init find_early_table_space(struct map_range *mr, int nr_range)
+{
+	int i;
+	unsigned long puds = 0, pmds = 0, ptes = 0, tables;
+	unsigned long start = 0, good_end;
+	phys_addr_t base;
+
+	for (i = 0; i < nr_range; i++) {
+		unsigned long range, extra;
+
+		range = mr[i].end - mr[i].start;
+		puds += (range + PUD_SIZE - 1) >> PUD_SHIFT;
+
+		if (mr[i].page_size_mask & (1 << PG_LEVEL_1G)) {
+			extra = range - ((range >> PUD_SHIFT) << PUD_SHIFT);
+			pmds += (extra + PMD_SIZE - 1) >> PMD_SHIFT;
+		} else {
+			pmds += (range + PMD_SIZE - 1) >> PMD_SHIFT;
+		}
+
+		if (mr[i].page_size_mask & (1 << PG_LEVEL_2M)) {
+			extra = range - ((range >> PMD_SHIFT) << PMD_SHIFT);
+#ifdef CONFIG_X86_32
+			extra += PMD_SIZE;
+#endif
+			ptes += (extra + PAGE_SIZE - 1) >> PAGE_SHIFT;
+		} else {
+			ptes += (range + PAGE_SIZE - 1) >> PAGE_SHIFT;
+		}
+	}
+
+	tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
+	tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE);
+	tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE);
+
+#ifdef CONFIG_X86_32
+	/* for fixmap */
+	tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE);
+#endif
+	good_end = max_pfn_mapped << PAGE_SHIFT;
+
+	base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE);
+	if (!base)
+		panic("Cannot find space for the kernel page tables");
+
+	pgt_buf_start = base >> PAGE_SHIFT;
+	pgt_buf_end = pgt_buf_start;
+	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
+
+	printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx]\n",
+		mr[nr_range - 1].end - 1, pgt_buf_start << PAGE_SHIFT,
+		(pgt_buf_top << PAGE_SHIFT) - 1);
+}
+
+/*
  * Setup the direct mapping of the physical memory at PAGE_OFFSET.
  * This runs before bootmem is initialized and gets pages directly from
  * the physical memory. To access them they are temporarily mapped.
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 04/46] x86, mm: Move init_memory_mapping calling out of setup.c
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (2 preceding siblings ...)
  2012-11-12 21:17               ` [PATCH 03/46] x86, mm: Move down find_early_table_space() Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 05/46] x86, mm: Revert back good_end setting for 64bit Yinghai Lu
                                 ` (41 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Now init_memory_mapping is called two times, later will be called for every
ram ranges.

Could put all related init_mem calling together and out of setup.c.

Actually, it reverts commit 1bbbbe7
    x86: Exclude E820_RESERVED regions and memory holes above 4 GB from direct mapping.
will address that later with complete solution include handling hole under 4g.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
---
 arch/x86/include/asm/init.h    |    1 -
 arch/x86/include/asm/pgtable.h |    2 +-
 arch/x86/kernel/setup.c        |   27 +--------------------------
 arch/x86/mm/init.c             |   19 ++++++++++++++++++-
 4 files changed, 20 insertions(+), 29 deletions(-)

diff --git a/arch/x86/include/asm/init.h b/arch/x86/include/asm/init.h
index adcc0ae..4f13998 100644
--- a/arch/x86/include/asm/init.h
+++ b/arch/x86/include/asm/init.h
@@ -12,7 +12,6 @@ kernel_physical_mapping_init(unsigned long start,
 			     unsigned long end,
 			     unsigned long page_size_mask);
 
-
 extern unsigned long __initdata pgt_buf_start;
 extern unsigned long __meminitdata pgt_buf_end;
 extern unsigned long __meminitdata pgt_buf_top;
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
index 98ac76d..dd1a888 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -602,7 +602,7 @@ static inline int pgd_none(pgd_t pgd)
 #ifndef __ASSEMBLY__
 
 extern int direct_gbpages;
-void probe_page_size_mask(void);
+void init_mem_mapping(void);
 
 /* local pte updates need not use xchg for locking */
 static inline pte_t native_local_ptep_get_and_clear(pte_t *ptep)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 01fb5f9..23b079f 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -913,34 +913,9 @@ void __init setup_arch(char **cmdline_p)
 	setup_real_mode();
 
 	init_gbpages();
-	probe_page_size_mask();
 
-	/* max_pfn_mapped is updated here */
-	max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
-	max_pfn_mapped = max_low_pfn_mapped;
+	init_mem_mapping();
 
-#ifdef CONFIG_X86_64
-	if (max_pfn > max_low_pfn) {
-		int i;
-		unsigned long start, end;
-		unsigned long start_pfn, end_pfn;
-
-		for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn,
-							 NULL) {
-
-			end = PFN_PHYS(end_pfn);
-			if (end <= (1UL<<32))
-				continue;
-
-			start = PFN_PHYS(start_pfn);
-			max_pfn_mapped = init_memory_mapping(
-						max((1UL<<32), start), end);
-		}
-
-		/* can we preseve max_low_pfn ?*/
-		max_low_pfn = max_pfn;
-	}
-#endif
 	memblock.current_limit = get_max_mapped();
 	dma_contiguous_reserve(0);
 
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 4a372d7..8927276 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -37,7 +37,7 @@ struct map_range {
 
 static int page_size_mask;
 
-void probe_page_size_mask(void)
+static void __init probe_page_size_mask(void)
 {
 #if !defined(CONFIG_DEBUG_PAGEALLOC) && !defined(CONFIG_KMEMCHECK)
 	/*
@@ -316,6 +316,23 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 	return ret >> PAGE_SHIFT;
 }
 
+void __init init_mem_mapping(void)
+{
+	probe_page_size_mask();
+
+	/* max_pfn_mapped is updated here */
+	max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
+	max_pfn_mapped = max_low_pfn_mapped;
+
+#ifdef CONFIG_X86_64
+	if (max_pfn > max_low_pfn) {
+		max_pfn_mapped = init_memory_mapping(1UL<<32,
+						     max_pfn<<PAGE_SHIFT);
+		/* can we preseve max_low_pfn ?*/
+		max_low_pfn = max_pfn;
+	}
+#endif
+}
 
 /*
  * devmem_is_allowed() checks to see if /dev/mem access to a certain address
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 05/46] x86, mm: Revert back good_end setting for 64bit
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (3 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 04/46] x86, mm: Move init_memory_mapping calling out of setup.c Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 06/46] x86, mm: Change find_early_table_space() paramters Yinghai Lu
                                 ` (40 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

After

| commit 8548c84da2f47e71bbbe300f55edb768492575f7
| Author: Takashi Iwai <tiwai@suse.de>
| Date:   Sun Oct 23 23:19:12 2011 +0200
|
|    x86: Fix S4 regression
|
|    Commit 4b239f458 ("x86-64, mm: Put early page table high") causes a S4
|    regression since 2.6.39, namely the machine reboots occasionally at S4
|    resume.  It doesn't happen always, overall rate is about 1/20.  But,
|    like other bugs, once when this happens, it continues to happen.
|
|    This patch fixes the problem by essentially reverting the memory
|    assignment in the older way.

Have some page table around 512M again, that will prevent kdump to find 512M
under 768M.

We need revert that reverting, so we could put page table high again for 64bit.

Takashi agreed that S4 regression could be something else.

	https://lkml.org/lkml/2012/6/15/182

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 8927276..8f57b12 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -234,8 +234,8 @@ static void __init find_early_table_space(struct map_range *mr, int nr_range)
 #ifdef CONFIG_X86_32
 	/* for fixmap */
 	tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE);
-#endif
 	good_end = max_pfn_mapped << PAGE_SHIFT;
+#endif
 
 	base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE);
 	if (!base)
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 06/46] x86, mm: Change find_early_table_space() paramters
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (4 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 05/46] x86, mm: Revert back good_end setting for 64bit Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 07/46] x86, mm: Find early page table buffer together Yinghai Lu
                                 ` (39 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

call split_mem_range inside the function.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 8f57b12..00089bf 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -196,12 +196,18 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
  * mr[0].start to mr[nr_range - 1].end, while accounting for possible 2M and 1GB
  * pages. Then find enough contiguous space for those page tables.
  */
-static void __init find_early_table_space(struct map_range *mr, int nr_range)
+static void __init find_early_table_space(unsigned long start, unsigned long end)
 {
 	int i;
 	unsigned long puds = 0, pmds = 0, ptes = 0, tables;
-	unsigned long start = 0, good_end;
+	unsigned long good_end;
 	phys_addr_t base;
+	struct map_range mr[NR_RANGE_MR];
+	int nr_range;
+
+	memset(mr, 0, sizeof(mr));
+	nr_range = 0;
+	nr_range = split_mem_range(mr, nr_range, start, end);
 
 	for (i = 0; i < nr_range; i++) {
 		unsigned long range, extra;
@@ -277,7 +283,7 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 	 * nodes are discovered.
 	 */
 	if (!after_bootmem)
-		find_early_table_space(mr, nr_range);
+		find_early_table_space(start, end);
 
 	for (i = 0; i < nr_range; i++)
 		ret = kernel_physical_mapping_init(mr[i].start, mr[i].end,
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 07/46] x86, mm: Find early page table buffer together
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (5 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 06/46] x86, mm: Change find_early_table_space() paramters Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 08/46] x86, mm: Separate out calculate_table_space_size() Yinghai Lu
                                 ` (38 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

We should not do that in every calling of init_memory_mapping.

At the same time need to move down early_memtest, and could remove after_bootmem
checking.

-v2: fix one early_memtest with 32bit by passing max_pfn_mapped instead.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   66 ++++++++++++++++++++++++++-------------------------
 1 files changed, 34 insertions(+), 32 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 00089bf..c273edb 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -275,16 +275,6 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 	nr_range = 0;
 	nr_range = split_mem_range(mr, nr_range, start, end);
 
-	/*
-	 * Find space for the kernel direct mapping tables.
-	 *
-	 * Later we should allocate these tables in the local node of the
-	 * memory mapped. Unfortunately this is done currently before the
-	 * nodes are discovered.
-	 */
-	if (!after_bootmem)
-		find_early_table_space(start, end);
-
 	for (i = 0; i < nr_range; i++)
 		ret = kernel_physical_mapping_init(mr[i].start, mr[i].end,
 						   mr[i].page_size_mask);
@@ -297,6 +287,36 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 
 	__flush_tlb_all();
 
+	return ret >> PAGE_SHIFT;
+}
+
+void __init init_mem_mapping(void)
+{
+	probe_page_size_mask();
+
+	/*
+	 * Find space for the kernel direct mapping tables.
+	 *
+	 * Later we should allocate these tables in the local node of the
+	 * memory mapped. Unfortunately this is done currently before the
+	 * nodes are discovered.
+	 */
+#ifdef CONFIG_X86_64
+	find_early_table_space(0, max_pfn<<PAGE_SHIFT);
+#else
+	find_early_table_space(0, max_low_pfn<<PAGE_SHIFT);
+#endif
+	max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
+	max_pfn_mapped = max_low_pfn_mapped;
+
+#ifdef CONFIG_X86_64
+	if (max_pfn > max_low_pfn) {
+		max_pfn_mapped = init_memory_mapping(1UL<<32,
+						     max_pfn<<PAGE_SHIFT);
+		/* can we preseve max_low_pfn ?*/
+		max_low_pfn = max_pfn;
+	}
+#endif
 	/*
 	 * Reserve the kernel pagetable pages we used (pgt_buf_start -
 	 * pgt_buf_end) and free the other ones (pgt_buf_end - pgt_buf_top)
@@ -312,32 +332,14 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 	 * RO all the pagetable pages, including the ones that are beyond
 	 * pgt_buf_end at that time.
 	 */
-	if (!after_bootmem && pgt_buf_end > pgt_buf_start)
+	if (pgt_buf_end > pgt_buf_start)
 		x86_init.mapping.pagetable_reserve(PFN_PHYS(pgt_buf_start),
 				PFN_PHYS(pgt_buf_end));
 
-	if (!after_bootmem)
-		early_memtest(start, end);
+	/* stop the wrong using */
+	pgt_buf_top = 0;
 
-	return ret >> PAGE_SHIFT;
-}
-
-void __init init_mem_mapping(void)
-{
-	probe_page_size_mask();
-
-	/* max_pfn_mapped is updated here */
-	max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
-	max_pfn_mapped = max_low_pfn_mapped;
-
-#ifdef CONFIG_X86_64
-	if (max_pfn > max_low_pfn) {
-		max_pfn_mapped = init_memory_mapping(1UL<<32,
-						     max_pfn<<PAGE_SHIFT);
-		/* can we preseve max_low_pfn ?*/
-		max_low_pfn = max_pfn;
-	}
-#endif
+	early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
 }
 
 /*
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 08/46] x86, mm: Separate out calculate_table_space_size()
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (6 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 07/46] x86, mm: Find early page table buffer together Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 09/46] x86, mm: Set memblock initial limit to 1M Yinghai Lu
                                 ` (37 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

It should take physical address range that will need to be mapped.
find_early_table_space should take range that pgt buff should be in.

Separating page table size calculating and finding early page table to
reduce confusing.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
---
 arch/x86/mm/init.c |   38 +++++++++++++++++++++++++++-----------
 1 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index c273edb..2b8091c 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -196,12 +196,10 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
  * mr[0].start to mr[nr_range - 1].end, while accounting for possible 2M and 1GB
  * pages. Then find enough contiguous space for those page tables.
  */
-static void __init find_early_table_space(unsigned long start, unsigned long end)
+static unsigned long __init calculate_table_space_size(unsigned long start, unsigned long end)
 {
 	int i;
 	unsigned long puds = 0, pmds = 0, ptes = 0, tables;
-	unsigned long good_end;
-	phys_addr_t base;
 	struct map_range mr[NR_RANGE_MR];
 	int nr_range;
 
@@ -240,9 +238,17 @@ static void __init find_early_table_space(unsigned long start, unsigned long end
 #ifdef CONFIG_X86_32
 	/* for fixmap */
 	tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE);
-	good_end = max_pfn_mapped << PAGE_SHIFT;
 #endif
 
+	return tables;
+}
+
+static void __init find_early_table_space(unsigned long start,
+					  unsigned long good_end,
+					  unsigned long tables)
+{
+	phys_addr_t base;
+
 	base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE);
 	if (!base)
 		panic("Cannot find space for the kernel page tables");
@@ -250,10 +256,6 @@ static void __init find_early_table_space(unsigned long start, unsigned long end
 	pgt_buf_start = base >> PAGE_SHIFT;
 	pgt_buf_end = pgt_buf_start;
 	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
-
-	printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx]\n",
-		mr[nr_range - 1].end - 1, pgt_buf_start << PAGE_SHIFT,
-		(pgt_buf_top << PAGE_SHIFT) - 1);
 }
 
 /*
@@ -292,6 +294,8 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 
 void __init init_mem_mapping(void)
 {
+	unsigned long tables, good_end, end;
+
 	probe_page_size_mask();
 
 	/*
@@ -302,10 +306,18 @@ void __init init_mem_mapping(void)
 	 * nodes are discovered.
 	 */
 #ifdef CONFIG_X86_64
-	find_early_table_space(0, max_pfn<<PAGE_SHIFT);
+	end = max_pfn << PAGE_SHIFT;
+	good_end = end;
 #else
-	find_early_table_space(0, max_low_pfn<<PAGE_SHIFT);
+	end = max_low_pfn << PAGE_SHIFT;
+	good_end = max_pfn_mapped << PAGE_SHIFT;
 #endif
+	tables = calculate_table_space_size(0, end);
+	find_early_table_space(0, good_end, tables);
+	printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] prealloc\n",
+		end - 1, pgt_buf_start << PAGE_SHIFT,
+		(pgt_buf_top << PAGE_SHIFT) - 1);
+
 	max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
 	max_pfn_mapped = max_low_pfn_mapped;
 
@@ -332,9 +344,13 @@ void __init init_mem_mapping(void)
 	 * RO all the pagetable pages, including the ones that are beyond
 	 * pgt_buf_end at that time.
 	 */
-	if (pgt_buf_end > pgt_buf_start)
+	if (pgt_buf_end > pgt_buf_start) {
+		printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] final\n",
+			end - 1, pgt_buf_start << PAGE_SHIFT,
+			(pgt_buf_end << PAGE_SHIFT) - 1);
 		x86_init.mapping.pagetable_reserve(PFN_PHYS(pgt_buf_start),
 				PFN_PHYS(pgt_buf_end));
+	}
 
 	/* stop the wrong using */
 	pgt_buf_top = 0;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 09/46] x86, mm: Set memblock initial limit to 1M
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (7 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 08/46] x86, mm: Separate out calculate_table_space_size() Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 10/46] x86, mm: if kernel .text .data .bss are not marked as E820_RAM, complain and fix Yinghai Lu
                                 ` (36 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

memblock_x86_fill() could double memory array.
If we set memblock.current_limit to 512M, so memory array could be around 512M.
So kdump will not get big range (like 512M) under 1024M.

Try to put it down under 1M, it would use about 4k or so, and that is limited.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/kernel/setup.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 23b079f..4bd8921 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -890,7 +890,7 @@ void __init setup_arch(char **cmdline_p)
 
 	cleanup_highmap();
 
-	memblock.current_limit = get_max_mapped();
+	memblock.current_limit = ISA_END_ADDRESS;
 	memblock_x86_fill();
 
 	/*
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 10/46] x86, mm: if kernel .text .data .bss are not marked as E820_RAM, complain and fix
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (8 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 09/46] x86, mm: Set memblock initial limit to 1M Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 11/46] x86, mm: Fixup code testing if a pfn is direct mapped Yinghai Lu
                                 ` (35 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

From: Jacob Shin <jacob.shin@amd.com>

There could be cases where user supplied memmap=exactmap memory
mappings do not mark the region where the kernel .text .data and
.bss reside as E820_RAM, as reported here:

https://lkml.org/lkml/2012/8/14/86

Handle it by complaining, and adding the range back into the e820.

Signed-off-by: Jacob Shin <jacob.shin@amd.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
---
 arch/x86/kernel/setup.c |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 4bd8921..d85cbd9 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -832,6 +832,20 @@ void __init setup_arch(char **cmdline_p)
 	insert_resource(&iomem_resource, &data_resource);
 	insert_resource(&iomem_resource, &bss_resource);
 
+	/*
+	 * Complain if .text .data and .bss are not marked as E820_RAM and
+	 * attempt to fix it by adding the range. We may have a confused BIOS,
+	 * or the user may have incorrectly supplied it via memmap=exactmap. If
+	 * we really are running on top non-RAM, we will crash later anyways.
+	 */
+	if (!e820_all_mapped(code_resource.start, __pa(__brk_limit), E820_RAM)) {
+		pr_warn(".text .data .bss are not marked as E820_RAM!\n");
+
+		e820_add_region(code_resource.start,
+				__pa(__brk_limit) - code_resource.start + 1,
+				E820_RAM);
+	}
+
 	trim_bios_range();
 #ifdef CONFIG_X86_32
 	if (ppro_with_ram_bug()) {
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 11/46] x86, mm: Fixup code testing if a pfn is direct mapped
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (9 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 10/46] x86, mm: if kernel .text .data .bss are not marked as E820_RAM, complain and fix Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 12/46] x86, mm: use pfn_range_is_mapped() with CPA Yinghai Lu
                                 ` (34 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

From: Jacob Shin <jacob.shin@amd.com>

Update code that previously assumed pfns [ 0 - max_low_pfn_mapped ) and
[ 4GB - max_pfn_mapped ) were always direct mapped, to now look up
pfn_mapped ranges instead.

-v2: change applying sequence to keep git bisecting working.
     so add dummy pfn_range_is_mapped(). - Yinghai Lu

Signed-off-by: Jacob Shin <jacob.shin@amd.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/page_types.h |    8 ++++++++
 arch/x86/kernel/cpu/amd.c         |    8 +++-----
 arch/x86/platform/efi/efi.c       |    7 +++----
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
index e21fdd1..45aae6e 100644
--- a/arch/x86/include/asm/page_types.h
+++ b/arch/x86/include/asm/page_types.h
@@ -51,6 +51,14 @@ static inline phys_addr_t get_max_mapped(void)
 	return (phys_addr_t)max_pfn_mapped << PAGE_SHIFT;
 }
 
+static inline bool pfn_range_is_mapped(unsigned long start_pfn,
+					unsigned long end_pfn)
+{
+	return end_pfn <= max_low_pfn_mapped ||
+	       (end_pfn > (1UL << (32 - PAGE_SHIFT)) &&
+		end_pfn <= max_pfn_mapped);
+}
+
 extern unsigned long init_memory_mapping(unsigned long start,
 					 unsigned long end);
 
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index f7e98a2..9619ba6 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -676,12 +676,10 @@ static void __cpuinit init_amd(struct cpuinfo_x86 *c)
 		 * benefit in doing so.
 		 */
 		if (!rdmsrl_safe(MSR_K8_TSEG_ADDR, &tseg)) {
+			unsigned long pfn = tseg >> PAGE_SHIFT;
+
 			printk(KERN_DEBUG "tseg: %010llx\n", tseg);
-			if ((tseg>>PMD_SHIFT) <
-				(max_low_pfn_mapped>>(PMD_SHIFT-PAGE_SHIFT)) ||
-				((tseg>>PMD_SHIFT) <
-				(max_pfn_mapped>>(PMD_SHIFT-PAGE_SHIFT)) &&
-				(tseg>>PMD_SHIFT) >= (1ULL<<(32 - PMD_SHIFT))))
+			if (pfn_range_is_mapped(pfn, pfn + 1))
 				set_memory_4k((unsigned long)__va(tseg), 1);
 		}
 	}
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index ad44391..36e53f0 100644
--- a/arch/x86/platform/efi/efi.c
+++ b/arch/x86/platform/efi/efi.c
@@ -835,7 +835,7 @@ void __init efi_enter_virtual_mode(void)
 	efi_memory_desc_t *md, *prev_md = NULL;
 	efi_status_t status;
 	unsigned long size;
-	u64 end, systab, end_pfn;
+	u64 end, systab, start_pfn, end_pfn;
 	void *p, *va, *new_memmap = NULL;
 	int count = 0;
 
@@ -888,10 +888,9 @@ void __init efi_enter_virtual_mode(void)
 		size = md->num_pages << EFI_PAGE_SHIFT;
 		end = md->phys_addr + size;
 
+		start_pfn = PFN_DOWN(md->phys_addr);
 		end_pfn = PFN_UP(end);
-		if (end_pfn <= max_low_pfn_mapped
-		    || (end_pfn > (1UL << (32 - PAGE_SHIFT))
-			&& end_pfn <= max_pfn_mapped)) {
+		if (pfn_range_is_mapped(start_pfn, end_pfn)) {
 			va = __va(md->phys_addr);
 
 			if (!(md->attribute & EFI_MEMORY_WB))
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 12/46] x86, mm: use pfn_range_is_mapped() with CPA
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (10 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 11/46] x86, mm: Fixup code testing if a pfn is direct mapped Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 13/46] x86, mm: use pfn_range_is_mapped() with gart Yinghai Lu
                                 ` (33 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

We are going to map ram only, so under max_low_pfn_mapped,
between 4g and max_pfn_mapped does not mean mapped at all.

Use pfn_range_is_mapped() directly.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/pageattr.c |   16 +++-------------
 1 files changed, 3 insertions(+), 13 deletions(-)

diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index a718e0d..44acfcd 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -551,16 +551,10 @@ static int split_large_page(pte_t *kpte, unsigned long address)
 	for (i = 0; i < PTRS_PER_PTE; i++, pfn += pfninc)
 		set_pte(&pbase[i], pfn_pte(pfn, ref_prot));
 
-	if (address >= (unsigned long)__va(0) &&
-		address < (unsigned long)__va(max_low_pfn_mapped << PAGE_SHIFT))
+	if (pfn_range_is_mapped(PFN_DOWN(__pa(address)),
+				PFN_DOWN(__pa(address)) + 1))
 		split_page_count(level);
 
-#ifdef CONFIG_X86_64
-	if (address >= (unsigned long)__va(1UL<<32) &&
-		address < (unsigned long)__va(max_pfn_mapped << PAGE_SHIFT))
-		split_page_count(level);
-#endif
-
 	/*
 	 * Install the new, split up pagetable.
 	 *
@@ -729,13 +723,9 @@ static int cpa_process_alias(struct cpa_data *cpa)
 	unsigned long vaddr;
 	int ret;
 
-	if (cpa->pfn >= max_pfn_mapped)
+	if (!pfn_range_is_mapped(cpa->pfn, cpa->pfn + 1))
 		return 0;
 
-#ifdef CONFIG_X86_64
-	if (cpa->pfn >= max_low_pfn_mapped && cpa->pfn < (1UL<<(32-PAGE_SHIFT)))
-		return 0;
-#endif
 	/*
 	 * No need to redo, when the primary call touched the direct
 	 * mapping already:
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 13/46] x86, mm: use pfn_range_is_mapped() with gart
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (11 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 12/46] x86, mm: use pfn_range_is_mapped() with CPA Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 14/46] x86, mm: use pfn_range_is_mapped() with reserve_initrd Yinghai Lu
                                 ` (32 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

We are going to map ram only, so under max_low_pfn_mapped,
between 4g and max_pfn_mapped does not mean mapped at all.

Use pfn_range_is_mapped() directly.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/kernel/amd_gart_64.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c
index e663112..b574b29 100644
--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -768,10 +768,9 @@ int __init gart_iommu_init(void)
 	aper_base	= info.aper_base;
 	end_pfn		= (aper_base>>PAGE_SHIFT) + (aper_size>>PAGE_SHIFT);
 
-	if (end_pfn > max_low_pfn_mapped) {
-		start_pfn = (aper_base>>PAGE_SHIFT);
+	start_pfn = PFN_DOWN(aper_base);
+	if (!pfn_range_is_mapped(start_pfn, end_pfn))
 		init_memory_mapping(start_pfn<<PAGE_SHIFT, end_pfn<<PAGE_SHIFT);
-	}
 
 	pr_info("PCI-DMA: using GART IOMMU.\n");
 	iommu_size = check_iommu_size(info.aper_base, aper_size);
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 14/46] x86, mm: use pfn_range_is_mapped() with reserve_initrd
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (12 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 13/46] x86, mm: use pfn_range_is_mapped() with gart Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 15/46] x86, mm: Only direct map addresses that are marked as E820_RAM Yinghai Lu
                                 ` (31 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

We are going to map ram only, so under max_low_pfn_mapped,
between 4g and max_pfn_mapped does not mean mapped at all.

Use pfn_range_is_mapped() to find out if range is mapped for initrd.

That could happen bootloader put initrd in range but user could
use memmap to carve some of range out.

Also during copying need to use early_memmap to map original initrd
for accessing.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/kernel/setup.c |   52 +++++++++++++++++++++++++---------------------
 1 files changed, 28 insertions(+), 24 deletions(-)

diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index d85cbd9..bd52f9d 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -317,20 +317,19 @@ static void __init relocate_initrd(void)
 	u64 ramdisk_image = boot_params.hdr.ramdisk_image;
 	u64 ramdisk_size  = boot_params.hdr.ramdisk_size;
 	u64 area_size     = PAGE_ALIGN(ramdisk_size);
-	u64 end_of_lowmem = max_low_pfn_mapped << PAGE_SHIFT;
 	u64 ramdisk_here;
 	unsigned long slop, clen, mapaddr;
 	char *p, *q;
 
-	/* We need to move the initrd down into lowmem */
-	ramdisk_here = memblock_find_in_range(0, end_of_lowmem, area_size,
-					 PAGE_SIZE);
+	/* We need to move the initrd down into directly mapped mem */
+	ramdisk_here = memblock_find_in_range(0, PFN_PHYS(max_low_pfn_mapped),
+						 area_size, PAGE_SIZE);
 
 	if (!ramdisk_here)
 		panic("Cannot find place for new RAMDISK of size %lld\n",
 			 ramdisk_size);
 
-	/* Note: this includes all the lowmem currently occupied by
+	/* Note: this includes all the mem currently occupied by
 	   the initrd, we rely on that fact to keep the data intact. */
 	memblock_reserve(ramdisk_here, area_size);
 	initrd_start = ramdisk_here + PAGE_OFFSET;
@@ -340,17 +339,7 @@ static void __init relocate_initrd(void)
 
 	q = (char *)initrd_start;
 
-	/* Copy any lowmem portion of the initrd */
-	if (ramdisk_image < end_of_lowmem) {
-		clen = end_of_lowmem - ramdisk_image;
-		p = (char *)__va(ramdisk_image);
-		memcpy(q, p, clen);
-		q += clen;
-		ramdisk_image += clen;
-		ramdisk_size  -= clen;
-	}
-
-	/* Copy the highmem portion of the initrd */
+	/* Copy the initrd */
 	while (ramdisk_size) {
 		slop = ramdisk_image & ~PAGE_MASK;
 		clen = ramdisk_size;
@@ -364,7 +353,7 @@ static void __init relocate_initrd(void)
 		ramdisk_image += clen;
 		ramdisk_size  -= clen;
 	}
-	/* high pages is not converted by early_res_to_bootmem */
+
 	ramdisk_image = boot_params.hdr.ramdisk_image;
 	ramdisk_size  = boot_params.hdr.ramdisk_size;
 	printk(KERN_INFO "Move RAMDISK from [mem %#010llx-%#010llx] to"
@@ -373,13 +362,27 @@ static void __init relocate_initrd(void)
 		ramdisk_here, ramdisk_here + ramdisk_size - 1);
 }
 
+static u64 __init get_mem_size(unsigned long limit_pfn)
+{
+	int i;
+	u64 mapped_pages = 0;
+	unsigned long start_pfn, end_pfn;
+
+	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
+		start_pfn = min_t(unsigned long, start_pfn, limit_pfn);
+		end_pfn = min_t(unsigned long, end_pfn, limit_pfn);
+		mapped_pages += end_pfn - start_pfn;
+	}
+
+	return mapped_pages << PAGE_SHIFT;
+}
 static void __init reserve_initrd(void)
 {
 	/* Assume only end is not page aligned */
 	u64 ramdisk_image = boot_params.hdr.ramdisk_image;
 	u64 ramdisk_size  = boot_params.hdr.ramdisk_size;
 	u64 ramdisk_end   = PAGE_ALIGN(ramdisk_image + ramdisk_size);
-	u64 end_of_lowmem = max_low_pfn_mapped << PAGE_SHIFT;
+	u64 mapped_size;
 
 	if (!boot_params.hdr.type_of_loader ||
 	    !ramdisk_image || !ramdisk_size)
@@ -387,18 +390,19 @@ static void __init reserve_initrd(void)
 
 	initrd_start = 0;
 
-	if (ramdisk_size >= (end_of_lowmem>>1)) {
+	mapped_size = get_mem_size(max_low_pfn_mapped);
+	if (ramdisk_size >= (mapped_size>>1))
 		panic("initrd too large to handle, "
 		       "disabling initrd (%lld needed, %lld available)\n",
-		       ramdisk_size, end_of_lowmem>>1);
-	}
+		       ramdisk_size, mapped_size>>1);
 
 	printk(KERN_INFO "RAMDISK: [mem %#010llx-%#010llx]\n", ramdisk_image,
 			ramdisk_end - 1);
 
-
-	if (ramdisk_end <= end_of_lowmem) {
-		/* All in lowmem, easy case */
+	if (ramdisk_end <= (max_low_pfn_mapped<<PAGE_SHIFT) &&
+	    pfn_range_is_mapped(PFN_DOWN(ramdisk_image),
+				PFN_DOWN(ramdisk_end))) {
+		/* All are mapped, easy case */
 		/*
 		 * don't need to reserve again, already reserved early
 		 * in i386_start_kernel
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 15/46] x86, mm: Only direct map addresses that are marked as E820_RAM
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (13 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 14/46] x86, mm: use pfn_range_is_mapped() with reserve_initrd Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 16/46] x86, mm: relocate initrd under all mem for 64bit Yinghai Lu
                                 ` (30 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

From: Jacob Shin <jacob.shin@amd.com>

Currently direct mappings are created for [ 0 to max_low_pfn<<PAGE_SHIFT )
and [ 4GB to max_pfn<<PAGE_SHIFT ), which may include regions that are not
backed by actual DRAM. This is fine for holes under 4GB which are covered
by fixed and variable range MTRRs to be UC. However, we run into trouble
on higher memory addresses which cannot be covered by MTRRs.

Our system with 1TB of RAM has an e820 that looks like this:

 BIOS-e820: [mem 0x0000000000000000-0x00000000000983ff] usable
 BIOS-e820: [mem 0x0000000000098400-0x000000000009ffff] reserved
 BIOS-e820: [mem 0x00000000000d0000-0x00000000000fffff] reserved
 BIOS-e820: [mem 0x0000000000100000-0x00000000c7ebffff] usable
 BIOS-e820: [mem 0x00000000c7ec0000-0x00000000c7ed7fff] ACPI data
 BIOS-e820: [mem 0x00000000c7ed8000-0x00000000c7ed9fff] ACPI NVS
 BIOS-e820: [mem 0x00000000c7eda000-0x00000000c7ffffff] reserved
 BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
 BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
 BIOS-e820: [mem 0x00000000fff00000-0x00000000ffffffff] reserved
 BIOS-e820: [mem 0x0000000100000000-0x000000e037ffffff] usable
 BIOS-e820: [mem 0x000000e038000000-0x000000fcffffffff] reserved
 BIOS-e820: [mem 0x0000010000000000-0x0000011ffeffffff] usable

and so direct mappings are created for huge memory hole between
0x000000e038000000 to 0x0000010000000000. Even though the kernel never
generates memory accesses in that region, since the page tables mark
them incorrectly as being WB, our (AMD) processor ends up causing a MCE
while doing some memory bookkeeping/optimizations around that area.

This patch iterates through e820 and only direct maps ranges that are
marked as E820_RAM, and keeps track of those pfn ranges. Depending on
the alignment of E820 ranges, this may possibly result in using smaller
size (i.e. 4K instead of 2M or 1G) page tables.

-v2: move changes from setup.c to mm/init.c, also use for_each_mem_pfn_range
	instead.  - Yinghai Lu
-v3: add calculate_all_table_space_size() to get correct needed page table
	size. - Yinghai Lu
-v4: fix add_pfn_range_mapped() to get correct max_low_pfn_mapped when
     mem map does have hole under 4g that is found by Konard on xen
     domU with 8g ram. - Yinghai

Signed-off-by: Jacob Shin <jacob.shin@amd.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
---
 arch/x86/include/asm/page_types.h |    8 +--
 arch/x86/kernel/setup.c           |    8 ++-
 arch/x86/mm/init.c                |  120 +++++++++++++++++++++++++++++++++----
 arch/x86/mm/init_64.c             |    6 +-
 4 files changed, 117 insertions(+), 25 deletions(-)

diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
index 45aae6e..54c9787 100644
--- a/arch/x86/include/asm/page_types.h
+++ b/arch/x86/include/asm/page_types.h
@@ -51,13 +51,7 @@ static inline phys_addr_t get_max_mapped(void)
 	return (phys_addr_t)max_pfn_mapped << PAGE_SHIFT;
 }
 
-static inline bool pfn_range_is_mapped(unsigned long start_pfn,
-					unsigned long end_pfn)
-{
-	return end_pfn <= max_low_pfn_mapped ||
-	       (end_pfn > (1UL << (32 - PAGE_SHIFT)) &&
-		end_pfn <= max_pfn_mapped);
-}
+bool pfn_range_is_mapped(unsigned long start_pfn, unsigned long end_pfn);
 
 extern unsigned long init_memory_mapping(unsigned long start,
 					 unsigned long end);
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index bd52f9d..68dffec 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -116,9 +116,11 @@
 #include <asm/prom.h>
 
 /*
- * end_pfn only includes RAM, while max_pfn_mapped includes all e820 entries.
- * The direct mapping extends to max_pfn_mapped, so that we can directly access
- * apertures, ACPI and other tables without having to play with fixmaps.
+ * max_low_pfn_mapped: highest direct mapped pfn under 4GB
+ * max_pfn_mapped:     highest direct mapped pfn over 4GB
+ *
+ * The direct mapping only covers E820_RAM regions, so the ranges and gaps are
+ * represented by pfn_mapped
  */
 unsigned long max_low_pfn_mapped;
 unsigned long max_pfn_mapped;
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 2b8091c..99d584c 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -243,6 +243,38 @@ static unsigned long __init calculate_table_space_size(unsigned long start, unsi
 	return tables;
 }
 
+static unsigned long __init calculate_all_table_space_size(void)
+{
+	unsigned long start_pfn, end_pfn;
+	unsigned long tables;
+	int i;
+
+	/* the ISA range is always mapped regardless of memory holes */
+	tables = calculate_table_space_size(0, ISA_END_ADDRESS);
+
+	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
+		u64 start = start_pfn << PAGE_SHIFT;
+		u64 end = end_pfn << PAGE_SHIFT;
+
+		if (end <= ISA_END_ADDRESS)
+			continue;
+
+		if (start < ISA_END_ADDRESS)
+			start = ISA_END_ADDRESS;
+#ifdef CONFIG_X86_32
+		/* on 32 bit, we only map up to max_low_pfn */
+		if ((start >> PAGE_SHIFT) >= max_low_pfn)
+			continue;
+
+		if ((end >> PAGE_SHIFT) > max_low_pfn)
+			end = max_low_pfn << PAGE_SHIFT;
+#endif
+		tables += calculate_table_space_size(start, end);
+	}
+
+	return tables;
+}
+
 static void __init find_early_table_space(unsigned long start,
 					  unsigned long good_end,
 					  unsigned long tables)
@@ -258,6 +290,34 @@ static void __init find_early_table_space(unsigned long start,
 	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
 }
 
+static struct range pfn_mapped[E820_X_MAX];
+static int nr_pfn_mapped;
+
+static void add_pfn_range_mapped(unsigned long start_pfn, unsigned long end_pfn)
+{
+	nr_pfn_mapped = add_range_with_merge(pfn_mapped, E820_X_MAX,
+					     nr_pfn_mapped, start_pfn, end_pfn);
+	nr_pfn_mapped = clean_sort_range(pfn_mapped, E820_X_MAX);
+
+	max_pfn_mapped = max(max_pfn_mapped, end_pfn);
+
+	if (start_pfn < (1UL<<(32-PAGE_SHIFT)))
+		max_low_pfn_mapped = max(max_low_pfn_mapped,
+					 min(end_pfn, 1UL<<(32-PAGE_SHIFT)));
+}
+
+bool pfn_range_is_mapped(unsigned long start_pfn, unsigned long end_pfn)
+{
+	int i;
+
+	for (i = 0; i < nr_pfn_mapped; i++)
+		if ((start_pfn >= pfn_mapped[i].start) &&
+		    (end_pfn <= pfn_mapped[i].end))
+			return true;
+
+	return false;
+}
+
 /*
  * Setup the direct mapping of the physical memory at PAGE_OFFSET.
  * This runs before bootmem is initialized and gets pages directly from
@@ -289,9 +349,55 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 
 	__flush_tlb_all();
 
+	add_pfn_range_mapped(start >> PAGE_SHIFT, ret >> PAGE_SHIFT);
+
 	return ret >> PAGE_SHIFT;
 }
 
+/*
+ * Iterate through E820 memory map and create direct mappings for only E820_RAM
+ * regions. We cannot simply create direct mappings for all pfns from
+ * [0 to max_low_pfn) and [4GB to max_pfn) because of possible memory holes in
+ * high addresses that cannot be marked as UC by fixed/variable range MTRRs.
+ * Depending on the alignment of E820 ranges, this may possibly result in using
+ * smaller size (i.e. 4K instead of 2M or 1G) page tables.
+ */
+static void __init init_all_memory_mapping(void)
+{
+	unsigned long start_pfn, end_pfn;
+	int i;
+
+	/* the ISA range is always mapped regardless of memory holes */
+	init_memory_mapping(0, ISA_END_ADDRESS);
+
+	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
+		u64 start = (u64)start_pfn << PAGE_SHIFT;
+		u64 end = (u64)end_pfn << PAGE_SHIFT;
+
+		if (end <= ISA_END_ADDRESS)
+			continue;
+
+		if (start < ISA_END_ADDRESS)
+			start = ISA_END_ADDRESS;
+#ifdef CONFIG_X86_32
+		/* on 32 bit, we only map up to max_low_pfn */
+		if ((start >> PAGE_SHIFT) >= max_low_pfn)
+			continue;
+
+		if ((end >> PAGE_SHIFT) > max_low_pfn)
+			end = max_low_pfn << PAGE_SHIFT;
+#endif
+		init_memory_mapping(start, end);
+	}
+
+#ifdef CONFIG_X86_64
+	if (max_pfn > max_low_pfn) {
+		/* can we preseve max_low_pfn ?*/
+		max_low_pfn = max_pfn;
+	}
+#endif
+}
+
 void __init init_mem_mapping(void)
 {
 	unsigned long tables, good_end, end;
@@ -312,23 +418,15 @@ void __init init_mem_mapping(void)
 	end = max_low_pfn << PAGE_SHIFT;
 	good_end = max_pfn_mapped << PAGE_SHIFT;
 #endif
-	tables = calculate_table_space_size(0, end);
+	tables = calculate_all_table_space_size();
 	find_early_table_space(0, good_end, tables);
 	printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] prealloc\n",
 		end - 1, pgt_buf_start << PAGE_SHIFT,
 		(pgt_buf_top << PAGE_SHIFT) - 1);
 
-	max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<<PAGE_SHIFT);
-	max_pfn_mapped = max_low_pfn_mapped;
+	max_pfn_mapped = 0; /* will get exact value next */
+	init_all_memory_mapping();
 
-#ifdef CONFIG_X86_64
-	if (max_pfn > max_low_pfn) {
-		max_pfn_mapped = init_memory_mapping(1UL<<32,
-						     max_pfn<<PAGE_SHIFT);
-		/* can we preseve max_low_pfn ?*/
-		max_low_pfn = max_pfn;
-	}
-#endif
 	/*
 	 * Reserve the kernel pagetable pages we used (pgt_buf_start -
 	 * pgt_buf_end) and free the other ones (pgt_buf_end - pgt_buf_top)
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 3baff25..32c7e38 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -662,13 +662,11 @@ int arch_add_memory(int nid, u64 start, u64 size)
 {
 	struct pglist_data *pgdat = NODE_DATA(nid);
 	struct zone *zone = pgdat->node_zones + ZONE_NORMAL;
-	unsigned long last_mapped_pfn, start_pfn = start >> PAGE_SHIFT;
+	unsigned long start_pfn = start >> PAGE_SHIFT;
 	unsigned long nr_pages = size >> PAGE_SHIFT;
 	int ret;
 
-	last_mapped_pfn = init_memory_mapping(start, start + size);
-	if (last_mapped_pfn > max_pfn_mapped)
-		max_pfn_mapped = last_mapped_pfn;
+	init_memory_mapping(start, start + size);
 
 	ret = __add_pages(nid, zone, start_pfn, nr_pages);
 	WARN_ON_ONCE(ret);
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 16/46] x86, mm: relocate initrd under all mem for 64bit
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (14 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 15/46] x86, mm: Only direct map addresses that are marked as E820_RAM Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 17/46] x86, mm: Align start address to correct big page size Yinghai Lu
                                 ` (29 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

instead of under 4g.

For 64bit, we can use any mapped mem instead of low mem.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/kernel/setup.c |    7 +++----
 1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 68dffec..94f922a 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -324,7 +324,7 @@ static void __init relocate_initrd(void)
 	char *p, *q;
 
 	/* We need to move the initrd down into directly mapped mem */
-	ramdisk_here = memblock_find_in_range(0, PFN_PHYS(max_low_pfn_mapped),
+	ramdisk_here = memblock_find_in_range(0, PFN_PHYS(max_pfn_mapped),
 						 area_size, PAGE_SIZE);
 
 	if (!ramdisk_here)
@@ -392,7 +392,7 @@ static void __init reserve_initrd(void)
 
 	initrd_start = 0;
 
-	mapped_size = get_mem_size(max_low_pfn_mapped);
+	mapped_size = get_mem_size(max_pfn_mapped);
 	if (ramdisk_size >= (mapped_size>>1))
 		panic("initrd too large to handle, "
 		       "disabling initrd (%lld needed, %lld available)\n",
@@ -401,8 +401,7 @@ static void __init reserve_initrd(void)
 	printk(KERN_INFO "RAMDISK: [mem %#010llx-%#010llx]\n", ramdisk_image,
 			ramdisk_end - 1);
 
-	if (ramdisk_end <= (max_low_pfn_mapped<<PAGE_SHIFT) &&
-	    pfn_range_is_mapped(PFN_DOWN(ramdisk_image),
+	if (pfn_range_is_mapped(PFN_DOWN(ramdisk_image),
 				PFN_DOWN(ramdisk_end))) {
 		/* All are mapped, easy case */
 		/*
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 17/46] x86, mm: Align start address to correct big page size
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (15 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 16/46] x86, mm: relocate initrd under all mem for 64bit Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 18/46] x86, mm: Use big page size for small memory range Yinghai Lu
                                 ` (28 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

We are going to use buffer in BRK to map small range just under memory top,
and use those new mapped ram to map ram range under it.

The ram range that will be mapped at first could be only page aligned,
but ranges around it are ram too, we could use bigger page to map it to
avoid small page size.

We will adjust page_size_mask in following patch:
	x86, mm: Use big page size for small memory range
to use big page size for small ram range.

Before that patch, this patch will make sure start address to be
aligned down according to bigger page size, otherwise entry in page
page will not have correct value.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init_32.c |    1 +
 arch/x86/mm/init_64.c |    5 +++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 11a5800..27f7fc6 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -310,6 +310,7 @@ repeat:
 					__pgprot(PTE_IDENT_ATTR |
 						 _PAGE_PSE);
 
+				pfn &= PMD_MASK >> PAGE_SHIFT;
 				addr2 = (pfn + PTRS_PER_PTE-1) * PAGE_SIZE +
 					PAGE_OFFSET + PAGE_SIZE-1;
 
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 32c7e38..869372a 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -464,7 +464,7 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 			pages++;
 			spin_lock(&init_mm.page_table_lock);
 			set_pte((pte_t *)pmd,
-				pfn_pte(address >> PAGE_SHIFT,
+				pfn_pte((address & PMD_MASK) >> PAGE_SHIFT,
 					__pgprot(pgprot_val(prot) | _PAGE_PSE)));
 			spin_unlock(&init_mm.page_table_lock);
 			last_map_addr = next;
@@ -541,7 +541,8 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 			pages++;
 			spin_lock(&init_mm.page_table_lock);
 			set_pte((pte_t *)pud,
-				pfn_pte(addr >> PAGE_SHIFT, PAGE_KERNEL_LARGE));
+				pfn_pte((addr & PUD_MASK) >> PAGE_SHIFT,
+					PAGE_KERNEL_LARGE));
 			spin_unlock(&init_mm.page_table_lock);
 			last_map_addr = next;
 			continue;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 18/46] x86, mm: Use big page size for small memory range
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (16 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 17/46] x86, mm: Align start address to correct big page size Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 19/46] x86, mm: Don't clear page table if range is ram Yinghai Lu
                                 ` (27 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

We could map small range in the middle of big range at first, so should use
big page size at first to avoid using small page size to break down page table.

Only can set big page bit when that range has ram area around it.

-v2: fix 32bit boundary checking. We can not count ram above max_low_pfn
	for 32 bit.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 99d584c..daea254 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -88,6 +88,40 @@ static int __meminit save_mr(struct map_range *mr, int nr_range,
 	return nr_range;
 }
 
+/*
+ * adjust the page_size_mask for small range to go with
+ *	big page size instead small one if nearby are ram too.
+ */
+static void __init_refok adjust_range_page_size_mask(struct map_range *mr,
+							 int nr_range)
+{
+	int i;
+
+	for (i = 0; i < nr_range; i++) {
+		if ((page_size_mask & (1<<PG_LEVEL_2M)) &&
+		    !(mr[i].page_size_mask & (1<<PG_LEVEL_2M))) {
+			unsigned long start = round_down(mr[i].start, PMD_SIZE);
+			unsigned long end = round_up(mr[i].end, PMD_SIZE);
+
+#ifdef CONFIG_X86_32
+			if ((end >> PAGE_SHIFT) > max_low_pfn)
+				continue;
+#endif
+
+			if (memblock_is_region_memory(start, end - start))
+				mr[i].page_size_mask |= 1<<PG_LEVEL_2M;
+		}
+		if ((page_size_mask & (1<<PG_LEVEL_1G)) &&
+		    !(mr[i].page_size_mask & (1<<PG_LEVEL_1G))) {
+			unsigned long start = round_down(mr[i].start, PUD_SIZE);
+			unsigned long end = round_up(mr[i].end, PUD_SIZE);
+
+			if (memblock_is_region_memory(start, end - start))
+				mr[i].page_size_mask |= 1<<PG_LEVEL_1G;
+		}
+	}
+}
+
 static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 				     unsigned long start,
 				     unsigned long end)
@@ -182,6 +216,9 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 		nr_range--;
 	}
 
+	if (!after_bootmem)
+		adjust_range_page_size_mask(mr, nr_range);
+
 	for (i = 0; i < nr_range; i++)
 		printk(KERN_DEBUG " [mem %#010lx-%#010lx] page %s\n",
 				mr[i].start, mr[i].end - 1,
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 19/46] x86, mm: Don't clear page table if range is ram
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (17 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 18/46] x86, mm: Use big page size for small memory range Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 20/46] x86, mm: Break down init_all_memory_mapping Yinghai Lu
                                 ` (26 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

After we add code use buffer in BRK to pre-map buf for page table in
following patch:
	x86, mm: setup page table in top-down
it should be safe to remove early_memmap for page table accessing.
Instead we get panic with that.

It turns out that we clear the initial page table wrongly for next range
that is separated by holes.
And it only happens when we are trying to map ram range one by one.

We need to check if the range is ram before clearing page table.

We change the loop structure to remove the extra little loop and use
one loop only, and in that loop will caculate next at first, and check if
[addr,next) is covered by E820_RAM.

-v2: E820_RESERVED_KERN is treated as E820_RAM. EFI one change some E820_RAM
     to that, so next kernel by kexec will know that range is used already.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init_64.c |   40 +++++++++++++++++++---------------------
 1 files changed, 19 insertions(+), 21 deletions(-)

diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 869372a..fa28e3e 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -363,20 +363,20 @@ static unsigned long __meminit
 phys_pte_init(pte_t *pte_page, unsigned long addr, unsigned long end,
 	      pgprot_t prot)
 {
-	unsigned pages = 0;
+	unsigned long pages = 0, next;
 	unsigned long last_map_addr = end;
 	int i;
 
 	pte_t *pte = pte_page + pte_index(addr);
 
-	for(i = pte_index(addr); i < PTRS_PER_PTE; i++, addr += PAGE_SIZE, pte++) {
-
+	for (i = pte_index(addr); i < PTRS_PER_PTE; i++, addr = next, pte++) {
+		next = (addr & PAGE_MASK) + PAGE_SIZE;
 		if (addr >= end) {
-			if (!after_bootmem) {
-				for(; i < PTRS_PER_PTE; i++, pte++)
-					set_pte(pte, __pte(0));
-			}
-			break;
+			if (!after_bootmem &&
+			    !e820_any_mapped(addr & PAGE_MASK, next, E820_RAM) &&
+			    !e820_any_mapped(addr & PAGE_MASK, next, E820_RESERVED_KERN))
+				set_pte(pte, __pte(0));
+			continue;
 		}
 
 		/*
@@ -419,16 +419,15 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 		pte_t *pte;
 		pgprot_t new_prot = prot;
 
+		next = (address & PMD_MASK) + PMD_SIZE;
 		if (address >= end) {
-			if (!after_bootmem) {
-				for (; i < PTRS_PER_PMD; i++, pmd++)
-					set_pmd(pmd, __pmd(0));
-			}
-			break;
+			if (!after_bootmem &&
+			    !e820_any_mapped(address & PMD_MASK, next, E820_RAM) &&
+			    !e820_any_mapped(address & PMD_MASK, next, E820_RESERVED_KERN))
+				set_pmd(pmd, __pmd(0));
+			continue;
 		}
 
-		next = (address & PMD_MASK) + PMD_SIZE;
-
 		if (pmd_val(*pmd)) {
 			if (!pmd_large(*pmd)) {
 				spin_lock(&init_mm.page_table_lock);
@@ -497,13 +496,12 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 		pmd_t *pmd;
 		pgprot_t prot = PAGE_KERNEL;
 
-		if (addr >= end)
-			break;
-
 		next = (addr & PUD_MASK) + PUD_SIZE;
-
-		if (!after_bootmem && !e820_any_mapped(addr, next, 0)) {
-			set_pud(pud, __pud(0));
+		if (addr >= end) {
+			if (!after_bootmem &&
+			    !e820_any_mapped(addr & PUD_MASK, next, E820_RAM) &&
+			    !e820_any_mapped(addr & PUD_MASK, next, E820_RESERVED_KERN))
+				set_pud(pud, __pud(0));
 			continue;
 		}
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 20/46] x86, mm: Break down init_all_memory_mapping
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (18 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 19/46] x86, mm: Don't clear page table if range is ram Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 21/46] x86, mm: setup page table in top-down Yinghai Lu
                                 ` (25 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Will replace that with top-down page table initialization.
New API need to take range: init_range_memory_mapping()

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   41 +++++++++++++++++++----------------------
 1 files changed, 19 insertions(+), 22 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index daea254..47a1ba2 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -399,40 +399,30 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
  * Depending on the alignment of E820 ranges, this may possibly result in using
  * smaller size (i.e. 4K instead of 2M or 1G) page tables.
  */
-static void __init init_all_memory_mapping(void)
+static void __init init_range_memory_mapping(unsigned long range_start,
+					   unsigned long range_end)
 {
 	unsigned long start_pfn, end_pfn;
 	int i;
 
-	/* the ISA range is always mapped regardless of memory holes */
-	init_memory_mapping(0, ISA_END_ADDRESS);
-
 	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
 		u64 start = (u64)start_pfn << PAGE_SHIFT;
 		u64 end = (u64)end_pfn << PAGE_SHIFT;
 
-		if (end <= ISA_END_ADDRESS)
+		if (end <= range_start)
 			continue;
 
-		if (start < ISA_END_ADDRESS)
-			start = ISA_END_ADDRESS;
-#ifdef CONFIG_X86_32
-		/* on 32 bit, we only map up to max_low_pfn */
-		if ((start >> PAGE_SHIFT) >= max_low_pfn)
+		if (start < range_start)
+			start = range_start;
+
+		if (start >= range_end)
 			continue;
 
-		if ((end >> PAGE_SHIFT) > max_low_pfn)
-			end = max_low_pfn << PAGE_SHIFT;
-#endif
-		init_memory_mapping(start, end);
-	}
+		if (end > range_end)
+			end = range_end;
 
-#ifdef CONFIG_X86_64
-	if (max_pfn > max_low_pfn) {
-		/* can we preseve max_low_pfn ?*/
-		max_low_pfn = max_pfn;
+		init_memory_mapping(start, end);
 	}
-#endif
 }
 
 void __init init_mem_mapping(void)
@@ -462,8 +452,15 @@ void __init init_mem_mapping(void)
 		(pgt_buf_top << PAGE_SHIFT) - 1);
 
 	max_pfn_mapped = 0; /* will get exact value next */
-	init_all_memory_mapping();
-
+	/* the ISA range is always mapped regardless of memory holes */
+	init_memory_mapping(0, ISA_END_ADDRESS);
+	init_range_memory_mapping(ISA_END_ADDRESS, end);
+#ifdef CONFIG_X86_64
+	if (max_pfn > max_low_pfn) {
+		/* can we preseve max_low_pfn ?*/
+		max_low_pfn = max_pfn;
+	}
+#endif
 	/*
 	 * Reserve the kernel pagetable pages we used (pgt_buf_start -
 	 * pgt_buf_end) and free the other ones (pgt_buf_end - pgt_buf_top)
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 21/46] x86, mm: setup page table in top-down
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (19 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 20/46] x86, mm: Break down init_all_memory_mapping Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-13 17:26                 ` Stefano Stabellini
  2012-11-12 21:18               ` [PATCH 22/46] x86, mm: Remove early_memremap workaround for page table accessing on 64bit Yinghai Lu
                                 ` (24 subsequent siblings)
  45 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Get pgt_buf early from BRK, and use it to map PMD_SIZE from top at first.
Then use mapped pages to map more ranges below, and keep looping until
all pages get mapped.

alloc_low_page will use page from BRK at first, after that buffer is used
up, will use memblock to find and reserve pages for page table usage.

Introduce min_pfn_mapped to make sure find new pages from mapped ranges,
that will be updated when lower pages get mapped.

Also add step_size to make sure that don't try to map too big range with
limited mapped pages initially, and increase the step_size when we have
more mapped pages on hand.

At last we can get rid of calculation and find early pgt related code.

-v2: update to after fix_xen change,
     also use MACRO for initial pgt_buf size and add comments with it.
-v3: skip big reserved range in memblock.reserved near end.
-v4: don't need fix_xen change now.

Suggested-by: "H. Peter Anvin" <hpa@zytor.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/page_types.h |    1 +
 arch/x86/include/asm/pgtable.h    |    1 +
 arch/x86/kernel/setup.c           |    3 +
 arch/x86/mm/init.c                |  210 +++++++++++--------------------------
 arch/x86/mm/init_32.c             |   17 +++-
 arch/x86/mm/init_64.c             |   17 +++-
 6 files changed, 94 insertions(+), 155 deletions(-)

diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
index 54c9787..9f6f3e6 100644
--- a/arch/x86/include/asm/page_types.h
+++ b/arch/x86/include/asm/page_types.h
@@ -45,6 +45,7 @@ extern int devmem_is_allowed(unsigned long pagenr);
 
 extern unsigned long max_low_pfn_mapped;
 extern unsigned long max_pfn_mapped;
+extern unsigned long min_pfn_mapped;
 
 static inline phys_addr_t get_max_mapped(void)
 {
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
index dd1a888..6991a3e 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -603,6 +603,7 @@ static inline int pgd_none(pgd_t pgd)
 
 extern int direct_gbpages;
 void init_mem_mapping(void);
+void early_alloc_pgt_buf(void);
 
 /* local pte updates need not use xchg for locking */
 static inline pte_t native_local_ptep_get_and_clear(pte_t *ptep)
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 94f922a..f7634092 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -124,6 +124,7 @@
  */
 unsigned long max_low_pfn_mapped;
 unsigned long max_pfn_mapped;
+unsigned long min_pfn_mapped;
 
 #ifdef CONFIG_DMI
 RESERVE_BRK(dmi_alloc, 65536);
@@ -900,6 +901,8 @@ void __init setup_arch(char **cmdline_p)
 
 	reserve_ibft_region();
 
+	early_alloc_pgt_buf();
+
 	/*
 	 * Need to conclude brk, before memblock_x86_fill()
 	 *  it could use memblock_find_in_range, could overlap with
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 47a1ba2..76a6e82 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -21,6 +21,21 @@ unsigned long __initdata pgt_buf_start;
 unsigned long __meminitdata pgt_buf_end;
 unsigned long __meminitdata pgt_buf_top;
 
+/* need 4 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */
+#define INIT_PGT_BUF_SIZE	(5 * PAGE_SIZE)
+RESERVE_BRK(early_pgt_alloc, INIT_PGT_BUF_SIZE);
+void  __init early_alloc_pgt_buf(void)
+{
+	unsigned long tables = INIT_PGT_BUF_SIZE;
+	phys_addr_t base;
+
+	base = __pa(extend_brk(tables, PAGE_SIZE));
+
+	pgt_buf_start = base >> PAGE_SHIFT;
+	pgt_buf_end = pgt_buf_start;
+	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
+}
+
 int after_bootmem;
 
 int direct_gbpages
@@ -228,105 +243,6 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 	return nr_range;
 }
 
-/*
- * First calculate space needed for kernel direct mapping page tables to cover
- * mr[0].start to mr[nr_range - 1].end, while accounting for possible 2M and 1GB
- * pages. Then find enough contiguous space for those page tables.
- */
-static unsigned long __init calculate_table_space_size(unsigned long start, unsigned long end)
-{
-	int i;
-	unsigned long puds = 0, pmds = 0, ptes = 0, tables;
-	struct map_range mr[NR_RANGE_MR];
-	int nr_range;
-
-	memset(mr, 0, sizeof(mr));
-	nr_range = 0;
-	nr_range = split_mem_range(mr, nr_range, start, end);
-
-	for (i = 0; i < nr_range; i++) {
-		unsigned long range, extra;
-
-		range = mr[i].end - mr[i].start;
-		puds += (range + PUD_SIZE - 1) >> PUD_SHIFT;
-
-		if (mr[i].page_size_mask & (1 << PG_LEVEL_1G)) {
-			extra = range - ((range >> PUD_SHIFT) << PUD_SHIFT);
-			pmds += (extra + PMD_SIZE - 1) >> PMD_SHIFT;
-		} else {
-			pmds += (range + PMD_SIZE - 1) >> PMD_SHIFT;
-		}
-
-		if (mr[i].page_size_mask & (1 << PG_LEVEL_2M)) {
-			extra = range - ((range >> PMD_SHIFT) << PMD_SHIFT);
-#ifdef CONFIG_X86_32
-			extra += PMD_SIZE;
-#endif
-			ptes += (extra + PAGE_SIZE - 1) >> PAGE_SHIFT;
-		} else {
-			ptes += (range + PAGE_SIZE - 1) >> PAGE_SHIFT;
-		}
-	}
-
-	tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
-	tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE);
-	tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE);
-
-#ifdef CONFIG_X86_32
-	/* for fixmap */
-	tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE);
-#endif
-
-	return tables;
-}
-
-static unsigned long __init calculate_all_table_space_size(void)
-{
-	unsigned long start_pfn, end_pfn;
-	unsigned long tables;
-	int i;
-
-	/* the ISA range is always mapped regardless of memory holes */
-	tables = calculate_table_space_size(0, ISA_END_ADDRESS);
-
-	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
-		u64 start = start_pfn << PAGE_SHIFT;
-		u64 end = end_pfn << PAGE_SHIFT;
-
-		if (end <= ISA_END_ADDRESS)
-			continue;
-
-		if (start < ISA_END_ADDRESS)
-			start = ISA_END_ADDRESS;
-#ifdef CONFIG_X86_32
-		/* on 32 bit, we only map up to max_low_pfn */
-		if ((start >> PAGE_SHIFT) >= max_low_pfn)
-			continue;
-
-		if ((end >> PAGE_SHIFT) > max_low_pfn)
-			end = max_low_pfn << PAGE_SHIFT;
-#endif
-		tables += calculate_table_space_size(start, end);
-	}
-
-	return tables;
-}
-
-static void __init find_early_table_space(unsigned long start,
-					  unsigned long good_end,
-					  unsigned long tables)
-{
-	phys_addr_t base;
-
-	base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE);
-	if (!base)
-		panic("Cannot find space for the kernel page tables");
-
-	pgt_buf_start = base >> PAGE_SHIFT;
-	pgt_buf_end = pgt_buf_start;
-	pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
-}
-
 static struct range pfn_mapped[E820_X_MAX];
 static int nr_pfn_mapped;
 
@@ -392,17 +308,14 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 }
 
 /*
- * Iterate through E820 memory map and create direct mappings for only E820_RAM
- * regions. We cannot simply create direct mappings for all pfns from
- * [0 to max_low_pfn) and [4GB to max_pfn) because of possible memory holes in
- * high addresses that cannot be marked as UC by fixed/variable range MTRRs.
- * Depending on the alignment of E820 ranges, this may possibly result in using
- * smaller size (i.e. 4K instead of 2M or 1G) page tables.
+ * this one could take range with hole in it.
  */
-static void __init init_range_memory_mapping(unsigned long range_start,
+static unsigned long __init init_range_memory_mapping(
+					   unsigned long range_start,
 					   unsigned long range_end)
 {
 	unsigned long start_pfn, end_pfn;
+	unsigned long mapped_ram_size = 0;
 	int i;
 
 	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
@@ -422,71 +335,70 @@ static void __init init_range_memory_mapping(unsigned long range_start,
 			end = range_end;
 
 		init_memory_mapping(start, end);
+
+		mapped_ram_size += end - start;
 	}
+
+	return mapped_ram_size;
 }
 
+/* (PUD_SHIFT-PMD_SHIFT)/2 */
+#define STEP_SIZE_SHIFT 5
 void __init init_mem_mapping(void)
 {
-	unsigned long tables, good_end, end;
+	unsigned long end, real_end, start, last_start;
+	unsigned long step_size;
+	unsigned long addr;
+	unsigned long mapped_ram_size = 0;
+	unsigned long new_mapped_ram_size;
 
 	probe_page_size_mask();
 
-	/*
-	 * Find space for the kernel direct mapping tables.
-	 *
-	 * Later we should allocate these tables in the local node of the
-	 * memory mapped. Unfortunately this is done currently before the
-	 * nodes are discovered.
-	 */
 #ifdef CONFIG_X86_64
 	end = max_pfn << PAGE_SHIFT;
-	good_end = end;
 #else
 	end = max_low_pfn << PAGE_SHIFT;
-	good_end = max_pfn_mapped << PAGE_SHIFT;
 #endif
-	tables = calculate_all_table_space_size();
-	find_early_table_space(0, good_end, tables);
-	printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] prealloc\n",
-		end - 1, pgt_buf_start << PAGE_SHIFT,
-		(pgt_buf_top << PAGE_SHIFT) - 1);
 
-	max_pfn_mapped = 0; /* will get exact value next */
 	/* the ISA range is always mapped regardless of memory holes */
 	init_memory_mapping(0, ISA_END_ADDRESS);
-	init_range_memory_mapping(ISA_END_ADDRESS, end);
+
+	/* xen has big range in reserved near end of ram, skip it at first */
+	addr = memblock_find_in_range(ISA_END_ADDRESS, end, PMD_SIZE,
+			 PAGE_SIZE);
+	real_end = addr + PMD_SIZE;
+
+	/* step_size need to be small so pgt_buf from BRK could cover it */
+	step_size = PMD_SIZE;
+	max_pfn_mapped = 0; /* will get exact value next */
+	min_pfn_mapped = real_end >> PAGE_SHIFT;
+	last_start = start = real_end;
+	while (last_start > ISA_END_ADDRESS) {
+		if (last_start > step_size) {
+			start = round_down(last_start - 1, step_size);
+			if (start < ISA_END_ADDRESS)
+				start = ISA_END_ADDRESS;
+		} else
+			start = ISA_END_ADDRESS;
+		new_mapped_ram_size = init_range_memory_mapping(start,
+							last_start);
+		last_start = start;
+		min_pfn_mapped = last_start >> PAGE_SHIFT;
+		/* only increase step_size after big range get mapped */
+		if (new_mapped_ram_size > mapped_ram_size)
+			step_size <<= STEP_SIZE_SHIFT;
+		mapped_ram_size += new_mapped_ram_size;
+	}
+
+	if (real_end < end)
+		init_range_memory_mapping(real_end, end);
+
 #ifdef CONFIG_X86_64
 	if (max_pfn > max_low_pfn) {
 		/* can we preseve max_low_pfn ?*/
 		max_low_pfn = max_pfn;
 	}
 #endif
-	/*
-	 * Reserve the kernel pagetable pages we used (pgt_buf_start -
-	 * pgt_buf_end) and free the other ones (pgt_buf_end - pgt_buf_top)
-	 * so that they can be reused for other purposes.
-	 *
-	 * On native it just means calling memblock_reserve, on Xen it also
-	 * means marking RW the pagetable pages that we allocated before
-	 * but that haven't been used.
-	 *
-	 * In fact on xen we mark RO the whole range pgt_buf_start -
-	 * pgt_buf_top, because we have to make sure that when
-	 * init_memory_mapping reaches the pagetable pages area, it maps
-	 * RO all the pagetable pages, including the ones that are beyond
-	 * pgt_buf_end at that time.
-	 */
-	if (pgt_buf_end > pgt_buf_start) {
-		printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] final\n",
-			end - 1, pgt_buf_start << PAGE_SHIFT,
-			(pgt_buf_end << PAGE_SHIFT) - 1);
-		x86_init.mapping.pagetable_reserve(PFN_PHYS(pgt_buf_start),
-				PFN_PHYS(pgt_buf_end));
-	}
-
-	/* stop the wrong using */
-	pgt_buf_top = 0;
-
 	early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
 }
 
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 27f7fc6..7bb1106 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -61,11 +61,22 @@ bool __read_mostly __vmalloc_start_set = false;
 
 static __init void *alloc_low_page(void)
 {
-	unsigned long pfn = pgt_buf_end++;
+	unsigned long pfn;
 	void *adr;
 
-	if (pfn >= pgt_buf_top)
-		panic("alloc_low_page: ran out of memory");
+	if ((pgt_buf_end + 1) >= pgt_buf_top) {
+		unsigned long ret;
+		if (min_pfn_mapped >= max_pfn_mapped)
+			panic("alloc_low_page: ran out of memory");
+		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
+					max_pfn_mapped << PAGE_SHIFT,
+					PAGE_SIZE, PAGE_SIZE);
+		if (!ret)
+			panic("alloc_low_page: can not alloc memory");
+		memblock_reserve(ret, PAGE_SIZE);
+		pfn = ret >> PAGE_SHIFT;
+	} else
+		pfn = pgt_buf_end++;
 
 	adr = __va(pfn * PAGE_SIZE);
 	clear_page(adr);
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index fa28e3e..eefaea6 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -316,7 +316,7 @@ void __init cleanup_highmap(void)
 
 static __ref void *alloc_low_page(unsigned long *phys)
 {
-	unsigned long pfn = pgt_buf_end++;
+	unsigned long pfn;
 	void *adr;
 
 	if (after_bootmem) {
@@ -326,8 +326,19 @@ static __ref void *alloc_low_page(unsigned long *phys)
 		return adr;
 	}
 
-	if (pfn >= pgt_buf_top)
-		panic("alloc_low_page: ran out of memory");
+	if ((pgt_buf_end + 1) >= pgt_buf_top) {
+		unsigned long ret;
+		if (min_pfn_mapped >= max_pfn_mapped)
+			panic("alloc_low_page: ran out of memory");
+		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
+					max_pfn_mapped << PAGE_SHIFT,
+					PAGE_SIZE, PAGE_SIZE);
+		if (!ret)
+			panic("alloc_low_page: can not alloc memory");
+		memblock_reserve(ret, PAGE_SIZE);
+		pfn = ret >> PAGE_SHIFT;
+	} else
+		pfn = pgt_buf_end++;
 
 	adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
 	clear_page(adr);
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 22/46] x86, mm: Remove early_memremap workaround for page table accessing on 64bit
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (20 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 21/46] x86, mm: setup page table in top-down Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-13 16:52                 ` Stefano Stabellini
  2012-11-12 21:18               ` [PATCH 23/46] x86, mm: Remove parameter in alloc_low_page for 64bit Yinghai Lu
                                 ` (23 subsequent siblings)
  45 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

We try to put page table high to make room for kdump, and at that time
those ranges are not mapped yet, and have to use ioremap to access it.

Now after patch that pre-map page table top down.
	x86, mm: setup page table in top-down
We do not need that workaround anymore.

Just use __va to return directly mapping address.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init_64.c |   38 ++++----------------------------------
 1 files changed, 4 insertions(+), 34 deletions(-)

diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index eefaea6..5ee9242 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -340,36 +340,12 @@ static __ref void *alloc_low_page(unsigned long *phys)
 	} else
 		pfn = pgt_buf_end++;
 
-	adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
+	adr = __va(pfn * PAGE_SIZE);
 	clear_page(adr);
 	*phys  = pfn * PAGE_SIZE;
 	return adr;
 }
 
-static __ref void *map_low_page(void *virt)
-{
-	void *adr;
-	unsigned long phys, left;
-
-	if (after_bootmem)
-		return virt;
-
-	phys = __pa(virt);
-	left = phys & (PAGE_SIZE - 1);
-	adr = early_memremap(phys & PAGE_MASK, PAGE_SIZE);
-	adr = (void *)(((unsigned long)adr) | left);
-
-	return adr;
-}
-
-static __ref void unmap_low_page(void *adr)
-{
-	if (after_bootmem)
-		return;
-
-	early_iounmap((void *)((unsigned long)adr & PAGE_MASK), PAGE_SIZE);
-}
-
 static unsigned long __meminit
 phys_pte_init(pte_t *pte_page, unsigned long addr, unsigned long end,
 	      pgprot_t prot)
@@ -442,10 +418,9 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 		if (pmd_val(*pmd)) {
 			if (!pmd_large(*pmd)) {
 				spin_lock(&init_mm.page_table_lock);
-				pte = map_low_page((pte_t *)pmd_page_vaddr(*pmd));
+				pte = (pte_t *)pmd_page_vaddr(*pmd);
 				last_map_addr = phys_pte_init(pte, address,
 								end, prot);
-				unmap_low_page(pte);
 				spin_unlock(&init_mm.page_table_lock);
 				continue;
 			}
@@ -483,7 +458,6 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 
 		pte = alloc_low_page(&pte_phys);
 		last_map_addr = phys_pte_init(pte, address, end, new_prot);
-		unmap_low_page(pte);
 
 		spin_lock(&init_mm.page_table_lock);
 		pmd_populate_kernel(&init_mm, pmd, __va(pte_phys));
@@ -518,10 +492,9 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 
 		if (pud_val(*pud)) {
 			if (!pud_large(*pud)) {
-				pmd = map_low_page(pmd_offset(pud, 0));
+				pmd = pmd_offset(pud, 0);
 				last_map_addr = phys_pmd_init(pmd, addr, end,
 							 page_size_mask, prot);
-				unmap_low_page(pmd);
 				__flush_tlb_all();
 				continue;
 			}
@@ -560,7 +533,6 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 		pmd = alloc_low_page(&pmd_phys);
 		last_map_addr = phys_pmd_init(pmd, addr, end, page_size_mask,
 					      prot);
-		unmap_low_page(pmd);
 
 		spin_lock(&init_mm.page_table_lock);
 		pud_populate(&init_mm, pud, __va(pmd_phys));
@@ -596,17 +568,15 @@ kernel_physical_mapping_init(unsigned long start,
 			next = end;
 
 		if (pgd_val(*pgd)) {
-			pud = map_low_page((pud_t *)pgd_page_vaddr(*pgd));
+			pud = (pud_t *)pgd_page_vaddr(*pgd);
 			last_map_addr = phys_pud_init(pud, __pa(start),
 						 __pa(end), page_size_mask);
-			unmap_low_page(pud);
 			continue;
 		}
 
 		pud = alloc_low_page(&pud_phys);
 		last_map_addr = phys_pud_init(pud, __pa(start), __pa(next),
 						 page_size_mask);
-		unmap_low_page(pud);
 
 		spin_lock(&init_mm.page_table_lock);
 		pgd_populate(&init_mm, pgd, __va(pud_phys));
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 23/46] x86, mm: Remove parameter in alloc_low_page for 64bit
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (21 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 22/46] x86, mm: Remove early_memremap workaround for page table accessing on 64bit Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-13 17:40                 ` Stefano Stabellini
  2012-11-12 21:18               ` [PATCH 24/46] x86, mm: Merge alloc_low_page between 64bit and 32bit Yinghai Lu
                                 ` (22 subsequent siblings)
  45 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Now all page table buf are pre-mapped, and could use virtual address directly.
So don't need to remember physical address anymore.

Remove that phys pointer in alloc_low_page(), and that will allow us to merge
alloc_low_page between 64bit and 32bit.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init_64.c |   19 +++++++------------
 1 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 5ee9242..1960820 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -314,14 +314,13 @@ void __init cleanup_highmap(void)
 	}
 }
 
-static __ref void *alloc_low_page(unsigned long *phys)
+static __ref void *alloc_low_page(void)
 {
 	unsigned long pfn;
 	void *adr;
 
 	if (after_bootmem) {
 		adr = (void *)get_zeroed_page(GFP_ATOMIC | __GFP_NOTRACK);
-		*phys = __pa(adr);
 
 		return adr;
 	}
@@ -342,7 +341,6 @@ static __ref void *alloc_low_page(unsigned long *phys)
 
 	adr = __va(pfn * PAGE_SIZE);
 	clear_page(adr);
-	*phys  = pfn * PAGE_SIZE;
 	return adr;
 }
 
@@ -401,7 +399,6 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 	int i = pmd_index(address);
 
 	for (; i < PTRS_PER_PMD; i++, address = next) {
-		unsigned long pte_phys;
 		pmd_t *pmd = pmd_page + pmd_index(address);
 		pte_t *pte;
 		pgprot_t new_prot = prot;
@@ -456,11 +453,11 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
 			continue;
 		}
 
-		pte = alloc_low_page(&pte_phys);
+		pte = alloc_low_page();
 		last_map_addr = phys_pte_init(pte, address, end, new_prot);
 
 		spin_lock(&init_mm.page_table_lock);
-		pmd_populate_kernel(&init_mm, pmd, __va(pte_phys));
+		pmd_populate_kernel(&init_mm, pmd, pte);
 		spin_unlock(&init_mm.page_table_lock);
 	}
 	update_page_count(PG_LEVEL_2M, pages);
@@ -476,7 +473,6 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 	int i = pud_index(addr);
 
 	for (; i < PTRS_PER_PUD; i++, addr = next) {
-		unsigned long pmd_phys;
 		pud_t *pud = pud_page + pud_index(addr);
 		pmd_t *pmd;
 		pgprot_t prot = PAGE_KERNEL;
@@ -530,12 +526,12 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
 			continue;
 		}
 
-		pmd = alloc_low_page(&pmd_phys);
+		pmd = alloc_low_page();
 		last_map_addr = phys_pmd_init(pmd, addr, end, page_size_mask,
 					      prot);
 
 		spin_lock(&init_mm.page_table_lock);
-		pud_populate(&init_mm, pud, __va(pmd_phys));
+		pud_populate(&init_mm, pud, pmd);
 		spin_unlock(&init_mm.page_table_lock);
 	}
 	__flush_tlb_all();
@@ -560,7 +556,6 @@ kernel_physical_mapping_init(unsigned long start,
 
 	for (; start < end; start = next) {
 		pgd_t *pgd = pgd_offset_k(start);
-		unsigned long pud_phys;
 		pud_t *pud;
 
 		next = (start + PGDIR_SIZE) & PGDIR_MASK;
@@ -574,12 +569,12 @@ kernel_physical_mapping_init(unsigned long start,
 			continue;
 		}
 
-		pud = alloc_low_page(&pud_phys);
+		pud = alloc_low_page();
 		last_map_addr = phys_pud_init(pud, __pa(start), __pa(next),
 						 page_size_mask);
 
 		spin_lock(&init_mm.page_table_lock);
-		pgd_populate(&init_mm, pgd, __va(pud_phys));
+		pgd_populate(&init_mm, pgd, pud);
 		spin_unlock(&init_mm.page_table_lock);
 		pgd_changed = true;
 	}
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 24/46] x86, mm: Merge alloc_low_page between 64bit and 32bit
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (22 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 23/46] x86, mm: Remove parameter in alloc_low_page for 64bit Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 25/46] x86, mm: Move min_pfn_mapped back to mm/init.c Yinghai Lu
                                 ` (21 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

They are almost same except 64 bit need to handle after_bootmem case.

Add mm_internal.h to make that alloc_low_page() only to be accessible
from arch/x86/mm/init*.c

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c        |   34 ++++++++++++++++++++++++++++++++++
 arch/x86/mm/init_32.c     |   26 ++------------------------
 arch/x86/mm/init_64.c     |   32 ++------------------------------
 arch/x86/mm/mm_internal.h |    6 ++++++
 4 files changed, 44 insertions(+), 54 deletions(-)
 create mode 100644 arch/x86/mm/mm_internal.h

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 76a6e82..ffbb7af 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -17,10 +17,44 @@
 #include <asm/proto.h>
 #include <asm/dma.h>		/* for MAX_DMA_PFN */
 
+#include "mm_internal.h"
+
 unsigned long __initdata pgt_buf_start;
 unsigned long __meminitdata pgt_buf_end;
 unsigned long __meminitdata pgt_buf_top;
 
+__ref void *alloc_low_page(void)
+{
+	unsigned long pfn;
+	void *adr;
+
+#ifdef CONFIG_X86_64
+	if (after_bootmem) {
+		adr = (void *)get_zeroed_page(GFP_ATOMIC | __GFP_NOTRACK);
+
+		return adr;
+	}
+#endif
+
+	if ((pgt_buf_end + 1) >= pgt_buf_top) {
+		unsigned long ret;
+		if (min_pfn_mapped >= max_pfn_mapped)
+			panic("alloc_low_page: ran out of memory");
+		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
+					max_pfn_mapped << PAGE_SHIFT,
+					PAGE_SIZE, PAGE_SIZE);
+		if (!ret)
+			panic("alloc_low_page: can not alloc memory");
+		memblock_reserve(ret, PAGE_SIZE);
+		pfn = ret >> PAGE_SHIFT;
+	} else
+		pfn = pgt_buf_end++;
+
+	adr = __va(pfn * PAGE_SIZE);
+	clear_page(adr);
+	return adr;
+}
+
 /* need 4 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */
 #define INIT_PGT_BUF_SIZE	(5 * PAGE_SIZE)
 RESERVE_BRK(early_pgt_alloc, INIT_PGT_BUF_SIZE);
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 7bb1106..a7f2df1 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -53,36 +53,14 @@
 #include <asm/page_types.h>
 #include <asm/init.h>
 
+#include "mm_internal.h"
+
 unsigned long highstart_pfn, highend_pfn;
 
 static noinline int do_test_wp_bit(void);
 
 bool __read_mostly __vmalloc_start_set = false;
 
-static __init void *alloc_low_page(void)
-{
-	unsigned long pfn;
-	void *adr;
-
-	if ((pgt_buf_end + 1) >= pgt_buf_top) {
-		unsigned long ret;
-		if (min_pfn_mapped >= max_pfn_mapped)
-			panic("alloc_low_page: ran out of memory");
-		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
-					max_pfn_mapped << PAGE_SHIFT,
-					PAGE_SIZE, PAGE_SIZE);
-		if (!ret)
-			panic("alloc_low_page: can not alloc memory");
-		memblock_reserve(ret, PAGE_SIZE);
-		pfn = ret >> PAGE_SHIFT;
-	} else
-		pfn = pgt_buf_end++;
-
-	adr = __va(pfn * PAGE_SIZE);
-	clear_page(adr);
-	return adr;
-}
-
 /*
  * Creates a middle page table and puts a pointer to it in the
  * given global directory entry. This only returns the gd entry
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 1960820..1d53def 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -54,6 +54,8 @@
 #include <asm/uv/uv.h>
 #include <asm/setup.h>
 
+#include "mm_internal.h"
+
 static int __init parse_direct_gbpages_off(char *arg)
 {
 	direct_gbpages = 0;
@@ -314,36 +316,6 @@ void __init cleanup_highmap(void)
 	}
 }
 
-static __ref void *alloc_low_page(void)
-{
-	unsigned long pfn;
-	void *adr;
-
-	if (after_bootmem) {
-		adr = (void *)get_zeroed_page(GFP_ATOMIC | __GFP_NOTRACK);
-
-		return adr;
-	}
-
-	if ((pgt_buf_end + 1) >= pgt_buf_top) {
-		unsigned long ret;
-		if (min_pfn_mapped >= max_pfn_mapped)
-			panic("alloc_low_page: ran out of memory");
-		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
-					max_pfn_mapped << PAGE_SHIFT,
-					PAGE_SIZE, PAGE_SIZE);
-		if (!ret)
-			panic("alloc_low_page: can not alloc memory");
-		memblock_reserve(ret, PAGE_SIZE);
-		pfn = ret >> PAGE_SHIFT;
-	} else
-		pfn = pgt_buf_end++;
-
-	adr = __va(pfn * PAGE_SIZE);
-	clear_page(adr);
-	return adr;
-}
-
 static unsigned long __meminit
 phys_pte_init(pte_t *pte_page, unsigned long addr, unsigned long end,
 	      pgprot_t prot)
diff --git a/arch/x86/mm/mm_internal.h b/arch/x86/mm/mm_internal.h
new file mode 100644
index 0000000..b3f993a
--- /dev/null
+++ b/arch/x86/mm/mm_internal.h
@@ -0,0 +1,6 @@
+#ifndef __X86_MM_INTERNAL_H
+#define __X86_MM_INTERNAL_H
+
+void *alloc_low_page(void);
+
+#endif	/* __X86_MM_INTERNAL_H */
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 25/46] x86, mm: Move min_pfn_mapped back to mm/init.c
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (23 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 24/46] x86, mm: Merge alloc_low_page between 64bit and 32bit Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 26/46] x86, mm, Xen: Remove mapping_pagetable_reserve() Yinghai Lu
                                 ` (20 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Also change it to static.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/page_types.h |    1 -
 arch/x86/kernel/setup.c           |    1 -
 arch/x86/mm/init.c                |    2 ++
 3 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
index 9f6f3e6..54c9787 100644
--- a/arch/x86/include/asm/page_types.h
+++ b/arch/x86/include/asm/page_types.h
@@ -45,7 +45,6 @@ extern int devmem_is_allowed(unsigned long pagenr);
 
 extern unsigned long max_low_pfn_mapped;
 extern unsigned long max_pfn_mapped;
-extern unsigned long min_pfn_mapped;
 
 static inline phys_addr_t get_max_mapped(void)
 {
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index f7634092..2015194 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -124,7 +124,6 @@
  */
 unsigned long max_low_pfn_mapped;
 unsigned long max_pfn_mapped;
-unsigned long min_pfn_mapped;
 
 #ifdef CONFIG_DMI
 RESERVE_BRK(dmi_alloc, 65536);
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index ffbb7af..7a6669e 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -23,6 +23,8 @@ unsigned long __initdata pgt_buf_start;
 unsigned long __meminitdata pgt_buf_end;
 unsigned long __meminitdata pgt_buf_top;
 
+static unsigned long min_pfn_mapped;
+
 __ref void *alloc_low_page(void)
 {
 	unsigned long pfn;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 26/46] x86, mm, Xen: Remove mapping_pagetable_reserve()
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (24 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 25/46] x86, mm: Move min_pfn_mapped back to mm/init.c Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-13 16:36                 ` Stefano Stabellini
  2012-11-12 21:18               ` [PATCH 27/46] x86, mm: Add alloc_low_pages(num) Yinghai Lu
                                 ` (19 subsequent siblings)
  45 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Page table area are pre-mapped now after
	x86, mm: setup page table in top-down
	x86, mm: Remove early_memremap workaround for page table accessing on 64bit

mapping_pagetable_reserve is not used anymore, so remove it.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/pgtable_types.h |    1 -
 arch/x86/include/asm/x86_init.h      |   12 ------------
 arch/x86/kernel/x86_init.c           |    4 ----
 arch/x86/mm/init.c                   |    4 ----
 arch/x86/xen/mmu.c                   |   28 ----------------------------
 5 files changed, 0 insertions(+), 49 deletions(-)

diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
index ec8a1fc..79738f2 100644
--- a/arch/x86/include/asm/pgtable_types.h
+++ b/arch/x86/include/asm/pgtable_types.h
@@ -301,7 +301,6 @@ int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
 /* Install a pte for a particular vaddr in kernel space. */
 void set_pte_vaddr(unsigned long vaddr, pte_t pte);
 
-extern void native_pagetable_reserve(u64 start, u64 end);
 #ifdef CONFIG_X86_32
 extern void native_pagetable_init(void);
 #else
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index 5769349..3b2ce8f 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -69,17 +69,6 @@ struct x86_init_oem {
 };
 
 /**
- * struct x86_init_mapping - platform specific initial kernel pagetable setup
- * @pagetable_reserve:	reserve a range of addresses for kernel pagetable usage
- *
- * For more details on the purpose of this hook, look in
- * init_memory_mapping and the commit that added it.
- */
-struct x86_init_mapping {
-	void (*pagetable_reserve)(u64 start, u64 end);
-};
-
-/**
  * struct x86_init_paging - platform specific paging functions
  * @pagetable_init:	platform specific paging initialization call to setup
  *			the kernel pagetables and prepare accessors functions.
@@ -136,7 +125,6 @@ struct x86_init_ops {
 	struct x86_init_mpparse		mpparse;
 	struct x86_init_irqs		irqs;
 	struct x86_init_oem		oem;
-	struct x86_init_mapping		mapping;
 	struct x86_init_paging		paging;
 	struct x86_init_timers		timers;
 	struct x86_init_iommu		iommu;
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
index 7a3d075..50cf83e 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
@@ -62,10 +62,6 @@ struct x86_init_ops x86_init __initdata = {
 		.banner			= default_banner,
 	},
 
-	.mapping = {
-		.pagetable_reserve		= native_pagetable_reserve,
-	},
-
 	.paging = {
 		.pagetable_init		= native_pagetable_init,
 	},
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 7a6669e..9d51af72 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -112,10 +112,6 @@ static void __init probe_page_size_mask(void)
 		__supported_pte_mask |= _PAGE_GLOBAL;
 	}
 }
-void __init native_pagetable_reserve(u64 start, u64 end)
-{
-	memblock_reserve(start, end - start);
-}
 
 #ifdef CONFIG_X86_32
 #define NR_RANGE_MR 3
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index dcf5f2d..bbb883f 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1178,20 +1178,6 @@ static void xen_exit_mmap(struct mm_struct *mm)
 
 static void xen_post_allocator_init(void);
 
-static __init void xen_mapping_pagetable_reserve(u64 start, u64 end)
-{
-	/* reserve the range used */
-	native_pagetable_reserve(start, end);
-
-	/* set as RW the rest */
-	printk(KERN_DEBUG "xen: setting RW the range %llx - %llx\n", end,
-			PFN_PHYS(pgt_buf_top));
-	while (end < PFN_PHYS(pgt_buf_top)) {
-		make_lowmem_page_readwrite(__va(end));
-		end += PAGE_SIZE;
-	}
-}
-
 #ifdef CONFIG_X86_64
 static void __init xen_cleanhighmap(unsigned long vaddr,
 				    unsigned long vaddr_end)
@@ -1503,19 +1489,6 @@ static pte_t __init mask_rw_pte(pte_t *ptep, pte_t pte)
 #else /* CONFIG_X86_64 */
 static pte_t __init mask_rw_pte(pte_t *ptep, pte_t pte)
 {
-	unsigned long pfn = pte_pfn(pte);
-
-	/*
-	 * If the new pfn is within the range of the newly allocated
-	 * kernel pagetable, and it isn't being mapped into an
-	 * early_ioremap fixmap slot as a freshly allocated page, make sure
-	 * it is RO.
-	 */
-	if (((!is_early_ioremap_ptep(ptep) &&
-			pfn >= pgt_buf_start && pfn < pgt_buf_top)) ||
-			(is_early_ioremap_ptep(ptep) && pfn != (pgt_buf_end - 1)))
-		pte = pte_wrprotect(pte);
-
 	return pte;
 }
 #endif /* CONFIG_X86_64 */
@@ -2197,7 +2170,6 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
 
 void __init xen_init_mmu_ops(void)
 {
-	x86_init.mapping.pagetable_reserve = xen_mapping_pagetable_reserve;
 	x86_init.paging.pagetable_init = xen_pagetable_init;
 	pv_mmu_ops = xen_mmu_ops;
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 27/46] x86, mm: Add alloc_low_pages(num)
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (25 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 26/46] x86, mm, Xen: Remove mapping_pagetable_reserve() Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-13 16:37                 ` Stefano Stabellini
  2012-11-12 21:18               ` [PATCH 28/46] x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages Yinghai Lu
                                 ` (18 subsequent siblings)
  45 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

32bit kmap mapping needs pages to be used for low to high.
At this point those pages are still from pgt_buf_* from BRK, so it is
ok now.
But we want to move early_ioremap_page_table_range_init() out of
init_memory_mapping() and only call it one time later, that will
make page_table_range_init/page_table_kmap_check/alloc_low_page to
use memblock to get page.

memblock allocation for pages are from high to low.
So will get panic from page_table_kmap_check() that has BUG_ON to do
ordering checking.

This patch add alloc_low_pages to make it possible to allocate serveral
pages at first, and hand out pages one by one from low to high.

-v2: add one line comment about xen requirements.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 arch/x86/mm/init.c        |   33 +++++++++++++++++++++------------
 arch/x86/mm/mm_internal.h |    6 +++++-
 2 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 9d51af72..f5e0120 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -25,36 +25,45 @@ unsigned long __meminitdata pgt_buf_top;
 
 static unsigned long min_pfn_mapped;
 
-__ref void *alloc_low_page(void)
+__ref void *alloc_low_pages(unsigned int num)
 {
 	unsigned long pfn;
-	void *adr;
+	int i;
 
 #ifdef CONFIG_X86_64
 	if (after_bootmem) {
-		adr = (void *)get_zeroed_page(GFP_ATOMIC | __GFP_NOTRACK);
+		unsigned int order;
 
-		return adr;
+		order = get_order((unsigned long)num << PAGE_SHIFT);
+		return (void *)__get_free_pages(GFP_ATOMIC | __GFP_NOTRACK |
+						__GFP_ZERO, order);
 	}
 #endif
 
-	if ((pgt_buf_end + 1) >= pgt_buf_top) {
+	if ((pgt_buf_end + num) >= pgt_buf_top) {
 		unsigned long ret;
 		if (min_pfn_mapped >= max_pfn_mapped)
 			panic("alloc_low_page: ran out of memory");
 		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
 					max_pfn_mapped << PAGE_SHIFT,
-					PAGE_SIZE, PAGE_SIZE);
+					PAGE_SIZE * num , PAGE_SIZE);
 		if (!ret)
 			panic("alloc_low_page: can not alloc memory");
-		memblock_reserve(ret, PAGE_SIZE);
+		memblock_reserve(ret, PAGE_SIZE * num);
 		pfn = ret >> PAGE_SHIFT;
-	} else
-		pfn = pgt_buf_end++;
+	} else {
+		pfn = pgt_buf_end;
+		pgt_buf_end += num;
+	}
+
+	for (i = 0; i < num; i++) {
+		void *adr;
+
+		adr = __va((pfn + i) << PAGE_SHIFT);
+		clear_page(adr);
+	}
 
-	adr = __va(pfn * PAGE_SIZE);
-	clear_page(adr);
-	return adr;
+	return __va(pfn << PAGE_SHIFT);
 }
 
 /* need 4 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */
diff --git a/arch/x86/mm/mm_internal.h b/arch/x86/mm/mm_internal.h
index b3f993a..7e3b88e 100644
--- a/arch/x86/mm/mm_internal.h
+++ b/arch/x86/mm/mm_internal.h
@@ -1,6 +1,10 @@
 #ifndef __X86_MM_INTERNAL_H
 #define __X86_MM_INTERNAL_H
 
-void *alloc_low_page(void);
+void *alloc_low_pages(unsigned int num);
+static inline void *alloc_low_page(void)
+{
+	return alloc_low_pages(1);
+}
 
 #endif	/* __X86_MM_INTERNAL_H */
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 28/46] x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (26 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 27/46] x86, mm: Add alloc_low_pages(num) Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-13 16:38                 ` Stefano Stabellini
  2012-11-12 21:18               ` [PATCH 29/46] x86, mm: only call early_ioremap_page_table_range_init() once Yinghai Lu
                                 ` (17 subsequent siblings)
  45 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

Add link to commit 279b706 for more information

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index f5e0120..a7939ed 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -25,6 +25,11 @@ unsigned long __meminitdata pgt_buf_top;
 
 static unsigned long min_pfn_mapped;
 
+/*
+ * Pages returned are already directly mapped.
+ *
+ * Changing that is likely to break Xen, see commit 279b706 for detail info.
+ */
 __ref void *alloc_low_pages(unsigned int num)
 {
 	unsigned long pfn;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 29/46] x86, mm: only call early_ioremap_page_table_range_init() once
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (27 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 28/46] x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 30/46] x86, mm: Move back pgt_buf_* to mm/init.c Yinghai Lu
                                 ` (16 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

On 32bit, before patcheset that only set page table for ram, we only
call that one time.

Now, we are calling that during every init_memory_mapping if we have holes
under max_low_pfn.

We should only call it one time after all ranges under max_low_page get
mapped just like we did before.

Also that could avoid the risk to run out of pgt_buf in BRK.

Need to update page_table_range_init() to count the pages for kmap page table
at first, and use new added alloc_low_pages() to get pages in sequence.
That will conform to the requirement that pages need to be in low to high order.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c    |   13 +++++--------
 arch/x86/mm/init_32.c |   47 +++++++++++++++++++++++++++++++++++++++++------
 2 files changed, 46 insertions(+), 14 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index a7939ed..d2df52c 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -340,14 +340,6 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 		ret = kernel_physical_mapping_init(mr[i].start, mr[i].end,
 						   mr[i].page_size_mask);
 
-#ifdef CONFIG_X86_32
-	early_ioremap_page_table_range_init();
-
-	load_cr3(swapper_pg_dir);
-#endif
-
-	__flush_tlb_all();
-
 	add_pfn_range_mapped(start >> PAGE_SHIFT, ret >> PAGE_SHIFT);
 
 	return ret >> PAGE_SHIFT;
@@ -444,7 +436,12 @@ void __init init_mem_mapping(void)
 		/* can we preseve max_low_pfn ?*/
 		max_low_pfn = max_pfn;
 	}
+#else
+	early_ioremap_page_table_range_init();
+	load_cr3(swapper_pg_dir);
+	__flush_tlb_all();
 #endif
+
 	early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
 }
 
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index a7f2df1..0ae1ba8 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -135,8 +135,39 @@ pte_t * __init populate_extra_pte(unsigned long vaddr)
 	return one_page_table_init(pmd) + pte_idx;
 }
 
+static unsigned long __init
+page_table_range_init_count(unsigned long start, unsigned long end)
+{
+	unsigned long count = 0;
+#ifdef CONFIG_HIGHMEM
+	int pmd_idx_kmap_begin = fix_to_virt(FIX_KMAP_END) >> PMD_SHIFT;
+	int pmd_idx_kmap_end = fix_to_virt(FIX_KMAP_BEGIN) >> PMD_SHIFT;
+	int pgd_idx, pmd_idx;
+	unsigned long vaddr;
+
+	if (pmd_idx_kmap_begin == pmd_idx_kmap_end)
+		return 0;
+
+	vaddr = start;
+	pgd_idx = pgd_index(vaddr);
+
+	for ( ; (pgd_idx < PTRS_PER_PGD) && (vaddr != end); pgd_idx++) {
+		for (; (pmd_idx < PTRS_PER_PMD) && (vaddr != end);
+							pmd_idx++) {
+			if ((vaddr >> PMD_SHIFT) >= pmd_idx_kmap_begin &&
+			    (vaddr >> PMD_SHIFT) <= pmd_idx_kmap_end)
+				count++;
+			vaddr += PMD_SIZE;
+		}
+		pmd_idx = 0;
+	}
+#endif
+	return count;
+}
+
 static pte_t *__init page_table_kmap_check(pte_t *pte, pmd_t *pmd,
-					   unsigned long vaddr, pte_t *lastpte)
+					   unsigned long vaddr, pte_t *lastpte,
+					   void **adr)
 {
 #ifdef CONFIG_HIGHMEM
 	/*
@@ -150,16 +181,15 @@ static pte_t *__init page_table_kmap_check(pte_t *pte, pmd_t *pmd,
 
 	if (pmd_idx_kmap_begin != pmd_idx_kmap_end
 	    && (vaddr >> PMD_SHIFT) >= pmd_idx_kmap_begin
-	    && (vaddr >> PMD_SHIFT) <= pmd_idx_kmap_end
-	    && ((__pa(pte) >> PAGE_SHIFT) < pgt_buf_start
-		|| (__pa(pte) >> PAGE_SHIFT) >= pgt_buf_end)) {
+	    && (vaddr >> PMD_SHIFT) <= pmd_idx_kmap_end) {
 		pte_t *newpte;
 		int i;
 
 		BUG_ON(after_bootmem);
-		newpte = alloc_low_page();
+		newpte = *adr;
 		for (i = 0; i < PTRS_PER_PTE; i++)
 			set_pte(newpte + i, pte[i]);
+		*adr = (void *)(((unsigned long)(*adr)) + PAGE_SIZE);
 
 		paravirt_alloc_pte(&init_mm, __pa(newpte) >> PAGE_SHIFT);
 		set_pmd(pmd, __pmd(__pa(newpte)|_PAGE_TABLE));
@@ -193,6 +223,11 @@ page_table_range_init(unsigned long start, unsigned long end, pgd_t *pgd_base)
 	pgd_t *pgd;
 	pmd_t *pmd;
 	pte_t *pte = NULL;
+	unsigned long count = page_table_range_init_count(start, end);
+	void *adr = NULL;
+
+	if (count)
+		adr = alloc_low_pages(count);
 
 	vaddr = start;
 	pgd_idx = pgd_index(vaddr);
@@ -205,7 +240,7 @@ page_table_range_init(unsigned long start, unsigned long end, pgd_t *pgd_base)
 		for (; (pmd_idx < PTRS_PER_PMD) && (vaddr != end);
 							pmd++, pmd_idx++) {
 			pte = page_table_kmap_check(one_page_table_init(pmd),
-			                            pmd, vaddr, pte);
+						    pmd, vaddr, pte, &adr);
 
 			vaddr += PMD_SIZE;
 		}
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 30/46] x86, mm: Move back pgt_buf_* to mm/init.c
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (28 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 29/46] x86, mm: only call early_ioremap_page_table_range_init() once Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 31/46] x86, mm: Move init_gbpages() out of setup.c Yinghai Lu
                                 ` (15 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Also change them to static.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/init.h |    4 ----
 arch/x86/mm/init.c          |    6 +++---
 2 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/arch/x86/include/asm/init.h b/arch/x86/include/asm/init.h
index 4f13998..626ea8d 100644
--- a/arch/x86/include/asm/init.h
+++ b/arch/x86/include/asm/init.h
@@ -12,8 +12,4 @@ kernel_physical_mapping_init(unsigned long start,
 			     unsigned long end,
 			     unsigned long page_size_mask);
 
-extern unsigned long __initdata pgt_buf_start;
-extern unsigned long __meminitdata pgt_buf_end;
-extern unsigned long __meminitdata pgt_buf_top;
-
 #endif /* _ASM_X86_INIT_32_H */
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index d2df52c..5caddf9 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -19,9 +19,9 @@
 
 #include "mm_internal.h"
 
-unsigned long __initdata pgt_buf_start;
-unsigned long __meminitdata pgt_buf_end;
-unsigned long __meminitdata pgt_buf_top;
+static unsigned long __initdata pgt_buf_start;
+static unsigned long __initdata pgt_buf_end;
+static unsigned long __initdata pgt_buf_top;
 
 static unsigned long min_pfn_mapped;
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 31/46] x86, mm: Move init_gbpages() out of setup.c
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (29 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 30/46] x86, mm: Move back pgt_buf_* to mm/init.c Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 32/46] x86, mm: change low/hignmem_pfn_init to static on 32bit Yinghai Lu
                                 ` (14 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Put it in mm/init.c, and call it from probe_page_mask().
init_mem_mapping is calling probe_page_mask at first.
So calling sequence is not changed.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/kernel/setup.c |   15 +--------------
 arch/x86/mm/init.c      |   12 ++++++++++++
 2 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 2015194..85b62f1 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -282,18 +282,7 @@ void * __init extend_brk(size_t size, size_t align)
 	return ret;
 }
 
-#ifdef CONFIG_X86_64
-static void __init init_gbpages(void)
-{
-	if (direct_gbpages && cpu_has_gbpages)
-		printk(KERN_INFO "Using GB pages for direct mapping\n");
-	else
-		direct_gbpages = 0;
-}
-#else
-static inline void init_gbpages(void)
-{
-}
+#ifdef CONFIG_X86_32
 static void __init cleanup_highmap(void)
 {
 }
@@ -933,8 +922,6 @@ void __init setup_arch(char **cmdline_p)
 
 	setup_real_mode();
 
-	init_gbpages();
-
 	init_mem_mapping();
 
 	memblock.current_limit = get_max_mapped();
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 5caddf9..61734b4 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -94,6 +94,16 @@ int direct_gbpages
 #endif
 ;
 
+static void __init init_gbpages(void)
+{
+#ifdef CONFIG_X86_64
+	if (direct_gbpages && cpu_has_gbpages)
+		printk(KERN_INFO "Using GB pages for direct mapping\n");
+	else
+		direct_gbpages = 0;
+#endif
+}
+
 struct map_range {
 	unsigned long start;
 	unsigned long end;
@@ -104,6 +114,8 @@ static int page_size_mask;
 
 static void __init probe_page_size_mask(void)
 {
+	init_gbpages();
+
 #if !defined(CONFIG_DEBUG_PAGEALLOC) && !defined(CONFIG_KMEMCHECK)
 	/*
 	 * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages.
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 32/46] x86, mm: change low/hignmem_pfn_init to static on 32bit
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (30 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 31/46] x86, mm: Move init_gbpages() out of setup.c Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 33/46] x86, mm: Move function declaration into mm_internal.h Yinghai Lu
                                 ` (13 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init_32.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 0ae1ba8..322ee56 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -575,7 +575,7 @@ early_param("highmem", parse_highmem);
  * artificially via the highmem=x boot parameter then create
  * it:
  */
-void __init lowmem_pfn_init(void)
+static void __init lowmem_pfn_init(void)
 {
 	/* max_low_pfn is 0, we already have early_res support */
 	max_low_pfn = max_pfn;
@@ -611,7 +611,7 @@ void __init lowmem_pfn_init(void)
  * We have more RAM than fits into lowmem - we try to put it into
  * highmem, also taking the highmem=x boot parameter into account:
  */
-void __init highmem_pfn_init(void)
+static void __init highmem_pfn_init(void)
 {
 	max_low_pfn = MAXMEM_PFN;
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 33/46] x86, mm: Move function declaration into mm_internal.h
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (31 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 32/46] x86, mm: change low/hignmem_pfn_init to static on 32bit Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 34/46] x86, mm: Add check before clear pte above max_low_pfn on 32bit Yinghai Lu
                                 ` (12 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

They are only for mm/init*.c.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/init.h |   16 +++-------------
 arch/x86/mm/mm_internal.h   |    7 +++++++
 2 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/arch/x86/include/asm/init.h b/arch/x86/include/asm/init.h
index 626ea8d..bac770b 100644
--- a/arch/x86/include/asm/init.h
+++ b/arch/x86/include/asm/init.h
@@ -1,15 +1,5 @@
-#ifndef _ASM_X86_INIT_32_H
-#define _ASM_X86_INIT_32_H
+#ifndef _ASM_X86_INIT_H
+#define _ASM_X86_INIT_H
 
-#ifdef CONFIG_X86_32
-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,
-			     unsigned long page_size_mask);
-
-#endif /* _ASM_X86_INIT_32_H */
+#endif /* _ASM_X86_INIT_H */
diff --git a/arch/x86/mm/mm_internal.h b/arch/x86/mm/mm_internal.h
index 7e3b88e..dc79ac1 100644
--- a/arch/x86/mm/mm_internal.h
+++ b/arch/x86/mm/mm_internal.h
@@ -7,4 +7,11 @@ static inline void *alloc_low_page(void)
 	return alloc_low_pages(1);
 }
 
+void early_ioremap_page_table_range_init(void);
+
+unsigned long kernel_physical_mapping_init(unsigned long start,
+					     unsigned long end,
+					     unsigned long page_size_mask);
+void zone_sizes_init(void);
+
 #endif	/* __X86_MM_INTERNAL_H */
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 34/46] x86, mm: Add check before clear pte above max_low_pfn on 32bit
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (32 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 33/46] x86, mm: Move function declaration into mm_internal.h Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 35/46] x86, mm: use round_up/down in split_mem_range() Yinghai Lu
                                 ` (11 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

During test patch that adjust page_size_mask to map small range ram with
big page size, found page table is setup wrongly for 32bit. And
native_pagetable_init wrong clear pte for pmd with large page support.

1. add more comments about why we are expecting pte.

2. add BUG checking, so next time we could find problem earlier
   when we mess up page table setup again.

3. max_low_pfn is not included boundary for low memory mapping.
   We should check from max_low_pfn instead of +1.

4. add print out when some pte really get cleared, or we should use
   WARN() to find out why above max_low_pfn get mapped? so we could
   fix it.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init_32.c |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 322ee56..19ef9f0 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -480,9 +480,14 @@ void __init native_pagetable_init(void)
 
 	/*
 	 * Remove any mappings which extend past the end of physical
-	 * memory from the boot time page table:
+	 * memory from the boot time page table.
+	 * In virtual address space, we should have at least two pages
+	 * from VMALLOC_END to pkmap or fixmap according to VMALLOC_END
+	 * definition. And max_low_pfn is set to VMALLOC_END physical
+	 * address. If initial memory mapping is doing right job, we
+	 * should have pte used near max_low_pfn or one pmd is not present.
 	 */
-	for (pfn = max_low_pfn + 1; pfn < 1<<(32-PAGE_SHIFT); pfn++) {
+	for (pfn = max_low_pfn; pfn < 1<<(32-PAGE_SHIFT); pfn++) {
 		va = PAGE_OFFSET + (pfn<<PAGE_SHIFT);
 		pgd = base + pgd_index(va);
 		if (!pgd_present(*pgd))
@@ -493,10 +498,19 @@ void __init native_pagetable_init(void)
 		if (!pmd_present(*pmd))
 			break;
 
+		/* should not be large page here */
+		if (pmd_large(*pmd)) {
+			pr_warn("try to clear pte for ram above max_low_pfn: pfn: %lx pmd: %p pmd phys: %lx, but pmd is big page and is not using pte !\n",
+				pfn, pmd, __pa(pmd));
+			BUG_ON(1);
+		}
+
 		pte = pte_offset_kernel(pmd, va);
 		if (!pte_present(*pte))
 			break;
 
+		printk(KERN_DEBUG "clearing pte for ram above max_low_pfn: pfn: %lx pmd: %p pmd phys: %lx pte: %p pte phys: %lx\n",
+				pfn, pmd, __pa(pmd), pte, __pa(pte));
 		pte_clear(NULL, va, pte);
 	}
 	paravirt_alloc_pmd(&init_mm, __pa(base) >> PAGE_SHIFT);
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 35/46] x86, mm: use round_up/down in split_mem_range()
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (33 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 34/46] x86, mm: Add check before clear pte above max_low_pfn on 32bit Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 36/46] x86, mm: use PFN_DOWN " Yinghai Lu
                                 ` (10 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

to replace own inline version for those roundup and rounddown.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   30 ++++++++++++------------------
 1 files changed, 12 insertions(+), 18 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 61734b4..ae3d642 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -214,13 +214,11 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 	 * slowdowns.
 	 */
 	if (pos == 0)
-		end_pfn = 1<<(PMD_SHIFT - PAGE_SHIFT);
+		end_pfn = PMD_SIZE >> PAGE_SHIFT;
 	else
-		end_pfn = ((pos + (PMD_SIZE - 1))>>PMD_SHIFT)
-				 << (PMD_SHIFT - PAGE_SHIFT);
+		end_pfn = round_up(pos, PMD_SIZE) >> PAGE_SHIFT;
 #else /* CONFIG_X86_64 */
-	end_pfn = ((pos + (PMD_SIZE - 1)) >> PMD_SHIFT)
-			<< (PMD_SHIFT - PAGE_SHIFT);
+	end_pfn = round_up(pos, PMD_SIZE) >> PAGE_SHIFT;
 #endif
 	if (end_pfn > (end >> PAGE_SHIFT))
 		end_pfn = end >> PAGE_SHIFT;
@@ -230,15 +228,13 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 	}
 
 	/* big page (2M) range */
-	start_pfn = ((pos + (PMD_SIZE - 1))>>PMD_SHIFT)
-			 << (PMD_SHIFT - PAGE_SHIFT);
+	start_pfn = round_up(pos, PMD_SIZE) >> PAGE_SHIFT;
 #ifdef CONFIG_X86_32
-	end_pfn = (end>>PMD_SHIFT) << (PMD_SHIFT - PAGE_SHIFT);
+	end_pfn = round_down(end, PMD_SIZE) >> PAGE_SHIFT;
 #else /* CONFIG_X86_64 */
-	end_pfn = ((pos + (PUD_SIZE - 1))>>PUD_SHIFT)
-			 << (PUD_SHIFT - PAGE_SHIFT);
-	if (end_pfn > ((end>>PMD_SHIFT)<<(PMD_SHIFT - PAGE_SHIFT)))
-		end_pfn = ((end>>PMD_SHIFT)<<(PMD_SHIFT - PAGE_SHIFT));
+	end_pfn = round_up(pos, PUD_SIZE) >> PAGE_SHIFT;
+	if (end_pfn > (round_down(end, PMD_SIZE) >> PAGE_SHIFT))
+		end_pfn = round_down(end, PMD_SIZE) >> PAGE_SHIFT;
 #endif
 
 	if (start_pfn < end_pfn) {
@@ -249,9 +245,8 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 
 #ifdef CONFIG_X86_64
 	/* big page (1G) range */
-	start_pfn = ((pos + (PUD_SIZE - 1))>>PUD_SHIFT)
-			 << (PUD_SHIFT - PAGE_SHIFT);
-	end_pfn = (end >> PUD_SHIFT) << (PUD_SHIFT - PAGE_SHIFT);
+	start_pfn = round_up(pos, PUD_SIZE) >> PAGE_SHIFT;
+	end_pfn = round_down(end, PUD_SIZE) >> PAGE_SHIFT;
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
 				page_size_mask &
@@ -260,9 +255,8 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 	}
 
 	/* tail is not big page (1G) alignment */
-	start_pfn = ((pos + (PMD_SIZE - 1))>>PMD_SHIFT)
-			 << (PMD_SHIFT - PAGE_SHIFT);
-	end_pfn = (end >> PMD_SHIFT) << (PMD_SHIFT - PAGE_SHIFT);
+	start_pfn = round_up(pos, PMD_SIZE) >> PAGE_SHIFT;
+	end_pfn = round_down(end, PMD_SIZE) >> PAGE_SHIFT;
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
 				page_size_mask & (1<<PG_LEVEL_2M));
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 36/46] x86, mm: use PFN_DOWN in split_mem_range()
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (34 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 35/46] x86, mm: use round_up/down in split_mem_range() Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 37/46] x86, mm: use pfn instead of pos in split_mem_range Yinghai Lu
                                 ` (9 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

to replace own inline version for shifting.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   44 ++++++++++++++++++++++----------------------
 1 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index ae3d642..a4fdf31 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -204,8 +204,8 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 	int i;
 
 	/* head if not big page alignment ? */
-	start_pfn = start >> PAGE_SHIFT;
-	pos = start_pfn << PAGE_SHIFT;
+	start_pfn = PFN_DOWN(start);
+	pos = PFN_PHYS(start_pfn);
 #ifdef CONFIG_X86_32
 	/*
 	 * Don't use a large page for the first 2/4MB of memory
@@ -214,59 +214,59 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 	 * slowdowns.
 	 */
 	if (pos == 0)
-		end_pfn = PMD_SIZE >> PAGE_SHIFT;
+		end_pfn = PFN_DOWN(PMD_SIZE);
 	else
-		end_pfn = round_up(pos, PMD_SIZE) >> PAGE_SHIFT;
+		end_pfn = PFN_DOWN(round_up(pos, PMD_SIZE));
 #else /* CONFIG_X86_64 */
-	end_pfn = round_up(pos, PMD_SIZE) >> PAGE_SHIFT;
+	end_pfn = PFN_DOWN(round_up(pos, PMD_SIZE));
 #endif
-	if (end_pfn > (end >> PAGE_SHIFT))
-		end_pfn = end >> PAGE_SHIFT;
+	if (end_pfn > PFN_DOWN(end))
+		end_pfn = PFN_DOWN(end);
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0);
-		pos = end_pfn << PAGE_SHIFT;
+		pos = PFN_PHYS(end_pfn);
 	}
 
 	/* big page (2M) range */
-	start_pfn = round_up(pos, PMD_SIZE) >> PAGE_SHIFT;
+	start_pfn = PFN_DOWN(round_up(pos, PMD_SIZE));
 #ifdef CONFIG_X86_32
-	end_pfn = round_down(end, PMD_SIZE) >> PAGE_SHIFT;
+	end_pfn = PFN_DOWN(round_down(end, PMD_SIZE));
 #else /* CONFIG_X86_64 */
-	end_pfn = round_up(pos, PUD_SIZE) >> PAGE_SHIFT;
-	if (end_pfn > (round_down(end, PMD_SIZE) >> PAGE_SHIFT))
-		end_pfn = round_down(end, PMD_SIZE) >> PAGE_SHIFT;
+	end_pfn = PFN_DOWN(round_up(pos, PUD_SIZE));
+	if (end_pfn > PFN_DOWN(round_down(end, PMD_SIZE)))
+		end_pfn = PFN_DOWN(round_down(end, PMD_SIZE));
 #endif
 
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
 				page_size_mask & (1<<PG_LEVEL_2M));
-		pos = end_pfn << PAGE_SHIFT;
+		pos = PFN_PHYS(end_pfn);
 	}
 
 #ifdef CONFIG_X86_64
 	/* big page (1G) range */
-	start_pfn = round_up(pos, PUD_SIZE) >> PAGE_SHIFT;
-	end_pfn = round_down(end, PUD_SIZE) >> PAGE_SHIFT;
+	start_pfn = PFN_DOWN(round_up(pos, PUD_SIZE));
+	end_pfn = PFN_DOWN(round_down(end, PUD_SIZE));
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
 				page_size_mask &
 				 ((1<<PG_LEVEL_2M)|(1<<PG_LEVEL_1G)));
-		pos = end_pfn << PAGE_SHIFT;
+		pos = PFN_PHYS(end_pfn);
 	}
 
 	/* tail is not big page (1G) alignment */
-	start_pfn = round_up(pos, PMD_SIZE) >> PAGE_SHIFT;
-	end_pfn = round_down(end, PMD_SIZE) >> PAGE_SHIFT;
+	start_pfn = PFN_DOWN(round_up(pos, PMD_SIZE));
+	end_pfn = PFN_DOWN(round_down(end, PMD_SIZE));
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
 				page_size_mask & (1<<PG_LEVEL_2M));
-		pos = end_pfn << PAGE_SHIFT;
+		pos = PFN_PHYS(end_pfn);
 	}
 #endif
 
 	/* tail is not big page (2M) alignment */
-	start_pfn = pos>>PAGE_SHIFT;
-	end_pfn = end>>PAGE_SHIFT;
+	start_pfn = PFN_DOWN(pos);
+	end_pfn = PFN_DOWN(end);
 	nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0);
 
 	/* try to merge same page size and continuous */
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 37/46] x86, mm: use pfn instead of pos in split_mem_range
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (35 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 36/46] x86, mm: use PFN_DOWN " Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 38/46] x86, mm: use limit_pfn for end pfn Yinghai Lu
                                 ` (8 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

could save some bit shifting operations.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   29 ++++++++++++++---------------
 1 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index a4fdf31..e430f1e 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -200,12 +200,11 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 				     unsigned long end)
 {
 	unsigned long start_pfn, end_pfn;
-	unsigned long pos;
+	unsigned long pfn;
 	int i;
 
 	/* head if not big page alignment ? */
-	start_pfn = PFN_DOWN(start);
-	pos = PFN_PHYS(start_pfn);
+	pfn = start_pfn = PFN_DOWN(start);
 #ifdef CONFIG_X86_32
 	/*
 	 * Don't use a large page for the first 2/4MB of memory
@@ -213,26 +212,26 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 	 * and overlapping MTRRs into large pages can cause
 	 * slowdowns.
 	 */
-	if (pos == 0)
+	if (pfn == 0)
 		end_pfn = PFN_DOWN(PMD_SIZE);
 	else
-		end_pfn = PFN_DOWN(round_up(pos, PMD_SIZE));
+		end_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
 #else /* CONFIG_X86_64 */
-	end_pfn = PFN_DOWN(round_up(pos, PMD_SIZE));
+	end_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
 #endif
 	if (end_pfn > PFN_DOWN(end))
 		end_pfn = PFN_DOWN(end);
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0);
-		pos = PFN_PHYS(end_pfn);
+		pfn = end_pfn;
 	}
 
 	/* big page (2M) range */
-	start_pfn = PFN_DOWN(round_up(pos, PMD_SIZE));
+	start_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
 #ifdef CONFIG_X86_32
 	end_pfn = PFN_DOWN(round_down(end, PMD_SIZE));
 #else /* CONFIG_X86_64 */
-	end_pfn = PFN_DOWN(round_up(pos, PUD_SIZE));
+	end_pfn = round_up(pfn, PFN_DOWN(PUD_SIZE));
 	if (end_pfn > PFN_DOWN(round_down(end, PMD_SIZE)))
 		end_pfn = PFN_DOWN(round_down(end, PMD_SIZE));
 #endif
@@ -240,32 +239,32 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
 				page_size_mask & (1<<PG_LEVEL_2M));
-		pos = PFN_PHYS(end_pfn);
+		pfn = end_pfn;
 	}
 
 #ifdef CONFIG_X86_64
 	/* big page (1G) range */
-	start_pfn = PFN_DOWN(round_up(pos, PUD_SIZE));
+	start_pfn = round_up(pfn, PFN_DOWN(PUD_SIZE));
 	end_pfn = PFN_DOWN(round_down(end, PUD_SIZE));
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
 				page_size_mask &
 				 ((1<<PG_LEVEL_2M)|(1<<PG_LEVEL_1G)));
-		pos = PFN_PHYS(end_pfn);
+		pfn = end_pfn;
 	}
 
 	/* tail is not big page (1G) alignment */
-	start_pfn = PFN_DOWN(round_up(pos, PMD_SIZE));
+	start_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
 	end_pfn = PFN_DOWN(round_down(end, PMD_SIZE));
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
 				page_size_mask & (1<<PG_LEVEL_2M));
-		pos = PFN_PHYS(end_pfn);
+		pfn = end_pfn;
 	}
 #endif
 
 	/* tail is not big page (2M) alignment */
-	start_pfn = PFN_DOWN(pos);
+	start_pfn = pfn;
 	end_pfn = PFN_DOWN(end);
 	nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0);
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 38/46] x86, mm: use limit_pfn for end pfn
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (36 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 37/46] x86, mm: use pfn instead of pos in split_mem_range Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 39/46] x86, mm: Unifying after_bootmem for 32bit and 64bit Yinghai Lu
                                 ` (7 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

instead of shifting end to get that.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   20 +++++++++++---------
 1 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index e430f1e..a0f579a 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -199,10 +199,12 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 				     unsigned long start,
 				     unsigned long end)
 {
-	unsigned long start_pfn, end_pfn;
+	unsigned long start_pfn, end_pfn, limit_pfn;
 	unsigned long pfn;
 	int i;
 
+	limit_pfn = PFN_DOWN(end);
+
 	/* head if not big page alignment ? */
 	pfn = start_pfn = PFN_DOWN(start);
 #ifdef CONFIG_X86_32
@@ -219,8 +221,8 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 #else /* CONFIG_X86_64 */
 	end_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
 #endif
-	if (end_pfn > PFN_DOWN(end))
-		end_pfn = PFN_DOWN(end);
+	if (end_pfn > limit_pfn)
+		end_pfn = limit_pfn;
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0);
 		pfn = end_pfn;
@@ -229,11 +231,11 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 	/* big page (2M) range */
 	start_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
 #ifdef CONFIG_X86_32
-	end_pfn = PFN_DOWN(round_down(end, PMD_SIZE));
+	end_pfn = round_down(limit_pfn, PFN_DOWN(PMD_SIZE));
 #else /* CONFIG_X86_64 */
 	end_pfn = round_up(pfn, PFN_DOWN(PUD_SIZE));
-	if (end_pfn > PFN_DOWN(round_down(end, PMD_SIZE)))
-		end_pfn = PFN_DOWN(round_down(end, PMD_SIZE));
+	if (end_pfn > round_down(limit_pfn, PFN_DOWN(PMD_SIZE)))
+		end_pfn = round_down(limit_pfn, PFN_DOWN(PMD_SIZE));
 #endif
 
 	if (start_pfn < end_pfn) {
@@ -245,7 +247,7 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 #ifdef CONFIG_X86_64
 	/* big page (1G) range */
 	start_pfn = round_up(pfn, PFN_DOWN(PUD_SIZE));
-	end_pfn = PFN_DOWN(round_down(end, PUD_SIZE));
+	end_pfn = round_down(limit_pfn, PFN_DOWN(PUD_SIZE));
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
 				page_size_mask &
@@ -255,7 +257,7 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 
 	/* tail is not big page (1G) alignment */
 	start_pfn = round_up(pfn, PFN_DOWN(PMD_SIZE));
-	end_pfn = PFN_DOWN(round_down(end, PMD_SIZE));
+	end_pfn = round_down(limit_pfn, PFN_DOWN(PMD_SIZE));
 	if (start_pfn < end_pfn) {
 		nr_range = save_mr(mr, nr_range, start_pfn, end_pfn,
 				page_size_mask & (1<<PG_LEVEL_2M));
@@ -265,7 +267,7 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
 
 	/* tail is not big page (2M) alignment */
 	start_pfn = pfn;
-	end_pfn = PFN_DOWN(end);
+	end_pfn = limit_pfn;
 	nr_range = save_mr(mr, nr_range, start_pfn, end_pfn, 0);
 
 	/* try to merge same page size and continuous */
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 39/46] x86, mm: Unifying after_bootmem for 32bit and 64bit
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (37 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 38/46] x86, mm: use limit_pfn for end pfn Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 40/46] x86, mm: Move after_bootmem to mm_internel.h Yinghai Lu
                                 ` (6 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

after_bootmem has different meaning in 32bit and 64bit.
        32bit: after bootmem is ready
        64bit: after bootmem is distroyed
Let's merget them make 32bit the same as 64bit.

for 32bit, it is mixing alloc_bootmem_pages, and alloc_low_page under
after_bootmem is set or not set.

alloc_bootmem is just wrapper for memblock for x86.

Now we have alloc_low_page() with memblock too. We can drop bootmem path
now, and only alloc_low_page only.

At the same time, we make alloc_low_page could handle real after_bootmem
for 32bit, because alloc_bootmem_pages could fallback to use slab too.

At last move after_bootmem set position for 32bit the same as 64bit.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c    |    2 --
 arch/x86/mm/init_32.c |   21 ++++-----------------
 2 files changed, 4 insertions(+), 19 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index a0f579a..028a129 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -35,7 +35,6 @@ __ref void *alloc_low_pages(unsigned int num)
 	unsigned long pfn;
 	int i;
 
-#ifdef CONFIG_X86_64
 	if (after_bootmem) {
 		unsigned int order;
 
@@ -43,7 +42,6 @@ __ref void *alloc_low_pages(unsigned int num)
 		return (void *)__get_free_pages(GFP_ATOMIC | __GFP_NOTRACK |
 						__GFP_ZERO, order);
 	}
-#endif
 
 	if ((pgt_buf_end + num) >= pgt_buf_top) {
 		unsigned long ret;
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 19ef9f0..f4fc4a2 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -73,10 +73,7 @@ static pmd_t * __init one_md_table_init(pgd_t *pgd)
 
 #ifdef CONFIG_X86_PAE
 	if (!(pgd_val(*pgd) & _PAGE_PRESENT)) {
-		if (after_bootmem)
-			pmd_table = (pmd_t *)alloc_bootmem_pages(PAGE_SIZE);
-		else
-			pmd_table = (pmd_t *)alloc_low_page();
+		pmd_table = (pmd_t *)alloc_low_page();
 		paravirt_alloc_pmd(&init_mm, __pa(pmd_table) >> PAGE_SHIFT);
 		set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
 		pud = pud_offset(pgd, 0);
@@ -98,17 +95,7 @@ static pmd_t * __init one_md_table_init(pgd_t *pgd)
 static pte_t * __init one_page_table_init(pmd_t *pmd)
 {
 	if (!(pmd_val(*pmd) & _PAGE_PRESENT)) {
-		pte_t *page_table = NULL;
-
-		if (after_bootmem) {
-#if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KMEMCHECK)
-			page_table = (pte_t *) alloc_bootmem_pages(PAGE_SIZE);
-#endif
-			if (!page_table)
-				page_table =
-				(pte_t *)alloc_bootmem_pages(PAGE_SIZE);
-		} else
-			page_table = (pte_t *)alloc_low_page();
+		pte_t *page_table = (pte_t *)alloc_low_page();
 
 		paravirt_alloc_pte(&init_mm, __pa(page_table) >> PAGE_SHIFT);
 		set_pmd(pmd, __pmd(__pa(page_table) | _PAGE_TABLE));
@@ -708,8 +695,6 @@ void __init setup_bootmem_allocator(void)
 	printk(KERN_INFO "  mapped low ram: 0 - %08lx\n",
 		 max_pfn_mapped<<PAGE_SHIFT);
 	printk(KERN_INFO "  low ram: 0 - %08lx\n", max_low_pfn<<PAGE_SHIFT);
-
-	after_bootmem = 1;
 }
 
 /*
@@ -795,6 +780,8 @@ void __init mem_init(void)
 		if (page_is_ram(tmp) && PageReserved(pfn_to_page(tmp)))
 			reservedpages++;
 
+	after_bootmem = 1;
+
 	codesize =  (unsigned long) &_etext - (unsigned long) &_text;
 	datasize =  (unsigned long) &_edata - (unsigned long) &_etext;
 	initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin;
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 40/46] x86, mm: Move after_bootmem to mm_internel.h
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (38 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 39/46] x86, mm: Unifying after_bootmem for 32bit and 64bit Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 41/46] x86, mm: Use clamp_t() in init_range_memory_mapping Yinghai Lu
                                 ` (5 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

it is only used in arch/x86/mm/init*.c

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/mm_internal.h |    2 ++
 include/linux/mm.h        |    1 -
 2 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/arch/x86/mm/mm_internal.h b/arch/x86/mm/mm_internal.h
index dc79ac1..6b563a1 100644
--- a/arch/x86/mm/mm_internal.h
+++ b/arch/x86/mm/mm_internal.h
@@ -14,4 +14,6 @@ unsigned long kernel_physical_mapping_init(unsigned long start,
 					     unsigned long page_size_mask);
 void zone_sizes_init(void);
 
+extern int after_bootmem;
+
 #endif	/* __X86_MM_INTERNAL_H */
diff --git a/include/linux/mm.h b/include/linux/mm.h
index fa06804..390bd14 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1355,7 +1355,6 @@ extern void __init mmap_init(void);
 extern void show_mem(unsigned int flags);
 extern void si_meminfo(struct sysinfo * val);
 extern void si_meminfo_node(struct sysinfo *val, int nid);
-extern int after_bootmem;
 
 extern __printf(3, 4)
 void warn_alloc_failed(gfp_t gfp_mask, int order, const char *fmt, ...);
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 41/46] x86, mm: Use clamp_t() in init_range_memory_mapping
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (39 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 40/46] x86, mm: Move after_bootmem to mm_internel.h Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 42/46] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
                                 ` (4 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

save some lines, and make code more readable.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/mm/init.c |   21 +++++----------------
 1 files changed, 5 insertions(+), 16 deletions(-)

diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 028a129..3c48114 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -354,31 +354,20 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
  * this one could take range with hole in it.
  */
 static unsigned long __init init_range_memory_mapping(
-					   unsigned long range_start,
-					   unsigned long range_end)
+					   unsigned long r_start,
+					   unsigned long r_end)
 {
 	unsigned long start_pfn, end_pfn;
 	unsigned long mapped_ram_size = 0;
 	int i;
 
 	for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
-		u64 start = (u64)start_pfn << PAGE_SHIFT;
-		u64 end = (u64)end_pfn << PAGE_SHIFT;
-
-		if (end <= range_start)
-			continue;
-
-		if (start < range_start)
-			start = range_start;
-
-		if (start >= range_end)
+		u64 start = clamp_val(PFN_PHYS(start_pfn), r_start, r_end);
+		u64 end = clamp_val(PFN_PHYS(end_pfn), r_start, r_end);
+		if (start >= end)
 			continue;
 
-		if (end > range_end)
-			end = range_end;
-
 		init_memory_mapping(start, end);
-
 		mapped_ram_size += end - start;
 	}
 
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 42/46] x86, mm: kill numa_free_all_bootmem()
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (40 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 41/46] x86, mm: Use clamp_t() in init_range_memory_mapping Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 43/46] x86, mm: kill numa_64.h Yinghai Lu
                                 ` (3 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Now NO_BOOTMEM version free_all_bootmem_node() does not really
do free_bootmem at all, and it only call register_page_bootmem_info_node
instead.

That is confusing, try to kill that free_all_bootmem_node().

Before that, this patch will remove numa_free_all_bootmem().

That function could be replaced with register_page_bootmem_info() and
free_all_bootmem();

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/numa_64.h |    2 --
 arch/x86/mm/init_64.c          |   15 +++++++++++----
 arch/x86/mm/numa_64.c          |   13 -------------
 3 files changed, 11 insertions(+), 19 deletions(-)

diff --git a/arch/x86/include/asm/numa_64.h b/arch/x86/include/asm/numa_64.h
index 0c05f7a..fe4d2d4 100644
--- a/arch/x86/include/asm/numa_64.h
+++ b/arch/x86/include/asm/numa_64.h
@@ -1,6 +1,4 @@
 #ifndef _ASM_X86_NUMA_64_H
 #define _ASM_X86_NUMA_64_H
 
-extern unsigned long numa_free_all_bootmem(void);
-
 #endif /* _ASM_X86_NUMA_64_H */
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 1d53def..4178530 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -629,6 +629,16 @@ EXPORT_SYMBOL_GPL(arch_add_memory);
 
 static struct kcore_list kcore_vsyscall;
 
+static void __init register_page_bootmem_info(void)
+{
+#ifdef CONFIG_NUMA
+	int i;
+
+	for_each_online_node(i)
+		register_page_bootmem_info_node(NODE_DATA(i));
+#endif
+}
+
 void __init mem_init(void)
 {
 	long codesize, reservedpages, datasize, initsize;
@@ -641,11 +651,8 @@ void __init mem_init(void)
 	reservedpages = 0;
 
 	/* this will put all low memory onto the freelists */
-#ifdef CONFIG_NUMA
-	totalram_pages = numa_free_all_bootmem();
-#else
+	register_page_bootmem_info();
 	totalram_pages = free_all_bootmem();
-#endif
 
 	absent_pages = absent_pages_in_range(0, max_pfn);
 	reservedpages = max_pfn - totalram_pages - absent_pages;
diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c
index 92e2711..9405ffc 100644
--- a/arch/x86/mm/numa_64.c
+++ b/arch/x86/mm/numa_64.c
@@ -10,16 +10,3 @@ void __init initmem_init(void)
 {
 	x86_numa_init();
 }
-
-unsigned long __init numa_free_all_bootmem(void)
-{
-	unsigned long pages = 0;
-	int i;
-
-	for_each_online_node(i)
-		pages += free_all_bootmem_node(NODE_DATA(i));
-
-	pages += free_low_memory_core_early(MAX_NUMNODES);
-
-	return pages;
-}
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 43/46] x86, mm: kill numa_64.h
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (41 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 42/46] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18                 ` Yinghai Lu
                                 ` (2 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/include/asm/numa.h    |    2 --
 arch/x86/include/asm/numa_64.h |    4 ----
 arch/x86/kernel/acpi/boot.c    |    1 -
 arch/x86/kernel/cpu/amd.c      |    1 -
 arch/x86/kernel/cpu/intel.c    |    1 -
 arch/x86/kernel/setup.c        |    3 ---
 6 files changed, 0 insertions(+), 12 deletions(-)
 delete mode 100644 arch/x86/include/asm/numa_64.h

diff --git a/arch/x86/include/asm/numa.h b/arch/x86/include/asm/numa.h
index 49119fc..52560a2 100644
--- a/arch/x86/include/asm/numa.h
+++ b/arch/x86/include/asm/numa.h
@@ -54,8 +54,6 @@ static inline int numa_cpu_node(int cpu)
 
 #ifdef CONFIG_X86_32
 # include <asm/numa_32.h>
-#else
-# include <asm/numa_64.h>
 #endif
 
 #ifdef CONFIG_NUMA
diff --git a/arch/x86/include/asm/numa_64.h b/arch/x86/include/asm/numa_64.h
deleted file mode 100644
index fe4d2d4..0000000
--- a/arch/x86/include/asm/numa_64.h
+++ /dev/null
@@ -1,4 +0,0 @@
-#ifndef _ASM_X86_NUMA_64_H
-#define _ASM_X86_NUMA_64_H
-
-#endif /* _ASM_X86_NUMA_64_H */
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index e651f7a..4b23aa1 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -51,7 +51,6 @@ EXPORT_SYMBOL(acpi_disabled);
 
 #ifdef	CONFIG_X86_64
 # include <asm/proto.h>
-# include <asm/numa_64.h>
 #endif				/* X86 */
 
 #define BAD_MADT_ENTRY(entry, end) (					    \
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 9619ba6..913f94f 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -12,7 +12,6 @@
 #include <asm/pci-direct.h>
 
 #ifdef CONFIG_X86_64
-# include <asm/numa_64.h>
 # include <asm/mmconfig.h>
 # include <asm/cacheflush.h>
 #endif
diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
index 198e019..3b547cc 100644
--- a/arch/x86/kernel/cpu/intel.c
+++ b/arch/x86/kernel/cpu/intel.c
@@ -17,7 +17,6 @@
 
 #ifdef CONFIG_X86_64
 #include <linux/topology.h>
-#include <asm/numa_64.h>
 #endif
 
 #include "cpu.h"
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 85b62f1..6d29d1f 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -108,9 +108,6 @@
 #include <asm/topology.h>
 #include <asm/apicdef.h>
 #include <asm/amd_nb.h>
-#ifdef CONFIG_X86_64
-#include <asm/numa_64.h>
-#endif
 #include <asm/mce.h>
 #include <asm/alternative.h>
 #include <asm/prom.h>
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 44/46] sparc, mm: Remove calling of free_all_bootmem_node()
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
@ 2012-11-12 21:18                 ` Yinghai Lu
  2012-11-12 21:17               ` [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping Yinghai Lu
                                   ` (44 subsequent siblings)
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu, David S. Miller, sparclinux

Now NO_BOOTMEM version free_all_bootmem_node() does not really
do free_bootmem at all, and it only call
register_page_bootmem_info_node instead.

That is confusing, try to kill that free_all_bootmem_node().

Before that, this patch will remove calling of free_all_bootmem_node()

We add register_page_bootmem_info() to call register_page_bootmem_info_node
directly.

Also could use free_all_bootmem() for numa case, and it is just
the same as free_low_memory_core_early().

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: sparclinux@vger.kernel.org
Acked-by: "David S. Miller" <davem@davemloft.net>
---
 arch/sparc/mm/init_64.c |   24 +++++++++++-------------
 1 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 9e28a11..b24bac2 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -2021,6 +2021,16 @@ static void __init patch_tlb_miss_handler_bitmap(void)
 	flushi(&valid_addr_bitmap_insn[0]);
 }
 
+static void __init register_page_bootmem_info(void)
+{
+#ifdef CONFIG_NEED_MULTIPLE_NODES
+	int i;
+
+	for_each_online_node(i)
+		if (NODE_DATA(i)->node_spanned_pages)
+			register_page_bootmem_info_node(NODE_DATA(i));
+#endif
+}
 void __init mem_init(void)
 {
 	unsigned long codepages, datapages, initpages;
@@ -2038,20 +2048,8 @@ void __init mem_init(void)
 
 	high_memory = __va(last_valid_pfn << PAGE_SHIFT);
 
-#ifdef CONFIG_NEED_MULTIPLE_NODES
-	{
-		int i;
-		for_each_online_node(i) {
-			if (NODE_DATA(i)->node_spanned_pages != 0) {
-				totalram_pages +=
-					free_all_bootmem_node(NODE_DATA(i));
-			}
-		}
-		totalram_pages += free_low_memory_core_early(MAX_NUMNODES);
-	}
-#else
+	register_page_bootmem_info();
 	totalram_pages = free_all_bootmem();
-#endif
 
 	/* We subtract one to account for the mem_map_zero page
 	 * allocated below.
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 44/46] sparc, mm: Remove calling of free_all_bootmem_node()
@ 2012-11-12 21:18                 ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu, David S. Miller, sparclinux

Now NO_BOOTMEM version free_all_bootmem_node() does not really
do free_bootmem at all, and it only call
register_page_bootmem_info_node instead.

That is confusing, try to kill that free_all_bootmem_node().

Before that, this patch will remove calling of free_all_bootmem_node()

We add register_page_bootmem_info() to call register_page_bootmem_info_node
directly.

Also could use free_all_bootmem() for numa case, and it is just
the same as free_low_memory_core_early().

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: sparclinux@vger.kernel.org
Acked-by: "David S. Miller" <davem@davemloft.net>
---
 arch/sparc/mm/init_64.c |   24 +++++++++++-------------
 1 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
index 9e28a11..b24bac2 100644
--- a/arch/sparc/mm/init_64.c
+++ b/arch/sparc/mm/init_64.c
@@ -2021,6 +2021,16 @@ static void __init patch_tlb_miss_handler_bitmap(void)
 	flushi(&valid_addr_bitmap_insn[0]);
 }
 
+static void __init register_page_bootmem_info(void)
+{
+#ifdef CONFIG_NEED_MULTIPLE_NODES
+	int i;
+
+	for_each_online_node(i)
+		if (NODE_DATA(i)->node_spanned_pages)
+			register_page_bootmem_info_node(NODE_DATA(i));
+#endif
+}
 void __init mem_init(void)
 {
 	unsigned long codepages, datapages, initpages;
@@ -2038,20 +2048,8 @@ void __init mem_init(void)
 
 	high_memory = __va(last_valid_pfn << PAGE_SHIFT);
 
-#ifdef CONFIG_NEED_MULTIPLE_NODES
-	{
-		int i;
-		for_each_online_node(i) {
-			if (NODE_DATA(i)->node_spanned_pages != 0) {
-				totalram_pages +-					free_all_bootmem_node(NODE_DATA(i));
-			}
-		}
-		totalram_pages += free_low_memory_core_early(MAX_NUMNODES);
-	}
-#else
+	register_page_bootmem_info();
 	totalram_pages = free_all_bootmem();
-#endif
 
 	/* We subtract one to account for the mem_map_zero page
 	 * allocated below.
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 45/46] mm: Kill NO_BOOTMEM version free_all_bootmem_node()
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (43 preceding siblings ...)
  2012-11-12 21:18                 ` Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  2012-11-12 21:18               ` [PATCH 46/46] x86, mm: Let "memmap=" take more entries one time Yinghai Lu
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Now NO_BOOTMEM version free_all_bootmem_node() does not really
do free_bootmem at all, and it only call register_page_bootmem_info_node
for online nodes instead.

That is confusing.

We can kill that free_all_bootmem_node(), after we kill two callings
in x86 and sparc.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 mm/nobootmem.c |   14 --------------
 1 files changed, 0 insertions(+), 14 deletions(-)

diff --git a/mm/nobootmem.c b/mm/nobootmem.c
index 714d5d6..f22c228 100644
--- a/mm/nobootmem.c
+++ b/mm/nobootmem.c
@@ -141,20 +141,6 @@ unsigned long __init free_low_memory_core_early(int nodeid)
 }
 
 /**
- * free_all_bootmem_node - release a node's free pages to the buddy allocator
- * @pgdat: node to be released
- *
- * Returns the number of pages actually released.
- */
-unsigned long __init free_all_bootmem_node(pg_data_t *pgdat)
-{
-	register_page_bootmem_info_node(pgdat);
-
-	/* free_low_memory_core_early(MAX_NUMNODES) will be called later */
-	return 0;
-}
-
-/**
  * free_all_bootmem - release free pages to the buddy allocator
  *
  * Returns the number of pages actually released.
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* [PATCH 46/46] x86, mm: Let "memmap=" take more entries one time
  2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
                                 ` (44 preceding siblings ...)
  2012-11-12 21:18               ` [PATCH 45/46] mm: Kill NO_BOOTMEM version free_all_bootmem_node() Yinghai Lu
@ 2012-11-12 21:18               ` Yinghai Lu
  45 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-12 21:18 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin
  Cc: Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel, Yinghai Lu

Current "memmap=" only can take one entry every time.
when we have more entries, we have to use memmap= for each of them.

For pxe booting, we have command line length limitation, those extra
"memmap=" would waste too much space.

This patch make memmap= could take several entries one time,
and those entries will be split with ','

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 arch/x86/kernel/e820.c |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
index df06ade..d32abea 100644
--- a/arch/x86/kernel/e820.c
+++ b/arch/x86/kernel/e820.c
@@ -835,7 +835,7 @@ static int __init parse_memopt(char *p)
 }
 early_param("mem", parse_memopt);
 
-static int __init parse_memmap_opt(char *p)
+static int __init parse_memmap_one(char *p)
 {
 	char *oldp;
 	u64 start_at, mem_size;
@@ -877,6 +877,20 @@ static int __init parse_memmap_opt(char *p)
 
 	return *p == '\0' ? 0 : -EINVAL;
 }
+static int __init parse_memmap_opt(char *str)
+{
+	while (str) {
+		char *k = strchr(str, ',');
+
+		if (k)
+			*k++ = 0;
+
+		parse_memmap_one(str);
+		str = k;
+	}
+
+	return 0;
+}
 early_param("memmap", parse_memmap_opt);
 
 void __init finish_e820_parsing(void)
-- 
1.7.7


^ permalink raw reply related	[flat|nested] 115+ messages in thread

* Re: [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping
  2012-11-12 21:17               ` [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping Yinghai Lu
@ 2012-11-13  5:51                 ` Yasuaki Ishimatsu
  2012-11-13  6:20                   ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Yasuaki Ishimatsu @ 2012-11-13  5:51 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel

2012/11/13 6:17, Yinghai Lu wrote:
> So make init_memory_mapping smaller and readable.
> 
> Suggested-by: Ingo Molnar <mingo@elte.hu>
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> Reviewed-by: Pekka Enberg <penberg@kernel.org>
> ---
>   arch/x86/mm/init.c |   42 ++++++++++++++++++++++++++----------------
>   1 files changed, 26 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index aa5b0da..6d8e102 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -146,25 +146,13 @@ static int __meminit save_mr(struct map_range *mr, int nr_range,
>   	return nr_range;
>   }
>   
> -/*
> - * Setup the direct mapping of the physical memory at PAGE_OFFSET.
> - * This runs before bootmem is initialized and gets pages directly from
> - * the physical memory. To access them they are temporarily mapped.
> - */
> -unsigned long __init_refok init_memory_mapping(unsigned long start,
> -					       unsigned long end)
> +static int __meminit split_mem_range(struct map_range *mr, int nr_range,
> +				     unsigned long start,
> +				     unsigned long end)
>   {
>   	unsigned long start_pfn, end_pfn;
> -	unsigned long ret = 0;
>   	unsigned long pos;
> -	struct map_range mr[NR_RANGE_MR];
> -	int nr_range, i;
> -
> -	printk(KERN_INFO "init_memory_mapping: [mem %#010lx-%#010lx]\n",
> -	       start, end - 1);
> -
> -	memset(mr, 0, sizeof(mr));
> -	nr_range = 0;
> +	int i;
>   
>   	/* head if not big page alignment ? */
>   	start_pfn = start >> PAGE_SHIFT;
> @@ -258,6 +246,28 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
>   			(mr[i].page_size_mask & (1<<PG_LEVEL_1G))?"1G":(
>   			 (mr[i].page_size_mask & (1<<PG_LEVEL_2M))?"2M":"4k"));
>   
> +	return nr_range;
> +}
> +
> +/*
> + * Setup the direct mapping of the physical memory at PAGE_OFFSET.
> + * This runs before bootmem is initialized and gets pages directly from
> + * the physical memory. To access them they are temporarily mapped.
> + */
> +unsigned long __init_refok init_memory_mapping(unsigned long start,
> +					       unsigned long end)
> +{
> +	struct map_range mr[NR_RANGE_MR];
> +	unsigned long ret = 0;
> +	int nr_range, i;
> +
> +	pr_info("init_memory_mapping: [mem %#010lx-%#010lx]\n",
> +	       start, end - 1);
> +
> +	memset(mr, 0, sizeof(mr));

> +	nr_range = 0;

This is unnecessary since it is set in the below.

> +	nr_range = split_mem_range(mr, nr_range, start, end);

Thanks,
Yasuaki Ishimatsu

> +
>   	/*
>   	 * Find space for the kernel direct mapping tables.
>   	 *
> 



^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping
  2012-11-13  5:51                 ` Yasuaki Ishimatsu
@ 2012-11-13  6:20                   ` Yinghai Lu
  2012-11-13  7:03                     ` snakky.zhang
  0 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-13  6:20 UTC (permalink / raw)
  To: Yasuaki Ishimatsu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel

On Mon, Nov 12, 2012 at 9:51 PM, Yasuaki Ishimatsu
<isimatu.yasuaki@jp.fujitsu.com> wrote:
> 2012/11/13 6:17, Yinghai Lu wrote:
>> +     nr_range = 0;
>
> This is unnecessary since it is set in the below.
>
>> +     nr_range = split_mem_range(mr, nr_range, start, end);
                                                             ^^^^^^^^

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping
  2012-11-13  6:20                   ` Yinghai Lu
@ 2012-11-13  7:03                     ` snakky.zhang
  2012-11-13 18:34                       ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: snakky.zhang @ 2012-11-13  7:03 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Yasuaki Ishimatsu, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Jacob Shin, Andrew Morton, Stefano Stabellini,
	Konrad Rzeszutek Wilk, linux-kernel

On 2012年11月13日 14:20, Yinghai Lu wrote:
> On Mon, Nov 12, 2012 at 9:51 PM, Yasuaki Ishimatsu
> <isimatu.yasuaki@jp.fujitsu.com> wrote:
>> 2012/11/13 6:17, Yinghai Lu wrote:
>>> +     nr_range = 0;
>> This is unnecessary since it is set in the below.
>>
>>> +     nr_range = split_mem_range(mr, nr_range, start, end);
>                                                               ^^^^^^^^
Why not use 0 directly?

nr_range = split_mem_range(mr, 0, start, end);



> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 26/46] x86, mm, Xen: Remove mapping_pagetable_reserve()
  2012-11-12 21:18               ` [PATCH 26/46] x86, mm, Xen: Remove mapping_pagetable_reserve() Yinghai Lu
@ 2012-11-13 16:36                 ` Stefano Stabellini
  2012-11-13 18:51                   ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Stefano Stabellini @ 2012-11-13 16:36 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel

On Mon, 12 Nov 2012, Yinghai Lu wrote:
> Page table area are pre-mapped now after
> 	x86, mm: setup page table in top-down
> 	x86, mm: Remove early_memremap workaround for page table accessing on 64bit
> 
> mapping_pagetable_reserve is not used anymore, so remove it.

You should mention in the description of the patch that you are
removing mask_rw_pte too.

The reason why you can do that safely is that you previously modified
allow_low_page to always return pages that are already mapped, moreover
xen_alloc_pte_init, xen_alloc_pmd_init, etc, will mark the page RO
before hooking it into the pagetable automatically.

[ ... ]

> diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
> index dcf5f2d..bbb883f 100644
> --- a/arch/x86/xen/mmu.c
> +++ b/arch/x86/xen/mmu.c
> @@ -1178,20 +1178,6 @@ static void xen_exit_mmap(struct mm_struct *mm)
>  
>  static void xen_post_allocator_init(void);
>  
> -static __init void xen_mapping_pagetable_reserve(u64 start, u64 end)
> -{
> -	/* reserve the range used */
> -	native_pagetable_reserve(start, end);
> -
> -	/* set as RW the rest */
> -	printk(KERN_DEBUG "xen: setting RW the range %llx - %llx\n", end,
> -			PFN_PHYS(pgt_buf_top));
> -	while (end < PFN_PHYS(pgt_buf_top)) {
> -		make_lowmem_page_readwrite(__va(end));
> -		end += PAGE_SIZE;
> -	}
> -}
> -
>  #ifdef CONFIG_X86_64
>  static void __init xen_cleanhighmap(unsigned long vaddr,
>  				    unsigned long vaddr_end)
> @@ -1503,19 +1489,6 @@ static pte_t __init mask_rw_pte(pte_t *ptep, pte_t pte)
>  #else /* CONFIG_X86_64 */
>  static pte_t __init mask_rw_pte(pte_t *ptep, pte_t pte)
>  {
> -	unsigned long pfn = pte_pfn(pte);
> -
> -	/*
> -	 * If the new pfn is within the range of the newly allocated
> -	 * kernel pagetable, and it isn't being mapped into an
> -	 * early_ioremap fixmap slot as a freshly allocated page, make sure
> -	 * it is RO.
> -	 */
> -	if (((!is_early_ioremap_ptep(ptep) &&
> -			pfn >= pgt_buf_start && pfn < pgt_buf_top)) ||
> -			(is_early_ioremap_ptep(ptep) && pfn != (pgt_buf_end - 1)))
> -		pte = pte_wrprotect(pte);
> -
>  	return pte;

you should just get rid of mask_rw_pte completely

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 27/46] x86, mm: Add alloc_low_pages(num)
  2012-11-12 21:18               ` [PATCH 27/46] x86, mm: Add alloc_low_pages(num) Yinghai Lu
@ 2012-11-13 16:37                 ` Stefano Stabellini
  2012-11-13 18:53                   ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Stefano Stabellini @ 2012-11-13 16:37 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel

On Mon, 12 Nov 2012, Yinghai Lu wrote:
> 32bit kmap mapping needs pages to be used for low to high.
> At this point those pages are still from pgt_buf_* from BRK, so it is
> ok now.
> But we want to move early_ioremap_page_table_range_init() out of
> init_memory_mapping() and only call it one time later, that will
> make page_table_range_init/page_table_kmap_check/alloc_low_page to
> use memblock to get page.
> 
> memblock allocation for pages are from high to low.
> So will get panic from page_table_kmap_check() that has BUG_ON to do
> ordering checking.
> 
> This patch add alloc_low_pages to make it possible to allocate serveral
> pages at first, and hand out pages one by one from low to high.
> 
> -v2: add one line comment about xen requirements.

where is it?

> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> ---
>  arch/x86/mm/init.c        |   33 +++++++++++++++++++++------------
>  arch/x86/mm/mm_internal.h |    6 +++++-
>  2 files changed, 26 insertions(+), 13 deletions(-)
> 
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index 9d51af72..f5e0120 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -25,36 +25,45 @@ unsigned long __meminitdata pgt_buf_top;
>  
>  static unsigned long min_pfn_mapped;
>  
> -__ref void *alloc_low_page(void)
> +__ref void *alloc_low_pages(unsigned int num)
>  {
>  	unsigned long pfn;
> -	void *adr;
> +	int i;
>  
>  #ifdef CONFIG_X86_64
>  	if (after_bootmem) {
> -		adr = (void *)get_zeroed_page(GFP_ATOMIC | __GFP_NOTRACK);
> +		unsigned int order;
>  
> -		return adr;
> +		order = get_order((unsigned long)num << PAGE_SHIFT);
> +		return (void *)__get_free_pages(GFP_ATOMIC | __GFP_NOTRACK |
> +						__GFP_ZERO, order);
>  	}
>  #endif
>  
> -	if ((pgt_buf_end + 1) >= pgt_buf_top) {
> +	if ((pgt_buf_end + num) >= pgt_buf_top) {
>  		unsigned long ret;
>  		if (min_pfn_mapped >= max_pfn_mapped)
>  			panic("alloc_low_page: ran out of memory");
>  		ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
>  					max_pfn_mapped << PAGE_SHIFT,
> -					PAGE_SIZE, PAGE_SIZE);
> +					PAGE_SIZE * num , PAGE_SIZE);
>  		if (!ret)
>  			panic("alloc_low_page: can not alloc memory");
> -		memblock_reserve(ret, PAGE_SIZE);
> +		memblock_reserve(ret, PAGE_SIZE * num);
>  		pfn = ret >> PAGE_SHIFT;
> -	} else
> -		pfn = pgt_buf_end++;
> +	} else {
> +		pfn = pgt_buf_end;
> +		pgt_buf_end += num;
> +	}
> +
> +	for (i = 0; i < num; i++) {
> +		void *adr;
> +
> +		adr = __va((pfn + i) << PAGE_SHIFT);
> +		clear_page(adr);
> +	}
>  
> -	adr = __va(pfn * PAGE_SIZE);
> -	clear_page(adr);
> -	return adr;
> +	return __va(pfn << PAGE_SHIFT);
>  }
>  
>  /* need 4 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */
> diff --git a/arch/x86/mm/mm_internal.h b/arch/x86/mm/mm_internal.h
> index b3f993a..7e3b88e 100644
> --- a/arch/x86/mm/mm_internal.h
> +++ b/arch/x86/mm/mm_internal.h
> @@ -1,6 +1,10 @@
>  #ifndef __X86_MM_INTERNAL_H
>  #define __X86_MM_INTERNAL_H
>  
> -void *alloc_low_page(void);
> +void *alloc_low_pages(unsigned int num);
> +static inline void *alloc_low_page(void)
> +{
> +	return alloc_low_pages(1);
> +}
>  
>  #endif	/* __X86_MM_INTERNAL_H */
> -- 
> 1.7.7
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 28/46] x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages
  2012-11-12 21:18               ` [PATCH 28/46] x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages Yinghai Lu
@ 2012-11-13 16:38                 ` Stefano Stabellini
  2012-11-13 17:56                   ` H. Peter Anvin
  0 siblings, 1 reply; 115+ messages in thread
From: Stefano Stabellini @ 2012-11-13 16:38 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel

On Mon, 12 Nov 2012, Yinghai Lu wrote:
> From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> 
> Add link to commit 279b706 for more information
> 
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>

ah, here it is, OK then

>  arch/x86/mm/init.c |    5 +++++
>  1 files changed, 5 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index f5e0120..a7939ed 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -25,6 +25,11 @@ unsigned long __meminitdata pgt_buf_top;
>  
>  static unsigned long min_pfn_mapped;
>  
> +/*
> + * Pages returned are already directly mapped.
> + *
> + * Changing that is likely to break Xen, see commit 279b706 for detail info.
                                                                    ^detailed

> + */
>  __ref void *alloc_low_pages(unsigned int num)
>  {
>  	unsigned long pfn;
> -- 
> 1.7.7
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 22/46] x86, mm: Remove early_memremap workaround for page table accessing on 64bit
  2012-11-12 21:18               ` [PATCH 22/46] x86, mm: Remove early_memremap workaround for page table accessing on 64bit Yinghai Lu
@ 2012-11-13 16:52                 ` Stefano Stabellini
  0 siblings, 0 replies; 115+ messages in thread
From: Stefano Stabellini @ 2012-11-13 16:52 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel

On Mon, 12 Nov 2012, Yinghai Lu wrote:
> We try to put page table high to make room for kdump, and at that time
> those ranges are not mapped yet, and have to use ioremap to access it.
> 
> Now after patch that pre-map page table top down.
> 	x86, mm: setup page table in top-down
> We do not need that workaround anymore.
> 
> Just use __va to return directly mapping address.
> 
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>


Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

>  arch/x86/mm/init_64.c |   38 ++++----------------------------------
>  1 files changed, 4 insertions(+), 34 deletions(-)
> 
> diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
> index eefaea6..5ee9242 100644
> --- a/arch/x86/mm/init_64.c
> +++ b/arch/x86/mm/init_64.c
> @@ -340,36 +340,12 @@ static __ref void *alloc_low_page(unsigned long *phys)
>  	} else
>  		pfn = pgt_buf_end++;
>  
> -	adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
> +	adr = __va(pfn * PAGE_SIZE);
>  	clear_page(adr);
>  	*phys  = pfn * PAGE_SIZE;
>  	return adr;
>  }
>  
> -static __ref void *map_low_page(void *virt)
> -{
> -	void *adr;
> -	unsigned long phys, left;
> -
> -	if (after_bootmem)
> -		return virt;
> -
> -	phys = __pa(virt);
> -	left = phys & (PAGE_SIZE - 1);
> -	adr = early_memremap(phys & PAGE_MASK, PAGE_SIZE);
> -	adr = (void *)(((unsigned long)adr) | left);
> -
> -	return adr;
> -}
> -
> -static __ref void unmap_low_page(void *adr)
> -{
> -	if (after_bootmem)
> -		return;
> -
> -	early_iounmap((void *)((unsigned long)adr & PAGE_MASK), PAGE_SIZE);
> -}
> -
>  static unsigned long __meminit
>  phys_pte_init(pte_t *pte_page, unsigned long addr, unsigned long end,
>  	      pgprot_t prot)
> @@ -442,10 +418,9 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
>  		if (pmd_val(*pmd)) {
>  			if (!pmd_large(*pmd)) {
>  				spin_lock(&init_mm.page_table_lock);
> -				pte = map_low_page((pte_t *)pmd_page_vaddr(*pmd));
> +				pte = (pte_t *)pmd_page_vaddr(*pmd);
>  				last_map_addr = phys_pte_init(pte, address,
>  								end, prot);
> -				unmap_low_page(pte);
>  				spin_unlock(&init_mm.page_table_lock);
>  				continue;
>  			}
> @@ -483,7 +458,6 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
>  
>  		pte = alloc_low_page(&pte_phys);
>  		last_map_addr = phys_pte_init(pte, address, end, new_prot);
> -		unmap_low_page(pte);
>  
>  		spin_lock(&init_mm.page_table_lock);
>  		pmd_populate_kernel(&init_mm, pmd, __va(pte_phys));
> @@ -518,10 +492,9 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
>  
>  		if (pud_val(*pud)) {
>  			if (!pud_large(*pud)) {
> -				pmd = map_low_page(pmd_offset(pud, 0));
> +				pmd = pmd_offset(pud, 0);
>  				last_map_addr = phys_pmd_init(pmd, addr, end,
>  							 page_size_mask, prot);
> -				unmap_low_page(pmd);
>  				__flush_tlb_all();
>  				continue;
>  			}
> @@ -560,7 +533,6 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
>  		pmd = alloc_low_page(&pmd_phys);
>  		last_map_addr = phys_pmd_init(pmd, addr, end, page_size_mask,
>  					      prot);
> -		unmap_low_page(pmd);
>  
>  		spin_lock(&init_mm.page_table_lock);
>  		pud_populate(&init_mm, pud, __va(pmd_phys));
> @@ -596,17 +568,15 @@ kernel_physical_mapping_init(unsigned long start,
>  			next = end;
>  
>  		if (pgd_val(*pgd)) {
> -			pud = map_low_page((pud_t *)pgd_page_vaddr(*pgd));
> +			pud = (pud_t *)pgd_page_vaddr(*pgd);
>  			last_map_addr = phys_pud_init(pud, __pa(start),
>  						 __pa(end), page_size_mask);
> -			unmap_low_page(pud);
>  			continue;
>  		}
>  
>  		pud = alloc_low_page(&pud_phys);
>  		last_map_addr = phys_pud_init(pud, __pa(start), __pa(next),
>  						 page_size_mask);
> -		unmap_low_page(pud);
>  
>  		spin_lock(&init_mm.page_table_lock);
>  		pgd_populate(&init_mm, pgd, __va(pud_phys));
> -- 
> 1.7.7
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 21/46] x86, mm: setup page table in top-down
  2012-11-12 21:18               ` [PATCH 21/46] x86, mm: setup page table in top-down Yinghai Lu
@ 2012-11-13 17:26                 ` Stefano Stabellini
  2012-11-13 19:59                   ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Stefano Stabellini @ 2012-11-13 17:26 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel

On Mon, 12 Nov 2012, Yinghai Lu wrote:
> Get pgt_buf early from BRK, and use it to map PMD_SIZE from top at first.
> Then use mapped pages to map more ranges below, and keep looping until
> all pages get mapped.
> 
> alloc_low_page will use page from BRK at first, after that buffer is used
> up, will use memblock to find and reserve pages for page table usage.
> 
> Introduce min_pfn_mapped to make sure find new pages from mapped ranges,
> that will be updated when lower pages get mapped.
> 
> Also add step_size to make sure that don't try to map too big range with
> limited mapped pages initially, and increase the step_size when we have
> more mapped pages on hand.
> 
> At last we can get rid of calculation and find early pgt related code.
> 
> -v2: update to after fix_xen change,
>      also use MACRO for initial pgt_buf size and add comments with it.
> -v3: skip big reserved range in memblock.reserved near end.
> -v4: don't need fix_xen change now.
> 
> Suggested-by: "H. Peter Anvin" <hpa@zytor.com>
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>

The changes to alloc_low_page and early_alloc_pgt_buf look OK to me.

The changes to init_mem_mapping are a bit iffy but they aren't too
unreasonable.
Overall the patch is OK even though I would certainly appreciate more
comments and better variable names (real_end?), see below.


>  arch/x86/include/asm/page_types.h |    1 +
>  arch/x86/include/asm/pgtable.h    |    1 +
>  arch/x86/kernel/setup.c           |    3 +
>  arch/x86/mm/init.c                |  210 +++++++++++--------------------------
>  arch/x86/mm/init_32.c             |   17 +++-
>  arch/x86/mm/init_64.c             |   17 +++-
>  6 files changed, 94 insertions(+), 155 deletions(-)
> 
> diff --git a/arch/x86/include/asm/page_types.h b/arch/x86/include/asm/page_types.h
> index 54c9787..9f6f3e6 100644
> --- a/arch/x86/include/asm/page_types.h
> +++ b/arch/x86/include/asm/page_types.h
> @@ -45,6 +45,7 @@ extern int devmem_is_allowed(unsigned long pagenr);
> 
>  extern unsigned long max_low_pfn_mapped;
>  extern unsigned long max_pfn_mapped;
> +extern unsigned long min_pfn_mapped;
> 
>  static inline phys_addr_t get_max_mapped(void)
>  {
> diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
> index dd1a888..6991a3e 100644
> --- a/arch/x86/include/asm/pgtable.h
> +++ b/arch/x86/include/asm/pgtable.h
> @@ -603,6 +603,7 @@ static inline int pgd_none(pgd_t pgd)
> 
>  extern int direct_gbpages;
>  void init_mem_mapping(void);
> +void early_alloc_pgt_buf(void);
> 
>  /* local pte updates need not use xchg for locking */
>  static inline pte_t native_local_ptep_get_and_clear(pte_t *ptep)
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index 94f922a..f7634092 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -124,6 +124,7 @@
>   */
>  unsigned long max_low_pfn_mapped;
>  unsigned long max_pfn_mapped;
> +unsigned long min_pfn_mapped;
> 
>  #ifdef CONFIG_DMI
>  RESERVE_BRK(dmi_alloc, 65536);
> @@ -900,6 +901,8 @@ void __init setup_arch(char **cmdline_p)
> 
>         reserve_ibft_region();
> 
> +       early_alloc_pgt_buf();
> +
>         /*
>          * Need to conclude brk, before memblock_x86_fill()
>          *  it could use memblock_find_in_range, could overlap with
> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
> index 47a1ba2..76a6e82 100644
> --- a/arch/x86/mm/init.c
> +++ b/arch/x86/mm/init.c
> @@ -21,6 +21,21 @@ unsigned long __initdata pgt_buf_start;
>  unsigned long __meminitdata pgt_buf_end;
>  unsigned long __meminitdata pgt_buf_top;
> 
> +/* need 4 4k for initial PMD_SIZE, 4k for 0-ISA_END_ADDRESS */
> +#define INIT_PGT_BUF_SIZE      (5 * PAGE_SIZE)
> +RESERVE_BRK(early_pgt_alloc, INIT_PGT_BUF_SIZE);
> +void  __init early_alloc_pgt_buf(void)
> +{
> +       unsigned long tables = INIT_PGT_BUF_SIZE;
> +       phys_addr_t base;
> +
> +       base = __pa(extend_brk(tables, PAGE_SIZE));
> +
> +       pgt_buf_start = base >> PAGE_SHIFT;
> +       pgt_buf_end = pgt_buf_start;
> +       pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
> +}
> +
>  int after_bootmem;
> 
>  int direct_gbpages
> @@ -228,105 +243,6 @@ static int __meminit split_mem_range(struct map_range *mr, int nr_range,
>         return nr_range;
>  }
> 
> -/*
> - * First calculate space needed for kernel direct mapping page tables to cover
> - * mr[0].start to mr[nr_range - 1].end, while accounting for possible 2M and 1GB
> - * pages. Then find enough contiguous space for those page tables.
> - */
> -static unsigned long __init calculate_table_space_size(unsigned long start, unsigned long end)
> -{
> -       int i;
> -       unsigned long puds = 0, pmds = 0, ptes = 0, tables;
> -       struct map_range mr[NR_RANGE_MR];
> -       int nr_range;
> -
> -       memset(mr, 0, sizeof(mr));
> -       nr_range = 0;
> -       nr_range = split_mem_range(mr, nr_range, start, end);
> -
> -       for (i = 0; i < nr_range; i++) {
> -               unsigned long range, extra;
> -
> -               range = mr[i].end - mr[i].start;
> -               puds += (range + PUD_SIZE - 1) >> PUD_SHIFT;
> -
> -               if (mr[i].page_size_mask & (1 << PG_LEVEL_1G)) {
> -                       extra = range - ((range >> PUD_SHIFT) << PUD_SHIFT);
> -                       pmds += (extra + PMD_SIZE - 1) >> PMD_SHIFT;
> -               } else {
> -                       pmds += (range + PMD_SIZE - 1) >> PMD_SHIFT;
> -               }
> -
> -               if (mr[i].page_size_mask & (1 << PG_LEVEL_2M)) {
> -                       extra = range - ((range >> PMD_SHIFT) << PMD_SHIFT);
> -#ifdef CONFIG_X86_32
> -                       extra += PMD_SIZE;
> -#endif
> -                       ptes += (extra + PAGE_SIZE - 1) >> PAGE_SHIFT;
> -               } else {
> -                       ptes += (range + PAGE_SIZE - 1) >> PAGE_SHIFT;
> -               }
> -       }
> -
> -       tables = roundup(puds * sizeof(pud_t), PAGE_SIZE);
> -       tables += roundup(pmds * sizeof(pmd_t), PAGE_SIZE);
> -       tables += roundup(ptes * sizeof(pte_t), PAGE_SIZE);
> -
> -#ifdef CONFIG_X86_32
> -       /* for fixmap */
> -       tables += roundup(__end_of_fixed_addresses * sizeof(pte_t), PAGE_SIZE);
> -#endif
> -
> -       return tables;
> -}
> -
> -static unsigned long __init calculate_all_table_space_size(void)
> -{
> -       unsigned long start_pfn, end_pfn;
> -       unsigned long tables;
> -       int i;
> -
> -       /* the ISA range is always mapped regardless of memory holes */
> -       tables = calculate_table_space_size(0, ISA_END_ADDRESS);
> -
> -       for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
> -               u64 start = start_pfn << PAGE_SHIFT;
> -               u64 end = end_pfn << PAGE_SHIFT;
> -
> -               if (end <= ISA_END_ADDRESS)
> -                       continue;
> -
> -               if (start < ISA_END_ADDRESS)
> -                       start = ISA_END_ADDRESS;
> -#ifdef CONFIG_X86_32
> -               /* on 32 bit, we only map up to max_low_pfn */
> -               if ((start >> PAGE_SHIFT) >= max_low_pfn)
> -                       continue;
> -
> -               if ((end >> PAGE_SHIFT) > max_low_pfn)
> -                       end = max_low_pfn << PAGE_SHIFT;
> -#endif
> -               tables += calculate_table_space_size(start, end);
> -       }
> -
> -       return tables;
> -}
> -
> -static void __init find_early_table_space(unsigned long start,
> -                                         unsigned long good_end,
> -                                         unsigned long tables)
> -{
> -       phys_addr_t base;
> -
> -       base = memblock_find_in_range(start, good_end, tables, PAGE_SIZE);
> -       if (!base)
> -               panic("Cannot find space for the kernel page tables");
> -
> -       pgt_buf_start = base >> PAGE_SHIFT;
> -       pgt_buf_end = pgt_buf_start;
> -       pgt_buf_top = pgt_buf_start + (tables >> PAGE_SHIFT);
> -}
> -
>  static struct range pfn_mapped[E820_X_MAX];
>  static int nr_pfn_mapped;
> 
> @@ -392,17 +308,14 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
>  }
> 
>  /*
> - * Iterate through E820 memory map and create direct mappings for only E820_RAM
> - * regions. We cannot simply create direct mappings for all pfns from
> - * [0 to max_low_pfn) and [4GB to max_pfn) because of possible memory holes in
> - * high addresses that cannot be marked as UC by fixed/variable range MTRRs.
> - * Depending on the alignment of E820 ranges, this may possibly result in using
> - * smaller size (i.e. 4K instead of 2M or 1G) page tables.
> + * this one could take range with hole in it.
>   */

this comment in particular is not very satisfactory


> -static void __init init_range_memory_mapping(unsigned long range_start,
> +static unsigned long __init init_range_memory_mapping(
> +                                          unsigned long range_start,
>                                            unsigned long range_end)
>  {
>         unsigned long start_pfn, end_pfn;
> +       unsigned long mapped_ram_size = 0;
>         int i;
> 
>         for_each_mem_pfn_range(i, MAX_NUMNODES, &start_pfn, &end_pfn, NULL) {
> @@ -422,71 +335,70 @@ static void __init init_range_memory_mapping(unsigned long range_start,
>                         end = range_end;
> 
>                 init_memory_mapping(start, end);
> +
> +               mapped_ram_size += end - start;
>         }
> +
> +       return mapped_ram_size;
>  }
> 
> +/* (PUD_SHIFT-PMD_SHIFT)/2 */
> +#define STEP_SIZE_SHIFT 5
>  void __init init_mem_mapping(void)
>  {
> -       unsigned long tables, good_end, end;
> +       unsigned long end, real_end, start, last_start;
> +       unsigned long step_size;
> +       unsigned long addr;
> +       unsigned long mapped_ram_size = 0;
> +       unsigned long new_mapped_ram_size;
> 
>         probe_page_size_mask();
> 
> -       /*
> -        * Find space for the kernel direct mapping tables.
> -        *
> -        * Later we should allocate these tables in the local node of the
> -        * memory mapped. Unfortunately this is done currently before the
> -        * nodes are discovered.
> -        */
>  #ifdef CONFIG_X86_64
>         end = max_pfn << PAGE_SHIFT;
> -       good_end = end;
>  #else
>         end = max_low_pfn << PAGE_SHIFT;
> -       good_end = max_pfn_mapped << PAGE_SHIFT;
>  #endif
> -       tables = calculate_all_table_space_size();
> -       find_early_table_space(0, good_end, tables);
> -       printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] prealloc\n",
> -               end - 1, pgt_buf_start << PAGE_SHIFT,
> -               (pgt_buf_top << PAGE_SHIFT) - 1);
> 
> -       max_pfn_mapped = 0; /* will get exact value next */
>         /* the ISA range is always mapped regardless of memory holes */
>         init_memory_mapping(0, ISA_END_ADDRESS);
> -       init_range_memory_mapping(ISA_END_ADDRESS, end);
> +
> +       /* xen has big range in reserved near end of ram, skip it at first */
> +       addr = memblock_find_in_range(ISA_END_ADDRESS, end, PMD_SIZE,
> +                        PAGE_SIZE);
> +       real_end = addr + PMD_SIZE;
> +
> +       /* step_size need to be small so pgt_buf from BRK could cover it */
> +       step_size = PMD_SIZE;
> +       max_pfn_mapped = 0; /* will get exact value next */
> +       min_pfn_mapped = real_end >> PAGE_SHIFT;
> +       last_start = start = real_end;
> +       while (last_start > ISA_END_ADDRESS) {
> +               if (last_start > step_size) {
> +                       start = round_down(last_start - 1, step_size);
> +                       if (start < ISA_END_ADDRESS)
> +                               start = ISA_END_ADDRESS;
> +               } else
> +                       start = ISA_END_ADDRESS;
> +               new_mapped_ram_size = init_range_memory_mapping(start,
> +                                                       last_start);
> +               last_start = start;
> +               min_pfn_mapped = last_start >> PAGE_SHIFT;
> +               /* only increase step_size after big range get mapped */
> +               if (new_mapped_ram_size > mapped_ram_size)
> +                       step_size <<= STEP_SIZE_SHIFT;
> +               mapped_ram_size += new_mapped_ram_size;
> +       }
> +
> +       if (real_end < end)
> +               init_range_memory_mapping(real_end, end);
> +
>  #ifdef CONFIG_X86_64
>         if (max_pfn > max_low_pfn) {
>                 /* can we preseve max_low_pfn ?*/
>                 max_low_pfn = max_pfn;
>         }
>  #endif
> -       /*
> -        * Reserve the kernel pagetable pages we used (pgt_buf_start -
> -        * pgt_buf_end) and free the other ones (pgt_buf_end - pgt_buf_top)
> -        * so that they can be reused for other purposes.
> -        *
> -        * On native it just means calling memblock_reserve, on Xen it also
> -        * means marking RW the pagetable pages that we allocated before
> -        * but that haven't been used.
> -        *
> -        * In fact on xen we mark RO the whole range pgt_buf_start -
> -        * pgt_buf_top, because we have to make sure that when
> -        * init_memory_mapping reaches the pagetable pages area, it maps
> -        * RO all the pagetable pages, including the ones that are beyond
> -        * pgt_buf_end at that time.
> -        */
> -       if (pgt_buf_end > pgt_buf_start) {
> -               printk(KERN_DEBUG "kernel direct mapping tables up to %#lx @ [mem %#010lx-%#010lx] final\n",
> -                       end - 1, pgt_buf_start << PAGE_SHIFT,
> -                       (pgt_buf_end << PAGE_SHIFT) - 1);
> -               x86_init.mapping.pagetable_reserve(PFN_PHYS(pgt_buf_start),
> -                               PFN_PHYS(pgt_buf_end));
> -       }
> -
> -       /* stop the wrong using */
> -       pgt_buf_top = 0;
> -
>         early_memtest(0, max_pfn_mapped << PAGE_SHIFT);
>  }

you should say why we don't need to call pagetable_reserve anymore: is
it because alloc_low_page is going to reserve each page that it
allocates?


> diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
> index 27f7fc6..7bb1106 100644
> --- a/arch/x86/mm/init_32.c
> +++ b/arch/x86/mm/init_32.c
> @@ -61,11 +61,22 @@ bool __read_mostly __vmalloc_start_set = false;
> 
>  static __init void *alloc_low_page(void)
>  {
> -       unsigned long pfn = pgt_buf_end++;
> +       unsigned long pfn;
>         void *adr;
> 
> -       if (pfn >= pgt_buf_top)
> -               panic("alloc_low_page: ran out of memory");
> +       if ((pgt_buf_end + 1) >= pgt_buf_top) {
> +               unsigned long ret;
> +               if (min_pfn_mapped >= max_pfn_mapped)
> +                       panic("alloc_low_page: ran out of memory");
> +               ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
> +                                       max_pfn_mapped << PAGE_SHIFT,
> +                                       PAGE_SIZE, PAGE_SIZE);
> +               if (!ret)
> +                       panic("alloc_low_page: can not alloc memory");
> +               memblock_reserve(ret, PAGE_SIZE);
> +               pfn = ret >> PAGE_SHIFT;
> +       } else
> +               pfn = pgt_buf_end++;
> 
>         adr = __va(pfn * PAGE_SIZE);
>         clear_page(adr);
> diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
> index fa28e3e..eefaea6 100644
> --- a/arch/x86/mm/init_64.c
> +++ b/arch/x86/mm/init_64.c
> @@ -316,7 +316,7 @@ void __init cleanup_highmap(void)
> 
>  static __ref void *alloc_low_page(unsigned long *phys)
>  {
> -       unsigned long pfn = pgt_buf_end++;
> +       unsigned long pfn;
>         void *adr;
> 
>         if (after_bootmem) {
> @@ -326,8 +326,19 @@ static __ref void *alloc_low_page(unsigned long *phys)
>                 return adr;
>         }
> 
> -       if (pfn >= pgt_buf_top)
> -               panic("alloc_low_page: ran out of memory");
> +       if ((pgt_buf_end + 1) >= pgt_buf_top) {
> +               unsigned long ret;
> +               if (min_pfn_mapped >= max_pfn_mapped)
> +                       panic("alloc_low_page: ran out of memory");
> +               ret = memblock_find_in_range(min_pfn_mapped << PAGE_SHIFT,
> +                                       max_pfn_mapped << PAGE_SHIFT,
> +                                       PAGE_SIZE, PAGE_SIZE);
> +               if (!ret)
> +                       panic("alloc_low_page: can not alloc memory");
> +               memblock_reserve(ret, PAGE_SIZE);
> +               pfn = ret >> PAGE_SHIFT;
> +       } else
> +               pfn = pgt_buf_end++;
> 
>         adr = early_memremap(pfn * PAGE_SIZE, PAGE_SIZE);
>         clear_page(adr);
> --
> 1.7.7
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 23/46] x86, mm: Remove parameter in alloc_low_page for 64bit
  2012-11-12 21:18               ` [PATCH 23/46] x86, mm: Remove parameter in alloc_low_page for 64bit Yinghai Lu
@ 2012-11-13 17:40                 ` Stefano Stabellini
  0 siblings, 0 replies; 115+ messages in thread
From: Stefano Stabellini @ 2012-11-13 17:40 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Stefano Stabellini, Konrad Rzeszutek Wilk,
	linux-kernel

On Mon, 12 Nov 2012, Yinghai Lu wrote:
> Now all page table buf are pre-mapped, and could use virtual address directly.
> So don't need to remember physical address anymore.
> 
> Remove that phys pointer in alloc_low_page(), and that will allow us to merge
> alloc_low_page between 64bit and 32bit.
> 
> Signed-off-by: Yinghai Lu <yinghai@kernel.org>

Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>


>  arch/x86/mm/init_64.c |   19 +++++++------------
>  1 files changed, 7 insertions(+), 12 deletions(-)
> 
> diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
> index 5ee9242..1960820 100644
> --- a/arch/x86/mm/init_64.c
> +++ b/arch/x86/mm/init_64.c
> @@ -314,14 +314,13 @@ void __init cleanup_highmap(void)
>  	}
>  }
>  
> -static __ref void *alloc_low_page(unsigned long *phys)
> +static __ref void *alloc_low_page(void)
>  {
>  	unsigned long pfn;
>  	void *adr;
>  
>  	if (after_bootmem) {
>  		adr = (void *)get_zeroed_page(GFP_ATOMIC | __GFP_NOTRACK);
> -		*phys = __pa(adr);
>  
>  		return adr;
>  	}
> @@ -342,7 +341,6 @@ static __ref void *alloc_low_page(unsigned long *phys)
>  
>  	adr = __va(pfn * PAGE_SIZE);
>  	clear_page(adr);
> -	*phys  = pfn * PAGE_SIZE;
>  	return adr;
>  }
>  
> @@ -401,7 +399,6 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
>  	int i = pmd_index(address);
>  
>  	for (; i < PTRS_PER_PMD; i++, address = next) {
> -		unsigned long pte_phys;
>  		pmd_t *pmd = pmd_page + pmd_index(address);
>  		pte_t *pte;
>  		pgprot_t new_prot = prot;
> @@ -456,11 +453,11 @@ phys_pmd_init(pmd_t *pmd_page, unsigned long address, unsigned long end,
>  			continue;
>  		}
>  
> -		pte = alloc_low_page(&pte_phys);
> +		pte = alloc_low_page();
>  		last_map_addr = phys_pte_init(pte, address, end, new_prot);
>  
>  		spin_lock(&init_mm.page_table_lock);
> -		pmd_populate_kernel(&init_mm, pmd, __va(pte_phys));
> +		pmd_populate_kernel(&init_mm, pmd, pte);
>  		spin_unlock(&init_mm.page_table_lock);
>  	}
>  	update_page_count(PG_LEVEL_2M, pages);
> @@ -476,7 +473,6 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
>  	int i = pud_index(addr);
>  
>  	for (; i < PTRS_PER_PUD; i++, addr = next) {
> -		unsigned long pmd_phys;
>  		pud_t *pud = pud_page + pud_index(addr);
>  		pmd_t *pmd;
>  		pgprot_t prot = PAGE_KERNEL;
> @@ -530,12 +526,12 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
>  			continue;
>  		}
>  
> -		pmd = alloc_low_page(&pmd_phys);
> +		pmd = alloc_low_page();
>  		last_map_addr = phys_pmd_init(pmd, addr, end, page_size_mask,
>  					      prot);
>  
>  		spin_lock(&init_mm.page_table_lock);
> -		pud_populate(&init_mm, pud, __va(pmd_phys));
> +		pud_populate(&init_mm, pud, pmd);
>  		spin_unlock(&init_mm.page_table_lock);
>  	}
>  	__flush_tlb_all();
> @@ -560,7 +556,6 @@ kernel_physical_mapping_init(unsigned long start,
>  
>  	for (; start < end; start = next) {
>  		pgd_t *pgd = pgd_offset_k(start);
> -		unsigned long pud_phys;
>  		pud_t *pud;
>  
>  		next = (start + PGDIR_SIZE) & PGDIR_MASK;
> @@ -574,12 +569,12 @@ kernel_physical_mapping_init(unsigned long start,
>  			continue;
>  		}
>  
> -		pud = alloc_low_page(&pud_phys);
> +		pud = alloc_low_page();
>  		last_map_addr = phys_pud_init(pud, __pa(start), __pa(next),
>  						 page_size_mask);
>  
>  		spin_lock(&init_mm.page_table_lock);
> -		pgd_populate(&init_mm, pgd, __va(pud_phys));
> +		pgd_populate(&init_mm, pgd, pud);
>  		spin_unlock(&init_mm.page_table_lock);
>  		pgd_changed = true;
>  	}
> -- 
> 1.7.7
> 

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 28/46] x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages
  2012-11-13 16:38                 ` Stefano Stabellini
@ 2012-11-13 17:56                   ` H. Peter Anvin
  2012-11-13 18:58                     ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: H. Peter Anvin @ 2012-11-13 17:56 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Yinghai Lu, Thomas Gleixner, Ingo Molnar, Jacob Shin,
	Andrew Morton, Konrad Rzeszutek Wilk, linux-kernel

On 11/13/2012 08:38 AM, Stefano Stabellini wrote:
> On Mon, 12 Nov 2012, Yinghai Lu wrote:
>> From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
>>
>> Add link to commit 279b706 for more information
>>
>> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
>
> ah, here it is, OK then
>
>>   arch/x86/mm/init.c |    5 +++++
>>   1 files changed, 5 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
>> index f5e0120..a7939ed 100644
>> --- a/arch/x86/mm/init.c
>> +++ b/arch/x86/mm/init.c
>> @@ -25,6 +25,11 @@ unsigned long __meminitdata pgt_buf_top;
>>
>>   static unsigned long min_pfn_mapped;
>>
>> +/*
>> + * Pages returned are already directly mapped.
>> + *
>> + * Changing that is likely to break Xen, see commit 279b706 for detail info.
>                                                                      ^detailed
>

When making references to git commits, please include the title of the 
commit:

  *
  * Changing that is likely to break Xen, see commit:
  *
  *    279b706 x86,xen: introduce x86_init.mapping.pagetable_reserve
  *
  * for detailed information.

Otherwise it might be very confusing if we have an abbreviated hash 
collision or end up having to change git to use another hash system.

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping
  2012-11-13  7:03                     ` snakky.zhang
@ 2012-11-13 18:34                       ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-13 18:34 UTC (permalink / raw)
  To: snakky.zhang
  Cc: Yasuaki Ishimatsu, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Jacob Shin, Andrew Morton, Stefano Stabellini,
	Konrad Rzeszutek Wilk, linux-kernel

On Mon, Nov 12, 2012 at 11:03 PM,  <snakky.zhang@gmail.com> wrote:
> On 2012年11月13日 14:20, Yinghai Lu wrote:
>>> 2012/11/13 6:17, Yinghai Lu wrote:
>>>>
>>>> +     nr_range = 0;
>>>
>>> This is unnecessary since it is set in the below.
>>>
>>>> +     nr_range = split_mem_range(mr, nr_range, start, end);
>>
>>                                                               ^^^^^^^^
>
> Why not use 0 directly?
>
> nr_range = split_mem_range(mr, 0, start, end);

yes, even could remove nr_range from split_mem_range.

but originally try to like "really" chopping the code to two parts.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 26/46] x86, mm, Xen: Remove mapping_pagetable_reserve()
  2012-11-13 16:36                 ` Stefano Stabellini
@ 2012-11-13 18:51                   ` Yinghai Lu
  2012-11-14 11:19                     ` Stefano Stabellini
  0 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-13 18:51 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Konrad Rzeszutek Wilk, linux-kernel

On Tue, Nov 13, 2012 at 8:36 AM, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
> On Mon, 12 Nov 2012, Yinghai Lu wrote:
>> Page table area are pre-mapped now after
>>       x86, mm: setup page table in top-down
>>       x86, mm: Remove early_memremap workaround for page table accessing on 64bit
>>
>> mapping_pagetable_reserve is not used anymore, so remove it.
>
> You should mention in the description of the patch that you are
> removing mask_rw_pte too.
>
> The reason why you can do that safely is that you previously modified
> allow_low_page to always return pages that are already mapped, moreover
> xen_alloc_pte_init, xen_alloc_pmd_init, etc, will mark the page RO
> before hooking it into the pagetable automatically.

updated change log:
---
x86, mm, Xen: Remove mapping_pagetable_reserve()

Page table area are pre-mapped now after
        x86, mm: setup page table in top-down
        x86, mm: Remove early_memremap workaround for page table
accessing on 64bit

mapping_pagetable_reserve is not used anymore, so remove it.

Also remove operation in mask_rw_pte(), as modified allow_low_page
always return pages that are already mapped, moreover
xen_alloc_pte_init, xen_alloc_pmd_init, etc, will mark the page RO
before hooking it into the pagetable automatically.

-v2: add changelog about mask_rw_pte() from Stefano.
-----


>
> [ ... ]
>
> you should just get rid of mask_rw_pte completely

then how about 32bit mask_rw_pte? Maybe you can clean up that later?

Thanks

Yinghai

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 27/46] x86, mm: Add alloc_low_pages(num)
  2012-11-13 16:37                 ` Stefano Stabellini
@ 2012-11-13 18:53                   ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-13 18:53 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Konrad Rzeszutek Wilk, linux-kernel

On Tue, Nov 13, 2012 at 8:37 AM, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
> On Mon, 12 Nov 2012, Yinghai Lu wrote:
>> 32bit kmap mapping needs pages to be used for low to high.
>> At this point those pages are still from pgt_buf_* from BRK, so it is
>> ok now.
>> But we want to move early_ioremap_page_table_range_init() out of
>> init_memory_mapping() and only call it one time later, that will
>> make page_table_range_init/page_table_kmap_check/alloc_low_page to
>> use memblock to get page.
>>
>> memblock allocation for pages are from high to low.
>> So will get panic from page_table_kmap_check() that has BUG_ON to do
>> ordering checking.
>>
>> This patch add alloc_low_pages to make it possible to allocate serveral
>> pages at first, and hand out pages one by one from low to high.
>>
>> -v2: add one line comment about xen requirements.
>
> where is it?

removed.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 28/46] x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages
  2012-11-13 17:56                   ` H. Peter Anvin
@ 2012-11-13 18:58                     ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-13 18:58 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, Jacob Shin,
	Andrew Morton, Konrad Rzeszutek Wilk, linux-kernel

On Tue, Nov 13, 2012 at 9:56 AM, H. Peter Anvin <hpa@zytor.com> wrote:
> When making references to git commits, please include the title of the
> commit:
>
>  *
>  * Changing that is likely to break Xen, see commit:
>  *
>  *    279b706 x86,xen: introduce x86_init.mapping.pagetable_reserve
>  *
>  * for detailed information.
>
> Otherwise it might be very confusing if we have an abbreviated hash
> collision or end up having to change git to use another hash system.

updated to your version.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 21/46] x86, mm: setup page table in top-down
  2012-11-13 17:26                 ` Stefano Stabellini
@ 2012-11-13 19:59                   ` Yinghai Lu
  2012-11-13 20:01                     ` H. Peter Anvin
  0 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-13 19:59 UTC (permalink / raw)
  To: Stefano Stabellini
  Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, Jacob Shin,
	Andrew Morton, Konrad Rzeszutek Wilk, linux-kernel

On Tue, Nov 13, 2012 at 9:26 AM, Stefano Stabellini
<stefano.stabellini@eu.citrix.com> wrote:
> On Mon, 12 Nov 2012, Yinghai Lu wrote:
>> Get pgt_buf early from BRK, and use it to map PMD_SIZE from top at first.
>> Then use mapped pages to map more ranges below, and keep looping until
>> all pages get mapped.
>>
>> alloc_low_page will use page from BRK at first, after that buffer is used
>> up, will use memblock to find and reserve pages for page table usage.
>>
>> Introduce min_pfn_mapped to make sure find new pages from mapped ranges,
>> that will be updated when lower pages get mapped.
>>
>> Also add step_size to make sure that don't try to map too big range with
>> limited mapped pages initially, and increase the step_size when we have
>> more mapped pages on hand.
>>
>> At last we can get rid of calculation and find early pgt related code.
>>
>> -v2: update to after fix_xen change,
>>      also use MACRO for initial pgt_buf size and add comments with it.
>> -v3: skip big reserved range in memblock.reserved near end.
>> -v4: don't need fix_xen change now.
>>
>> Suggested-by: "H. Peter Anvin" <hpa@zytor.com>
>> Signed-off-by: Yinghai Lu <yinghai@kernel.org>
>
> The changes to alloc_low_page and early_alloc_pgt_buf look OK to me.
>
> The changes to init_mem_mapping are a bit iffy but they aren't too
> unreasonable.
> Overall the patch is OK even though I would certainly appreciate more
> comments and better variable names (real_end?), see below.

real_end is not good?

xen put big reserved range between real_end and end.

that real_end is some kind of end of real usable areas.

so change to real_usable_end  or usable_end?

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 21/46] x86, mm: setup page table in top-down
  2012-11-13 19:59                   ` Yinghai Lu
@ 2012-11-13 20:01                     ` H. Peter Anvin
  2012-11-13 20:36                       ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: H. Peter Anvin @ 2012-11-13 20:01 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, Jacob Shin,
	Andrew Morton, Konrad Rzeszutek Wilk, linux-kernel

On 11/13/2012 11:59 AM, Yinghai Lu wrote:
>>
>> The changes to init_mem_mapping are a bit iffy but they aren't too
>> unreasonable.
>> Overall the patch is OK even though I would certainly appreciate more
>> comments and better variable names (real_end?), see below.
> 
> real_end is not good?
> 
> xen put big reserved range between real_end and end.
> 
> that real_end is some kind of end of real usable areas.
> 
> so change to real_usable_end  or usable_end?
> 

A description of a variable that includes the words "some kind of"
clearly indicates major confusion.  We need to know what the semantics
are, here.

	-hpa


^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 21/46] x86, mm: setup page table in top-down
  2012-11-13 20:01                     ` H. Peter Anvin
@ 2012-11-13 20:36                       ` Yinghai Lu
  2012-11-15 19:28                         ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: Yinghai Lu @ 2012-11-13 20:36 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, Jacob Shin,
	Andrew Morton, Konrad Rzeszutek Wilk, linux-kernel

On Tue, Nov 13, 2012 at 12:01 PM, H. Peter Anvin <hpa@zytor.com> wrote:
> On 11/13/2012 11:59 AM, Yinghai Lu wrote:
>>>
>>> The changes to init_mem_mapping are a bit iffy but they aren't too
>>> unreasonable.
>>> Overall the patch is OK even though I would certainly appreciate more
>>> comments and better variable names (real_end?), see below.
>>
>> real_end is not good?
>>
>> xen put big reserved range between real_end and end.
>>
>> that real_end is some kind of end of real usable areas.
>>
>> so change to real_usable_end  or usable_end?
>>
>
> A description of a variable that includes the words "some kind of"
> clearly indicates major confusion.  We need to know what the semantics
> are, here.

originally, we map range in this sequence:
1. map [0, 1M],
2. map 2M near max_pfn. and end is max_pfn<<PAGE_SHIFT
3. use new mapped area, to map low range.
4. change step size if more ram get mapped.
5. goto 3, until reach 1M.

now for xen, there is big chunk range under max_pfn and they are reserved
in memblock.reserved.
so even we map them, we still can not use them for page table.

so 2 become:
2a. find real_end under max_pfn that we can use it for page table
2b, map [real_end - 2M, real_end)

and need to add
6. map [real_end, max_pfn<<PAGE_SHIFT)

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 26/46] x86, mm, Xen: Remove mapping_pagetable_reserve()
  2012-11-13 18:51                   ` Yinghai Lu
@ 2012-11-14 11:19                     ` Stefano Stabellini
  0 siblings, 0 replies; 115+ messages in thread
From: Stefano Stabellini @ 2012-11-14 11:19 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	Jacob Shin, Andrew Morton, Konrad Rzeszutek Wilk, linux-kernel

On Tue, 13 Nov 2012, Yinghai Lu wrote:
> On Tue, Nov 13, 2012 at 8:36 AM, Stefano Stabellini
> <stefano.stabellini@eu.citrix.com> wrote:
> > On Mon, 12 Nov 2012, Yinghai Lu wrote:
> >> Page table area are pre-mapped now after
> >>       x86, mm: setup page table in top-down
> >>       x86, mm: Remove early_memremap workaround for page table accessing on 64bit
> >>
> >> mapping_pagetable_reserve is not used anymore, so remove it.
> >
> > You should mention in the description of the patch that you are
> > removing mask_rw_pte too.
> >
> > The reason why you can do that safely is that you previously modified
> > allow_low_page to always return pages that are already mapped, moreover
> > xen_alloc_pte_init, xen_alloc_pmd_init, etc, will mark the page RO
> > before hooking it into the pagetable automatically.
> 
> updated change log:
> ---
> x86, mm, Xen: Remove mapping_pagetable_reserve()
> 
> Page table area are pre-mapped now after
>         x86, mm: setup page table in top-down
>         x86, mm: Remove early_memremap workaround for page table
> accessing on 64bit
> 
> mapping_pagetable_reserve is not used anymore, so remove it.
> 
> Also remove operation in mask_rw_pte(), as modified allow_low_page
> always return pages that are already mapped, moreover
> xen_alloc_pte_init, xen_alloc_pmd_init, etc, will mark the page RO
> before hooking it into the pagetable automatically.
> 
> -v2: add changelog about mask_rw_pte() from Stefano.

Thanks

 
> >
> > [ ... ]
> >
> > you should just get rid of mask_rw_pte completely
> 
> then how about 32bit mask_rw_pte? Maybe you can clean up that later?

Yes, I can clean it up later.

However it is trivial: mask_rw_pte is only called by xen_set_pte_init
and in the 32bit case it already returns pte without modifications.

I would just remove the call to mask_rw_pte in xen_set_pte_init.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 21/46] x86, mm: setup page table in top-down
  2012-11-13 20:36                       ` Yinghai Lu
@ 2012-11-15 19:28                         ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-15 19:28 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, Jacob Shin,
	Andrew Morton, Konrad Rzeszutek Wilk, linux-kernel

On Tue, Nov 13, 2012 at 12:36 PM, Yinghai Lu <yinghai@kernel.org> wrote:
> On Tue, Nov 13, 2012 at 12:01 PM, H. Peter Anvin <hpa@zytor.com> wrote:
>> On 11/13/2012 11:59 AM, Yinghai Lu wrote:
>>>>
>>>> The changes to init_mem_mapping are a bit iffy but they aren't too
>>>> unreasonable.
>>>> Overall the patch is OK even though I would certainly appreciate more
>>>> comments and better variable names (real_end?), see below.
>>>
>>> real_end is not good?
>>>
>>> xen put big reserved range between real_end and end.
>>>
>>> that real_end is some kind of end of real usable areas.
>>>
>>> so change to real_usable_end  or usable_end?
>>>
>>
>> A description of a variable that includes the words "some kind of"
>> clearly indicates major confusion.  We need to know what the semantics
>> are, here.
>
> originally, we map range in this sequence:
> 1. map [0, 1M],
> 2. map 2M near max_pfn. and end is max_pfn<<PAGE_SHIFT
> 3. use new mapped area, to map low range.
> 4. change step size if more ram get mapped.
> 5. goto 3, until reach 1M.
>
> now for xen, there is big chunk range under max_pfn and they are reserved
> in memblock.reserved.
> so even we map them, we still can not use them for page table.
>
> so 2 become:
> 2a. find real_end under max_pfn that we can use it for page table
> 2b, map [real_end - 2M, real_end)
>
> and need to add
> 6. map [real_end, max_pfn<<PAGE_SHIFT)

hi, peter,

I updated for-x86-mm branch at
	git://git.kernel.org/pub/scm/linux/kernel/git/yinghai/linux-yinghai.git
for-x86-mm

with updated changlog and acked-by from Stefano for some patches.

^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 6/7] x86, mm: setup page table from top-down
  2012-10-10 17:38         ` Yinghai Lu
@ 2012-11-16 17:14           ` H. Peter Anvin
  2012-11-16 17:16             ` Yinghai Lu
  0 siblings, 1 reply; 115+ messages in thread
From: H. Peter Anvin @ 2012-11-16 17:14 UTC (permalink / raw)
  To: Yinghai Lu
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, Jacob Shin,
	Tejun Heo, linux-kernel

On 10/10/2012 10:38 AM, Yinghai Lu wrote:
> On Wed, Oct 10, 2012 at 10:26 AM, Stefano Stabellini
> <stefano.stabellini@eu.citrix.com> wrote:
>> On Wed, 10 Oct 2012, Yinghai Lu wrote:
>>
>> It doesn't matter whether they come from BRK or other memory: Xen
>> assumes that all the pagetable pages come from
>> pgt_buf_start-pgt_buf_top, so if you are going to use another range you
>> need to tell Xen about it.
>>
>> Alternatively, you can follow Peter's suggestion and replace the current
>> hooks with a new one with a more precise and well defined semantic.
>> Something along the lines of "this pagetable page is about to be hooked
>> into the live pagetable". Xen would use the hook to mark it RO.
>
> attached patch on top of this patch will fix the problem?
>

  	.mapping = {
-		.pagetable_reserve		= native_pagetable_reserve,
+		.mark_page_ro			= mark_page_ro_noop;
  	},

I have already objected to this naming in the past, because it describes 
an implementation ("hypervisor make readonly") as opposed to a semantic 
function "make this page permissible to use as a page table".  I would 
call it pagetable_prepare or something like that.

	-hpa

-- 
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel.  I don't speak on their behalf.


^ permalink raw reply	[flat|nested] 115+ messages in thread

* Re: [PATCH 6/7] x86, mm: setup page table from top-down
  2012-11-16 17:14           ` H. Peter Anvin
@ 2012-11-16 17:16             ` Yinghai Lu
  0 siblings, 0 replies; 115+ messages in thread
From: Yinghai Lu @ 2012-11-16 17:16 UTC (permalink / raw)
  To: H. Peter Anvin
  Cc: Stefano Stabellini, Thomas Gleixner, Ingo Molnar, Jacob Shin,
	Tejun Heo, linux-kernel

On Fri, Nov 16, 2012 at 9:14 AM, H. Peter Anvin <hpa@zytor.com> wrote:
> On 10/10/2012 10:38 AM, Yinghai Lu wrote:
>> attached patch on top of this patch will fix the problem?
>>
>
>         .mapping = {
> -               .pagetable_reserve              = native_pagetable_reserve,
> +               .mark_page_ro                   = mark_page_ro_noop;
>         },
>
> I have already objected to this naming in the past, because it describes an
> implementation ("hypervisor make readonly") as opposed to a semantic
> function "make this page permissible to use as a page table".  I would call
> it pagetable_prepare or something like that.

please check v7 series with /46 in the title.

^ permalink raw reply	[flat|nested] 115+ messages in thread

end of thread, other threads:[~2012-11-16 17:16 UTC | newest]

Thread overview: 115+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-09 23:58 [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Yinghai Lu
2012-10-09 23:58 ` [PATCH 1/7] x86, mm: align start address to correct big page size Yinghai Lu
2012-10-09 23:58 ` [PATCH 2/7] x86, mm: Use big page size for small memory range Yinghai Lu
2012-10-09 23:58 ` [PATCH 3/7] x86, mm: Don't clear page table if next range is ram Yinghai Lu
2012-10-09 23:58 ` [PATCH 4/7] x86, mm: only keep initial mapping for ram Yinghai Lu
2012-10-10 13:48   ` Konrad Rzeszutek Wilk
2012-10-10 14:59     ` Yinghai Lu
2012-10-09 23:58 ` [PATCH 5/7] x86, mm: Break down init_all_memory_mapping Yinghai Lu
2012-10-10 13:55   ` Konrad Rzeszutek Wilk
2012-10-10 15:42     ` Yinghai Lu
2012-10-09 23:58 ` [PATCH 6/7] x86, mm: setup page table from top-down Yinghai Lu
2012-10-10  1:53   ` Yinghai Lu
2012-10-10 16:38   ` Stefano Stabellini
2012-10-10 17:07     ` Yinghai Lu
2012-10-10 17:26       ` Stefano Stabellini
2012-10-10 17:38         ` Yinghai Lu
2012-11-16 17:14           ` H. Peter Anvin
2012-11-16 17:16             ` Yinghai Lu
2012-10-09 23:58 ` [PATCH 7/7] x86, mm: Remove early_memremap workaround for page table accessing Yinghai Lu
2012-10-10 13:47 ` [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Konrad Rzeszutek Wilk
2012-10-10 14:55   ` Yinghai Lu
2012-10-10 16:40 ` Stefano Stabellini
2012-10-11  6:13   ` Yinghai Lu
2012-10-11 23:04     ` Yinghai Lu
2012-10-18 16:17     ` Stefano Stabellini
2012-10-18 16:26       ` Jacob Shin
2012-10-18 16:57         ` Stefano Stabellini
2012-10-18 20:36           ` Yinghai Lu
2012-10-18 20:40         ` Yinghai Lu
2012-10-18 21:57           ` Jacob Shin
2012-10-18 20:43       ` Yinghai Lu
2012-10-30 13:44     ` Konrad Rzeszutek Wilk
2012-10-30 14:47       ` Yinghai Lu
2012-11-03 21:35         ` Yinghai Lu
2012-11-03 21:37           ` H. Peter Anvin
2012-11-05 20:25             ` Yinghai Lu
2012-11-05 20:27               ` [PATCH 39/42] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
2012-11-05 20:27                 ` [PATCH 40/42] x86, mm: kill numa_64.h Yinghai Lu
2012-11-05 20:27                 ` [PATCH 41/42] sparc, mm: Remove calling of free_all_bootmem_node() Yinghai Lu
2012-11-05 20:27                   ` Yinghai Lu
2012-11-06 17:44                   ` David Miller
2012-11-06 17:44                     ` David Miller
2012-11-05 20:27                 ` [PATCH 42/42] mm: Kill NO_BOOTMEM version free_all_bootmem_node() Yinghai Lu
2012-11-07 16:11               ` [PATCH -v3 0/7] x86: Use BRK to pre mapping page table to make xen happy Konrad Rzeszutek Wilk
2012-11-08  1:40                 ` Konrad Rzeszutek Wilk
2012-11-08  4:06                   ` Yinghai Lu
2012-11-09 20:31                     ` Yinghai Lu
2012-11-12 19:30           ` Konrad Rzeszutek Wilk
2012-11-12 21:17             ` [PATCH v7 00/46] x86, mm: map ram from top-down with BRK and memblock Yinghai Lu
2012-11-12 21:17               ` [PATCH 01/46] x86, mm: Add global page_size_mask and probe one time only Yinghai Lu
2012-11-12 21:17               ` [PATCH 02/46] x86, mm: Split out split_mem_range from init_memory_mapping Yinghai Lu
2012-11-13  5:51                 ` Yasuaki Ishimatsu
2012-11-13  6:20                   ` Yinghai Lu
2012-11-13  7:03                     ` snakky.zhang
2012-11-13 18:34                       ` Yinghai Lu
2012-11-12 21:17               ` [PATCH 03/46] x86, mm: Move down find_early_table_space() Yinghai Lu
2012-11-12 21:18               ` [PATCH 04/46] x86, mm: Move init_memory_mapping calling out of setup.c Yinghai Lu
2012-11-12 21:18               ` [PATCH 05/46] x86, mm: Revert back good_end setting for 64bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 06/46] x86, mm: Change find_early_table_space() paramters Yinghai Lu
2012-11-12 21:18               ` [PATCH 07/46] x86, mm: Find early page table buffer together Yinghai Lu
2012-11-12 21:18               ` [PATCH 08/46] x86, mm: Separate out calculate_table_space_size() Yinghai Lu
2012-11-12 21:18               ` [PATCH 09/46] x86, mm: Set memblock initial limit to 1M Yinghai Lu
2012-11-12 21:18               ` [PATCH 10/46] x86, mm: if kernel .text .data .bss are not marked as E820_RAM, complain and fix Yinghai Lu
2012-11-12 21:18               ` [PATCH 11/46] x86, mm: Fixup code testing if a pfn is direct mapped Yinghai Lu
2012-11-12 21:18               ` [PATCH 12/46] x86, mm: use pfn_range_is_mapped() with CPA Yinghai Lu
2012-11-12 21:18               ` [PATCH 13/46] x86, mm: use pfn_range_is_mapped() with gart Yinghai Lu
2012-11-12 21:18               ` [PATCH 14/46] x86, mm: use pfn_range_is_mapped() with reserve_initrd Yinghai Lu
2012-11-12 21:18               ` [PATCH 15/46] x86, mm: Only direct map addresses that are marked as E820_RAM Yinghai Lu
2012-11-12 21:18               ` [PATCH 16/46] x86, mm: relocate initrd under all mem for 64bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 17/46] x86, mm: Align start address to correct big page size Yinghai Lu
2012-11-12 21:18               ` [PATCH 18/46] x86, mm: Use big page size for small memory range Yinghai Lu
2012-11-12 21:18               ` [PATCH 19/46] x86, mm: Don't clear page table if range is ram Yinghai Lu
2012-11-12 21:18               ` [PATCH 20/46] x86, mm: Break down init_all_memory_mapping Yinghai Lu
2012-11-12 21:18               ` [PATCH 21/46] x86, mm: setup page table in top-down Yinghai Lu
2012-11-13 17:26                 ` Stefano Stabellini
2012-11-13 19:59                   ` Yinghai Lu
2012-11-13 20:01                     ` H. Peter Anvin
2012-11-13 20:36                       ` Yinghai Lu
2012-11-15 19:28                         ` Yinghai Lu
2012-11-12 21:18               ` [PATCH 22/46] x86, mm: Remove early_memremap workaround for page table accessing on 64bit Yinghai Lu
2012-11-13 16:52                 ` Stefano Stabellini
2012-11-12 21:18               ` [PATCH 23/46] x86, mm: Remove parameter in alloc_low_page for 64bit Yinghai Lu
2012-11-13 17:40                 ` Stefano Stabellini
2012-11-12 21:18               ` [PATCH 24/46] x86, mm: Merge alloc_low_page between 64bit and 32bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 25/46] x86, mm: Move min_pfn_mapped back to mm/init.c Yinghai Lu
2012-11-12 21:18               ` [PATCH 26/46] x86, mm, Xen: Remove mapping_pagetable_reserve() Yinghai Lu
2012-11-13 16:36                 ` Stefano Stabellini
2012-11-13 18:51                   ` Yinghai Lu
2012-11-14 11:19                     ` Stefano Stabellini
2012-11-12 21:18               ` [PATCH 27/46] x86, mm: Add alloc_low_pages(num) Yinghai Lu
2012-11-13 16:37                 ` Stefano Stabellini
2012-11-13 18:53                   ` Yinghai Lu
2012-11-12 21:18               ` [PATCH 28/46] x86, mm: Add pointer about Xen mmu requirement for alloc_low_pages Yinghai Lu
2012-11-13 16:38                 ` Stefano Stabellini
2012-11-13 17:56                   ` H. Peter Anvin
2012-11-13 18:58                     ` Yinghai Lu
2012-11-12 21:18               ` [PATCH 29/46] x86, mm: only call early_ioremap_page_table_range_init() once Yinghai Lu
2012-11-12 21:18               ` [PATCH 30/46] x86, mm: Move back pgt_buf_* to mm/init.c Yinghai Lu
2012-11-12 21:18               ` [PATCH 31/46] x86, mm: Move init_gbpages() out of setup.c Yinghai Lu
2012-11-12 21:18               ` [PATCH 32/46] x86, mm: change low/hignmem_pfn_init to static on 32bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 33/46] x86, mm: Move function declaration into mm_internal.h Yinghai Lu
2012-11-12 21:18               ` [PATCH 34/46] x86, mm: Add check before clear pte above max_low_pfn on 32bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 35/46] x86, mm: use round_up/down in split_mem_range() Yinghai Lu
2012-11-12 21:18               ` [PATCH 36/46] x86, mm: use PFN_DOWN " Yinghai Lu
2012-11-12 21:18               ` [PATCH 37/46] x86, mm: use pfn instead of pos in split_mem_range Yinghai Lu
2012-11-12 21:18               ` [PATCH 38/46] x86, mm: use limit_pfn for end pfn Yinghai Lu
2012-11-12 21:18               ` [PATCH 39/46] x86, mm: Unifying after_bootmem for 32bit and 64bit Yinghai Lu
2012-11-12 21:18               ` [PATCH 40/46] x86, mm: Move after_bootmem to mm_internel.h Yinghai Lu
2012-11-12 21:18               ` [PATCH 41/46] x86, mm: Use clamp_t() in init_range_memory_mapping Yinghai Lu
2012-11-12 21:18               ` [PATCH 42/46] x86, mm: kill numa_free_all_bootmem() Yinghai Lu
2012-11-12 21:18               ` [PATCH 43/46] x86, mm: kill numa_64.h Yinghai Lu
2012-11-12 21:18               ` [PATCH 44/46] sparc, mm: Remove calling of free_all_bootmem_node() Yinghai Lu
2012-11-12 21:18                 ` Yinghai Lu
2012-11-12 21:18               ` [PATCH 45/46] mm: Kill NO_BOOTMEM version free_all_bootmem_node() Yinghai Lu
2012-11-12 21:18               ` [PATCH 46/46] x86, mm: Let "memmap=" take more entries one time Yinghai Lu

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.