On 9/3/24 19:29, Andrew Cooper wrote:
> On 30/08/2024 10:46 pm, Daniel P. Smith wrote:
>> diff --git a/xen/arch/x86/include/asm/bootinfo.h b/xen/arch/x86/include/asm/bootinfo.h
>> index e785ed1c5982..844262495962 100644
>> --- a/xen/arch/x86/include/asm/bootinfo.h
>> +++ b/xen/arch/x86/include/asm/bootinfo.h
>> @@ -8,10 +8,16 @@
>> #ifndef __XEN_X86_BOOTINFO_H__
>> #define __XEN_X86_BOOTINFO_H__
>>
>> +#include <xen/multiboot.h>
>> #include <xen/types.h>
>>
>> +struct boot_module {
>> + module_t *early_mod;
>
> This could do with a /* Transitionary only */ comment. In this patch
> it's not too bad, but it does get worse as new fields are added, before
> being removed.
Yep, can add a comment.
> I'd also drop the "early_" part. I know it's the initial_images array
> we're converting, but "early_" doesn't convey any extra meaning, and it
> makes a number of lines get quite hairy.
I can drop it.
>> +};
>> +
>> struct boot_info {
>> unsigned int nr_mods;
>> + struct boot_module *mods;
>
> struct boot_module modules[MAX_NR_BOOTMODS + 1];
>
> Probably at the end of the structure. In turn it ...
I can move it here, though just to be clear, are you suggesting that it
is kept at the end of the structure as more fields are added.
>>
>> const char *boot_loader_name;
>> const char *cmdline;
>> diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
>> index c6b45ced00ae..28fdbf4d4c2b 100644
>> --- a/xen/arch/x86/setup.c
>> +++ b/xen/arch/x86/setup.c
>> @@ -278,12 +278,17 @@ custom_param("acpi", parse_acpi_param);
>>
>> static const char *cmdline_cook(const char *p, const char *loader_name);
>>
>> +/* Max number of boot modules a bootloader can provide in addition to Xen */
>> +#define MAX_NR_BOOTMODS 63
>> +
>> static const module_t *__initdata initial_images;
>> static struct boot_info __initdata *boot_info;
>>
>> -static void __init multiboot_to_bootinfo(multiboot_info_t *mbi)
>> +static void __init multiboot_to_bootinfo(multiboot_info_t *mbi, module_t *mods)
>> {
>> static struct boot_info __initdata info;
>> + static struct boot_module __initdata boot_mods[MAX_NR_BOOTMODS + 1];
>
> ... drops this static.
Will be dropped.
>> + unsigned int i;
>>
>> info.nr_mods = mbi->mods_count;
>>
>> @@ -303,6 +308,14 @@ static void __init multiboot_to_bootinfo(multiboot_info_t *mbi)
>> info.mmap_length = mbi->mmap_length;
>> }
>>
>> + info.mods = boot_mods;
>> +
>> + for ( i=0; i < info.nr_mods; i++ )
>
> i = 0
Ack.
>> + boot_mods[i].early_mod = &mods[i];
>> +
>> + /* map the last mb module for xen entry */
>> + boot_mods[info.nr_mods].early_mod = &mods[info.nr_mods];
>
> The comment is good, but note how this is just one extra iteration of
> the loop, (so use <= for the bound).
I will move the comment above the loop and adjust the condition.
v/r,
dps