Messages in this thread Patch in this message | | | Date | Wed, 28 May 2008 11:01:46 +0100 | From | Jeremy Fitzhardinge <> | Subject | Re: [PATCH] x86: extend e820 ealy_res support 32bit - fix #2 |
| |
Yinghai Lu wrote: > > can you try attached patch? >
Thanks, that nearly works. I needed the patch below to get it to successfully boot.
For reference, this is what the early reserve map looks like now:
(early) 256MB LOWMEM available. (early) low ram: 02634000 - 10000000 (early) bootmap 02634000 - 02636000 (early) early res: 0 [0-fff] BIOS data page (early) early res: 1 [1000-1fff] EX TRAMPOLINE (early) early res: 2 [6000-6fff] TRAMPOLINE (early) early res: 3 [25db000-261dfff] XEN (early) early res: 4 [1000000-18a8303] TEXT DATA BSS (early) early res: 5 [18a9000-25dafff] RAMDISK (early) early res: 6 [261e000-2633fff] INIT_PG_TABLE (early) early res: 7 [2634000-2635fff] BOOTMAP
J
Subject: xen: reserve_early Xen-specific memory
Make sure that the start_info and pfn->mfn translation array are reserved. i386_start_kernel will arrange to reserve the kernel code/data, initrd and pagetable.
Also, add prototype for i386_start_kernel.
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> --- arch/x86/xen/enlighten.c | 9 +++++++++ include/asm-x86/setup.h | 1 + 2 files changed, 10 insertions(+)
=================================================================== --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c @@ -1266,6 +1266,15 @@ add_preferred_console("hvc", 0, NULL); } + /* + * Reserve Xen bits: + * - mfn_list + * - xen_start_info + * See comment above "struct start_info" in <xen/interface/xen.h> + */ + reserve_early(__pa(xen_start_info->mfn_list), + __pa(xen_start_info->pt_base), "XEN"); + /* Start the world */ i386_start_kernel(); } =================================================================== --- a/include/asm-x86/setup.h +++ b/include/asm-x86/setup.h @@ -58,6 +58,7 @@ int __init copy_e820_map(struct e820entry *biosmap, int nr_map); void __init add_memory_region(unsigned long long start, unsigned long long size, int type); +void __init i386_start_kernel(void); extern unsigned long init_pg_tables_start; extern unsigned long init_pg_tables_end;
| |