Since the Xen heap pages (which are the only ones mapped at this point) don''t get passed to init_boot_pages(), it has no place to store the bootmem regions without faulting. Hence, a mapped page must be passed to that function as the very first thing. Signed-off-by: Jan Beulich <jbeulich@novell.com> --- 2009-07-10.orig/xen/arch/x86/setup.c 2009-07-10 13:58:29.000000000 +0200 +++ 2009-07-10/xen/arch/x86/setup.c 2009-07-10 16:11:31.000000000 +0200 @@ -766,7 +766,9 @@ void __init __start_xen(unsigned long mb reserve_e820_ram(&boot_e820, initial_images_base, initial_images_end); #if defined(CONFIG_X86_32) - xenheap_initial_phys_start = __pa(&_end); + xenheap_initial_phys_start = (PFN_UP(__pa(&_end)) + 1) << PAGE_SHIFT; + /* Must pass a single mapped page for populating bootmem_region_list. */ + init_boot_pages(__pa(&_end), xenheap_initial_phys_start); xenheap_phys_end = DIRECTMAP_MBYTES << 20; #else if ( !xen_phys_start ) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel