Re: [kvm-unit-tests PATCH v2 0/6] Initial x86_64 UEFI support

Zixuan Wang
2021-08-21T00:43:13Z

On Fri, Aug 20, 2021 at 5:01 PM Sean Christopherson <seanjc@google.com> wrote:
>
> On Thu, Aug 19, 2021, Varad Gautam wrote:
> > This series brings EFI support to kvm-unit-tests on x86_64.
> >
> > EFI support works by changing the test entrypoint to a stub entry
> > point for the EFI loader to jump to in long mode, where the test binary
> > exits EFI boot services, performs the remaining CPU bootstrapping,
> > and then calls the testcase main().
> >
> > Since the EFI loader only understands PE objects, the first commit
> > introduces a `configure --efi` mode which builds each test as a shared
> > lib. This shared lib is repackaged into a PE via objdump.
> >
> > Commit 2-4 take a trip from the asm entrypoint to C to exit EFI and
> > relocate ELF .dynamic contents.
> >
> > Commit 5 adds post-EFI long mode x86_64 setup and calls the testcase.
> >
> > Commit 6 from Zixuan [1] fixes up some testcases with non-PIC inline
> > asm stubs which allows building these as PIC.
> >
> > Changes in v2:
> > - Add Zixuan's patch to enable more testcases.
> > - Fix TSS setup in cstart64.S for CONFIG_EFI.
> >
> > [1]: https://lore.kernel.org/r/20210818000905.1111226-10-zixuanwang@google.com/
> > git tree: https://github.com/varadgautam/kvm-unit-tests/tree/efi-stub-v2
> >
> > Varad Gautam (5):
> > x86: Build tests as PE objects for the EFI loader
> > x86: Call efi_main from _efi_pe_entry
> > x86: efi_main: Get EFI memory map and exit boot services
> > x86: efi_main: Self-relocate ELF .dynamic addresses
> > cstart64.S: x86_64 bootstrapping after exiting EFI
>
> Zixuan and Varad, are your two series complimentary or do they conflict? E.g.
> can Zixuan's series be applied on top with little-to-no change to Varad's patches,
> or are both series trying to do the same things in different ways?
>
> And if they conflict, are the conflicts largely superficial, or are there
> fundamental differences in how the problems are being solved?
>
> Thanks!

I’m currently building my patches on top of Varad’s. This does not
require too many changes to my patches: I just need to (1) replace the
GNU-EFI function calls with Varad’s approach; (2) copy more
EFI-related definitions from Linux to implement several additional
UEFI service calls, e.g. a reset_system() call to shutdown the guest
VM; and (3) remove some duplicated code from Varad’s patches, e.g. I
remove Varad’s modifications in x86/cstart64.S because I implement
similar setup code in lib/x86/setup.c.

This migration affects only the first part of my patch series, and I’m
currently working on it. Hopefully I can send out the second version
where I take Varad’s patches as the foundation of mine.

Regards,
Zixuan