On 20/11/2024 10:44 am, Jan Beulich wrote: > On 19.11.2024 22:57, Andrew Cooper wrote: >> Following commit cd7cc5320bb2 ("x86/boot: add start and size fields to struct >> boot_module"), bootstrap_map*() works as soon as boot_info is populated. > I'm struggling with following where this connection is coming from.
Specifically, the final hunk: > @@ -1416,12 +1420,6 @@ void asmlinkage __init noreturn > __start_xen(void) if ( bi->mods[i].start & (PAGE_SIZE - 1) ) > panic("Bootloader didn't honor module alignment request\n"); - /* - * > TODO: load ucode earlier once multiboot modules become accessible - * > at an earlier stage. - */ - early_microcode_init(bi); - if ( > xen_phys_start ) { struct boot_module *xen = &bi->mods[bi->nr_modules]; The context with panic() used to read: panic("Bootloader didn't honor module alignment request\n"); bi->mods[i].mod->mod_end -= bi->mods[i].mod->mod_start; bi->mods[i].mod->mod_start >>= PAGE_SHIFT; and calling bootstrap_map() prior to that mapped junk because the start is wrong by PAGE_SHIFT. This is why the TODO was inserted the last time around when we couldn't move loading as early as wanted. I suppose in principle this could be backported if we took bootstrap_map_addr() (which is a self-contained patch), and adjusted early_microcode_init() to avoid using bootstrap_map(), but it feels rather fragile, and still depends on most of the ucode fixes. ~Andrew