[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 2/3] xen/x86: bzImage parse kernel_alignment
On Wed, 6 Mar 2024, Jason Andryuk wrote: > Expand bzimage_parse() to return kernel_alignment from the setup_header. > This will be needed if loading a PVH kernel at a physical offset to > compensate for a reserved E820 region. > > Signed-off-by: Jason Andryuk <jason.andryuk@xxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > --- > xen/arch/x86/bzimage.c | 4 +++- > xen/arch/x86/hvm/dom0_build.c | 4 +++- > xen/arch/x86/include/asm/bzimage.h | 3 +-- > xen/arch/x86/pv/dom0_build.c | 2 +- > 4 files changed, 8 insertions(+), 5 deletions(-) > > diff --git a/xen/arch/x86/bzimage.c b/xen/arch/x86/bzimage.c > index ac4fd428be..0f4cfc49f7 100644 > --- a/xen/arch/x86/bzimage.c > +++ b/xen/arch/x86/bzimage.c > @@ -105,7 +105,7 @@ unsigned long __init bzimage_headroom(void *image_start, > } > > int __init bzimage_parse(void *image_base, void **image_start, > - unsigned long *image_len) > + unsigned long *image_len, unsigned int *align) > { > struct setup_header *hdr = (struct setup_header *)(*image_start); > int err = bzimage_check(hdr, *image_len); > @@ -118,6 +118,8 @@ int __init bzimage_parse(void *image_base, void > **image_start, > { > *image_start += (hdr->setup_sects + 1) * 512 + hdr->payload_offset; > *image_len = hdr->payload_length; > + if ( align ) > + *align = hdr->kernel_alignment; > } > > if ( elf_is_elfbinary(*image_start, *image_len) ) > diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c > index 0ceda4140b..bbae8a5645 100644 > --- a/xen/arch/x86/hvm/dom0_build.c > +++ b/xen/arch/x86/hvm/dom0_build.c > @@ -548,12 +548,14 @@ static int __init pvh_load_kernel(struct domain *d, > const module_t *image, > struct elf_binary elf; > struct elf_dom_parms parms; > paddr_t last_addr; > + unsigned int align = 0; > struct hvm_start_info start_info = { 0 }; > struct hvm_modlist_entry mod = { 0 }; > struct vcpu *v = d->vcpu[0]; > int rc; > > - if ( (rc = bzimage_parse(image_base, &image_start, &image_len)) != 0 ) > + rc = bzimage_parse(image_base, &image_start, &image_len, &align); > + if ( rc != 0 ) > { > printk("Error trying to detect bz compressed kernel\n"); > return rc; > diff --git a/xen/arch/x86/include/asm/bzimage.h > b/xen/arch/x86/include/asm/bzimage.h > index 7ed69d3910..de4e9a446f 100644 > --- a/xen/arch/x86/include/asm/bzimage.h > +++ b/xen/arch/x86/include/asm/bzimage.h > @@ -4,8 +4,7 @@ > #include <xen/init.h> > > unsigned long bzimage_headroom(void *image_start, unsigned long > image_length); > - > int bzimage_parse(void *image_base, void **image_start, > - unsigned long *image_len); > + unsigned long *image_len, unsigned int *align); > > #endif /* __X86_BZIMAGE_H__ */ > diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c > index d8043fa58a..e9fa8a9a82 100644 > --- a/xen/arch/x86/pv/dom0_build.c > +++ b/xen/arch/x86/pv/dom0_build.c > @@ -416,7 +416,7 @@ int __init dom0_construct_pv(struct domain *d, > > d->max_pages = ~0U; > > - if ( (rc = bzimage_parse(image_base, &image_start, &image_len)) != 0 ) > + if ( (rc = bzimage_parse(image_base, &image_start, &image_len, NULL)) != > 0 ) > return rc; > > if ( (rc = elf_init(&elf, image_start, image_len)) != 0 ) > -- > 2.44.0 > >
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |