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