From: "Alejandro Vallejo" <alejandro.vallejo@cloud.com>
To: "Daniel P. Smith" <dpsmith@apertussolutions.com>,
<xen-devel@lists.xenproject.org>
Cc: "Christopher Clark" <christopher.w.clark@gmail.com>,
jason.andryuk@amd.com, "Jan Beulich" <jbeulich@suse.com>,
"Andrew Cooper" <andrew.cooper3@citrix.com>,
"Roger Pau Monné" <roger.pau@citrix.com>
Subject: Re: [PATCH v4 01/44] x86/boot: move x86 boot module counting into a new boot_info struct
Date: Mon, 02 Sep 2024 14:47:04 +0100 [thread overview]
Message-ID: <D3VUFEINDZZJ.3OHX2CEG4T0JU@cloud.com> (raw)
In-Reply-To: <20240830214730.1621-2-dpsmith@apertussolutions.com>
I haven't read the entire series yet, but here's my .02 so far
On Fri Aug 30, 2024 at 10:46 PM BST, Daniel P. Smith wrote:
> From: Christopher Clark <christopher.w.clark@gmail.com>
>
> An initial step towards a non-multiboot internal representation of boot
> modules for common code, starting with x86 setup and converting the fields
> that are accessed for the startup calculations.
>
> Introduce a new header, <xen/asm/bootinfo.h>, and populate it with a new
> boot_info structure initially containing a count of the number of boot
> modules.
>
> No functional change intended.
>
> Signed-off-by: Christopher Clark <christopher.w.clark@gmail.com>
> Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com>
> ---
> xen/arch/x86/include/asm/bootinfo.h | 25 +++++++++++++
> xen/arch/x86/setup.c | 58 +++++++++++++++++------------
> 2 files changed, 59 insertions(+), 24 deletions(-)
> create mode 100644 xen/arch/x86/include/asm/bootinfo.h
>
> diff --git a/xen/arch/x86/include/asm/bootinfo.h b/xen/arch/x86/include/asm/bootinfo.h
> new file mode 100644
> index 000000000000..e850f80d26a7
> --- /dev/null
> +++ b/xen/arch/x86/include/asm/bootinfo.h
> @@ -0,0 +1,25 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * Copyright (c) 2024 Christopher Clark <christopher.w.clark@gmail.com>
> + * Copyright (c) 2024 Apertus Solutions, LLC
> + * Author: Daniel P. Smith <dpsmith@apertussolutions.com>
> + */
> +
> +#ifndef __XEN_X86_BOOTINFO_H__
> +#define __XEN_X86_BOOTINFO_H__
> +
This struct would benefit from a comment stating what it's for and how it's
meant to be used. At a glance it seems like it's meant to be serve as a
boot-protocol agnostic representation of boot-parameters, used as a generic
means of information handover. Which would imply multiboot_info is parsed onto
it when booting from multiboot and is synthesised from scratch in other cases
(e.g: direct EFI?).
> +struct boot_info {
> + unsigned int nr_mods;
It's imo better to treat this as an ABI. That would allow using this layer as a
boot protocol in itself (which I'm guessing is the objective? I haven't gotten
that far in the series). If so, this would need to be a fixed-width uintN_t.
Same with other fields in follow-up patches.
> +};
> +
> +#endif
> +
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * tab-width: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
> diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
> index eee20bb1753c..dd94ee2e736b 100644
> --- a/xen/arch/x86/setup.c
> +++ b/xen/arch/x86/setup.c
> @@ -32,6 +32,7 @@
> #include <compat/xen.h>
> #endif
> #include <xen/bitops.h>
> +#include <asm/bootinfo.h>
> #include <asm/smp.h>
> #include <asm/processor.h>
> #include <asm/mpspec.h>
> @@ -276,7 +277,16 @@ static int __init cf_check parse_acpi_param(const char *s)
> custom_param("acpi", parse_acpi_param);
>
> static const module_t *__initdata initial_images;
> -static unsigned int __initdata nr_initial_images;
> +static struct boot_info __initdata *boot_info;
> +
> +static void __init multiboot_to_bootinfo(multiboot_info_t *mbi)
If this function returned boot_info instead and the caller made the
assignment then it would be possible to unit-test/fuzz it.
It also fits a bit more nicely with the usual implications of that function
name pattern, I think.
> +{
> + static struct boot_info __initdata info;
> +
> + info.nr_mods = mbi->mods_count;
Shouldn't this be gated on MBI_MODULES being set?
info.nr_mods = (mbi->flags & MBI_MODULES) ? mbi->mods_count : 0;
> +
> + boot_info = &info;
> +}
>
> unsigned long __init initial_images_nrpages(nodeid_t node)
> {
> @@ -285,7 +295,7 @@ unsigned long __init initial_images_nrpages(nodeid_t node)
> unsigned long nr;
> unsigned int i;
>
> - for ( nr = i = 0; i < nr_initial_images; ++i )
> + for ( nr = i = 0; i < boot_info->nr_mods; ++i )
> {
> unsigned long start = initial_images[i].mod_start;
> unsigned long end = start + PFN_UP(initial_images[i].mod_end);
> @@ -301,7 +311,7 @@ void __init discard_initial_images(void)
> {
> unsigned int i;
>
> - for ( i = 0; i < nr_initial_images; ++i )
> + for ( i = 0; i < boot_info->nr_mods; ++i )
> {
> uint64_t start = (uint64_t)initial_images[i].mod_start << PAGE_SHIFT;
>
> @@ -309,7 +319,7 @@ void __init discard_initial_images(void)
> start + PAGE_ALIGN(initial_images[i].mod_end));
> }
>
> - nr_initial_images = 0;
> + boot_info->nr_mods = 0;
Out of curiosity, why is this required?
> initial_images = NULL;
> }
>
> @@ -1034,9 +1044,10 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
> mod = __va(mbi->mods_addr);
> }
>
> + multiboot_to_bootinfo(mbi);
> +
> loader = (mbi->flags & MBI_LOADERNAME) ? __va(mbi->boot_loader_name)
> : "unknown";
> -
Stray newline removal?
> /* Parse the command-line options. */
> if ( mbi->flags & MBI_CMDLINE )
> cmdline = cmdline_cook(__va(mbi->cmdline), loader);
> @@ -1141,18 +1152,18 @@ void asmlinkage __init noreturn __start_xen(unsigned long mbi_p)
> bootsym(boot_edd_info_nr));
>
> /* Check that we have at least one Multiboot module. */
> - if ( !(mbi->flags & MBI_MODULES) || (mbi->mods_count == 0) )
> + if ( !(mbi->flags & MBI_MODULES) || (boot_info->nr_mods == 0) )
With MBI_MODULES accounted for during conversion, the first part of the
conditional can be ellided and you could simply do:
if ( !boot_info->nr_mods )
panic(...)
Also, could we move this to multiboot_to_bootinfo()? It'd contain these sorts
of boot argument checks to a much more self contained function and help check
at the point of assignment, preventing misuse.
> panic("dom0 kernel not specified. Check bootloader configuration\n");
>
> /* Check that we don't have a silly number of modules. */
> - if ( mbi->mods_count > sizeof(module_map) * 8 )
> + if ( boot_info->nr_mods > sizeof(module_map) * 8 )
Like above, this check would be much more neatly contained where boot_info
is created, imo.
> {
> - mbi->mods_count = sizeof(module_map) * 8;
> + boot_info->nr_mods = sizeof(module_map) * 8;
> printk("Excessive multiboot modules - using the first %u only\n",
Does the comment need adjusting too to make it more general? As in
s/multiboot/boot.
> - mbi->mods_count);
> + boot_info->nr_mods);
> }
>
> - bitmap_fill(module_map, mbi->mods_count);
> + bitmap_fill(module_map, boot_info->nr_mods);
> __clear_bit(0, module_map); /* Dom0 kernel is always first */
>
> if ( pvh_boot )
Cheers,
Alejandro
next prev parent reply other threads:[~2024-09-02 13:47 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-30 21:46 [PATCH v4 00/44] Boot modules for Hyperlaunch Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 01/44] x86/boot: move x86 boot module counting into a new boot_info struct Daniel P. Smith
2024-09-02 13:47 ` Alejandro Vallejo [this message]
2024-09-04 6:23 ` Jan Beulich
2024-09-26 14:21 ` Daniel P. Smith
2024-09-03 22:24 ` Andrew Cooper
2024-09-26 14:31 ` Daniel P. Smith
2024-09-03 22:35 ` Andrew Cooper
2024-09-26 14:51 ` Daniel P. Smith
2024-09-04 6:31 ` Jan Beulich
2024-09-26 14:53 ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 02/44] x86/boot: move boot loader name to boot info Daniel P. Smith
2024-09-03 22:41 ` Andrew Cooper
2024-09-26 15:02 ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 03/44] x86/boot: move cmdline " Daniel P. Smith
2024-09-03 23:04 ` Andrew Cooper
2024-09-26 15:41 ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 04/44] x86/boot: move mmap info " Daniel P. Smith
2024-09-03 23:18 ` Andrew Cooper
2024-09-26 15:48 ` Daniel P. Smith
2024-09-04 6:26 ` Jan Beulich
2024-09-26 15:54 ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 05/44] x86/boot: introduce struct boot_module Daniel P. Smith
2024-09-03 23:29 ` Andrew Cooper
2024-09-26 16:03 ` Daniel P. Smith
2024-09-04 6:33 ` Jan Beulich
2024-09-26 16:04 ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 06/44] x86/boot: convert consider_modules to " Daniel P. Smith
2024-09-04 6:40 ` Jan Beulich
2024-09-04 10:41 ` Andrew Cooper
2024-09-26 16:15 ` Daniel P. Smith
2024-09-26 16:10 ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 07/44] x86/boot: move headroom to boot modules Daniel P. Smith
2024-09-03 23:40 ` Andrew Cooper
2024-09-26 16:21 ` Daniel P. Smith
2024-09-04 6:45 ` Jan Beulich
2024-09-26 16:26 ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 08/44] x86/boot: convert setup.c mod refs to early_mod Daniel P. Smith
2024-09-03 23:50 ` Andrew Cooper
2024-09-26 16:28 ` Daniel P. Smith
2024-09-04 6:47 ` Jan Beulich
2024-09-26 16:55 ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 09/44] x86/boot: split bootstrap_map_addr() out of bootstrap_map() Daniel P. Smith
2024-09-04 6:49 ` Jan Beulich
2024-09-04 10:47 ` Andrew Cooper
2024-09-26 17:06 ` Daniel P. Smith
2024-09-26 17:04 ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 10/44] x86/boot: introduce boot module types Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 11/44] x86/boot: introduce boot module flags Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 12/44] x86/boot: add start and size fields to struct boot_module Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 13/44] x86/boot: update struct boot_module on module relocation Daniel P. Smith
2024-09-03 23:48 ` Andrew Cooper
2024-09-26 17:08 ` Daniel P. Smith
2024-08-30 21:46 ` [PATCH v4 14/44] x86/boot: transition relocation calculations to struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 15/44] x86/boot: introduce boot module interator Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 16/44] x86/boot: introduce consumed flag for struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 17/44] x86/boot: convert microcode loading to consume struct boot_info Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 18/44] x86/boot: convert late microcode loading to struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 19/44] x86/boot: use consumed boot module flag for microcode Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 20/44] x86/boot: convert xsm policy loading to struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 21/44] x86/boot: convert ramdisk locating " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 22/44] x86/boot: remove module_map usage from microcode loading Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 23/44] x86/boot: remove module_map usage from xsm policy loading Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 24/44] x86/boot: remove module_map usage by ramdisk loading Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 25/44] x86/boot: convert create_dom0 to use boot info Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 26/44] x86/boot: convert construct_dom0 to use struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 27/44] x86/boot: relocate kextra into boot info Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 28/44] x86/boot: add cmdline to struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 29/44] x86/boot: convert dom0_construct_pv image param " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 30/44] x86/boot: convert dom0_construct_pv initrd " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 31/44] x86/boot: convert dom0_construct_pvh " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 32/44] x86/boot: convert pvh_load_kernel " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 33/44] x86/boot: convert initial_images " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 34/44] x86/boot: drop the use of initial_images unit global Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 35/44] x86/boot: remove usage of mod_end by discard_initial_images Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 36/44] x86/boot: remove remaining early_mod references Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 37/44] x86/boot: remove early_mod from struct boot_module Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 38/44] x86/boot: introduce boot domain Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 39/44] x86/boot: introduce domid field to struct boot_domain Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 40/44] x86/boot: add cmdline " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 41/44] x86/boot: add struct domain " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 42/44] x86/boot: convert construct_dom0 " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 43/44] x86/boot: convert dom0_construct_pv " Daniel P. Smith
2024-08-30 21:47 ` [PATCH v4 44/44] x86/boot: convert dom0_construct_pvh " Daniel P. Smith
2024-09-02 11:12 ` [PATCH v4 00/44] Boot modules for Hyperlaunch Daniel P. Smith
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=D3VUFEINDZZJ.3OHX2CEG4T0JU@cloud.com \
--to=alejandro.vallejo@cloud.com \
--cc=andrew.cooper3@citrix.com \
--cc=christopher.w.clark@gmail.com \
--cc=dpsmith@apertussolutions.com \
--cc=jason.andryuk@amd.com \
--cc=jbeulich@suse.com \
--cc=roger.pau@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.