[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 02/10] x86 setup: per-arch bootmodule structure, headroom field
On 01.07.2023 09:18, Christopher Clark wrote: > @@ -105,11 +102,14 @@ unsigned long __init bzimage_headroom(void *image_start, > } > > int __init bzimage_parse(void *image_base, void **image_start, > + unsigned int headroom, > unsigned long *image_len) > { > struct setup_header *hdr = (struct setup_header *)(*image_start); > int err = bzimage_check(hdr, *image_len); > - unsigned long output_len; > + unsigned long output_len, orig_image_len; > + > + orig_image_len = *image_len - headroom; > > if ( err < 0 ) > return err; > @@ -125,7 +125,7 @@ int __init bzimage_parse(void *image_base, void > **image_start, > > BUG_ON(!(image_base < *image_start)); > > - output_len = output_length(*image_start, orig_image_len); > + output_len = output_length(*image_start, *image_len); If this is correct, then I would imply that so far we passed too large a value (a too small one pretty certainly wouldn't have worked). But I wonder whether you aren't passing too large a value now. In any event ideally such a functional change would be split out; otherwise it very clearly needs mentioning (justifying) in the description. > --- /dev/null > +++ b/xen/arch/x86/include/asm/bootinfo.h > @@ -0,0 +1,18 @@ > +#ifndef __ARCH_X86_BOOTINFO_H__ > +#define __ARCH_X86_BOOTINFO_H__ > + > +struct arch_bootmodule { > + unsigned headroom; > +}; But this isn't a per-module property, is it? > @@ -961,7 +967,8 @@ static struct domain *__init create_dom0(const module_t > *image, > write_cr4(read_cr4() & ~X86_CR4_SMAP); > } > > - if ( construct_dom0(d, image, headroom, initrd, cmdline) != 0 ) > + if ( construct_dom0(d, image, boot_info->mods[0].arch->headroom, initrd, > + cmdline) != 0 ) > panic("Could not construct domain 0\n"); This looks to render the function's "headroom" parameter unused. > --- a/xen/include/xen/bootinfo.h > +++ b/xen/include/xen/bootinfo.h > @@ -3,8 +3,19 @@ > > #include <xen/types.h> > > +#ifdef CONFIG_X86 > +#include <asm/bootinfo.h> > +#else > + struct arch_bootmodule { }; > +#endif This wants making use of include/asm-generic/ now, provided the non-x86 header are going to remain empty. Otherwise arch headers will want introducing right away; there shouldn't be a CONFIG_X86 use here. > +struct boot_module { > + struct arch_bootmodule *arch; > +}; Why a pointer? By the names it's a 1:1 relationship, so ... > struct boot_info { > unsigned int nr_mods; > + struct boot_module *mods; ... only the pointer here is what takes care of there being multiple instances (likely as before represented as an array). Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |