Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f0d43100 authored by Yinghai Lu's avatar Yinghai Lu Committed by Ingo Molnar
Browse files

x86: extend e820 early_res support 32bit -fix #3



introduce init_pg_table_start, so xen PV could specify the value.

Signed-off-by: default avatarYinghai Lu <yhlu.kernel@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 3945e2c9
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -76,7 +76,8 @@ void __init i386_start_kernel(void)
		reserve_early(ramdisk_image, ramdisk_end, "RAMDISK");
	}
#endif
	reserve_early(__pa_symbol(&_end), init_pg_tables_end, "INIT_PG_TABLE");
	reserve_early(init_pg_tables_start, init_pg_tables_end,
			"INIT_PG_TABLE");

	reserve_ebda_region();

+2 −0
Original line number Diff line number Diff line
@@ -194,6 +194,7 @@ default_entry:
	xorl %ebx,%ebx				/* %ebx is kept at zero */

	movl $pa(pg0), %edi
	movl %edi, pa(init_pg_tables_start)
	movl $pa(swapper_pg_pmd), %edx
	movl $PTE_ATTR, %eax
10:
@@ -228,6 +229,7 @@ default_entry:
page_pde_offset = (__PAGE_OFFSET >> 20);

	movl $pa(pg0), %edi
	movl %edi, pa(init_pg_tables_start)
	movl $pa(swapper_pg_dir), %edx
	movl $PTE_ATTR, %eax
10:
+7 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@
/* This value is set up by the early boot code to point to the value
   immediately after the boot time page tables.  It contains a *physical*
   address, and must not be in the .bss segment! */
unsigned long init_pg_tables_start __initdata = ~0UL;
unsigned long init_pg_tables_end __initdata = ~0UL;

/*
@@ -485,6 +486,10 @@ static void __init reserve_initrd(void)
		return;
	}

	printk(KERN_INFO "old RAMDISK: %08llx - %08llx\n", ramdisk_image,
			ramdisk_end);


	if (ramdisk_end <= end_of_lowmem) {
		/* All in lowmem, easy case */
		/*
@@ -511,6 +516,8 @@ static void __init reserve_initrd(void)
			 "NEW RAMDISK");
	initrd_start = ramdisk_here + PAGE_OFFSET;
	initrd_end   = initrd_start + ramdisk_size;
	printk(KERN_INFO "Allocated new RAMDISK: %08llx - %08llx\n",
			 ramdisk_here, ramdisk_here + ramdisk_size);

	do_relocate_initrd = true;
}
+3 −2
Original line number Diff line number Diff line
@@ -1011,6 +1011,7 @@ __init void lguest_init(void)
	 * clobbered.  The Launcher places our initial pagetables somewhere at
	 * the top of our physical memory, so we don't need extra space: set
	 * init_pg_tables_end to the end of the kernel. */
	init_pg_tables_start = __pa(pg0);
	init_pg_tables_end = __pa(pg0);

	/* Load the %fs segment register (the per-cpu segment register) with
@@ -1064,9 +1065,9 @@ __init void lguest_init(void)
	pm_power_off = lguest_power_off;
	machine_ops.restart = lguest_restart;

	/* Now we're set up, call start_kernel() in init/main.c and we proceed
	/* Now we're set up, call i386_start_kernel() in head32.c and we proceed
	 * to boot as normal.  It never returns. */
	start_kernel();
	i386_start_kernel();
}
/*
 * This marks the end of stage II of our journey, The Guest.
+2 −1
Original line number Diff line number Diff line
@@ -1211,6 +1211,7 @@ asmlinkage void __init xen_start_kernel(void)

	pgd = (pgd_t *)xen_start_info->pt_base;

	init_pg_tables_start = __pa(pgd);
	init_pg_tables_end = __pa(pgd) + xen_start_info->nr_pt_frames*PAGE_SIZE;

	init_mm.pgd = pgd; /* use the Xen pagetables to start */
@@ -1246,5 +1247,5 @@ asmlinkage void __init xen_start_kernel(void)
		add_preferred_console("hvc", 0, NULL);

	/* Start the world */
	start_kernel();
	i386_start_kernel();
}
Loading