提交 6af61a76 编写于 作者: Y Yinghai Lu 提交者: Ingo Molnar

x86: clean up max_pfn_mapped usage - 32-bit

on 32-bit in head_32.S after initial page table is done, we get initial
max_pfn_mapped, and then kernel_physical_mapping_init will give us
a final one.

We need to use that to make sure find_e820_area will get valid addresses
for boot_map and for NODE_DATA(0) on numa32.

XEN PV and lguest may need to assign max_pfn_mapped too.
Signed-off-by: NYinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: NIngo Molnar <mingo@elte.hu>
上级 287572cb
...@@ -220,6 +220,8 @@ default_entry: ...@@ -220,6 +220,8 @@ default_entry:
jb 10b jb 10b
1: 1:
movl %edi,pa(init_pg_tables_end) movl %edi,pa(init_pg_tables_end)
shrl $12, %eax
movl %eax, pa(max_pfn_mapped)
/* Do early initialization of the fixmap area */ /* Do early initialization of the fixmap area */
movl $pa(swapper_pg_fixmap)+PDE_ATTR,%eax movl $pa(swapper_pg_fixmap)+PDE_ATTR,%eax
...@@ -251,6 +253,8 @@ page_pde_offset = (__PAGE_OFFSET >> 20); ...@@ -251,6 +253,8 @@ page_pde_offset = (__PAGE_OFFSET >> 20);
cmpl %ebp,%eax cmpl %ebp,%eax
jb 10b jb 10b
movl %edi,pa(init_pg_tables_end) movl %edi,pa(init_pg_tables_end)
shrl $12, %eax
movl %eax, pa(max_pfn_mapped)
/* Do early initialization of the fixmap area */ /* Do early initialization of the fixmap area */
movl $pa(swapper_pg_fixmap)+PDE_ATTR,%eax movl $pa(swapper_pg_fixmap)+PDE_ATTR,%eax
......
...@@ -586,7 +586,7 @@ void __init setup_bootmem_allocator(void) ...@@ -586,7 +586,7 @@ void __init setup_bootmem_allocator(void)
*/ */
bootmap_size = bootmem_bootmap_pages(max_low_pfn)<<PAGE_SHIFT; bootmap_size = bootmem_bootmap_pages(max_low_pfn)<<PAGE_SHIFT;
bootmap = find_e820_area(min_low_pfn<<PAGE_SHIFT, bootmap = find_e820_area(min_low_pfn<<PAGE_SHIFT,
max_low_pfn<<PAGE_SHIFT, bootmap_size, max_pfn_mapped<<PAGE_SHIFT, bootmap_size,
PAGE_SIZE); PAGE_SIZE);
if (bootmap == -1L) if (bootmap == -1L)
panic("Cannot find bootmem map of size %ld\n", bootmap_size); panic("Cannot find bootmem map of size %ld\n", bootmap_size);
...@@ -595,6 +595,8 @@ void __init setup_bootmem_allocator(void) ...@@ -595,6 +595,8 @@ void __init setup_bootmem_allocator(void)
reserve_initrd(); reserve_initrd();
#endif #endif
bootmap_size = init_bootmem(bootmap >> PAGE_SHIFT, max_low_pfn); bootmap_size = init_bootmem(bootmap >> PAGE_SHIFT, max_low_pfn);
printk(KERN_INFO " mapped low ram: 0 - %08lx\n",
max_pfn_mapped<<PAGE_SHIFT);
printk(KERN_INFO " low ram: %08lx - %08lx\n", printk(KERN_INFO " low ram: %08lx - %08lx\n",
min_low_pfn<<PAGE_SHIFT, max_low_pfn<<PAGE_SHIFT); min_low_pfn<<PAGE_SHIFT, max_low_pfn<<PAGE_SHIFT);
printk(KERN_INFO " bootmap %08lx - %08lx\n", printk(KERN_INFO " bootmap %08lx - %08lx\n",
......
...@@ -163,7 +163,8 @@ static void __init allocate_pgdat(int nid) ...@@ -163,7 +163,8 @@ static void __init allocate_pgdat(int nid)
else { else {
unsigned long pgdat_phys; unsigned long pgdat_phys;
pgdat_phys = find_e820_area(min_low_pfn<<PAGE_SHIFT, pgdat_phys = find_e820_area(min_low_pfn<<PAGE_SHIFT,
max_low_pfn<<PAGE_SHIFT, sizeof(pg_data_t), (nid ? max_low_pfn:max_pfn_mapped)<<PAGE_SHIFT,
sizeof(pg_data_t),
PAGE_SIZE); PAGE_SIZE);
NODE_DATA(nid) = (pg_data_t *)(pfn_to_kaddr(pgdat_phys>>PAGE_SHIFT)); NODE_DATA(nid) = (pg_data_t *)(pfn_to_kaddr(pgdat_phys>>PAGE_SHIFT));
reserve_early(pgdat_phys, pgdat_phys + sizeof(pg_data_t), reserve_early(pgdat_phys, pgdat_phys + sizeof(pg_data_t),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册