VMI initialiation can relocate the fixmap, causing early_ioremap to malfunction if it is initialized before the relocation. The ioremap area is low enough in virtual address space that no actual collision occurs, however, because the pagetables for it were not allocated under VMI mode, the pagetable updates are dropped by the hypervisor as irrelevant, resulting in a crash on boot. Signed-off-by: Zachary Amsden diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 9d5674f..9627753 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -795,7 +795,6 @@ void __init setup_arch(char **cmdline_p) #endif early_cpu_init(); - early_ioremap_init(); ROOT_DEV = old_decode_dev(boot_params.hdr.root_dev); screen_info = boot_params.screen_info; @@ -888,6 +887,8 @@ void __init setup_arch(char **cmdline_p) vmi_init(); #endif + early_ioremap_init(); + /* after early param, so could get panic from serial */ reserve_early_setup_data();