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.

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.

> +};
> +
>  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 ...

>  
>      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.

> +    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

> +        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).

~Andew

Reply via email to