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

Reply via email to