[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [XTF PATCH v2 2/2] x86: Allow exiting QEMU in TCG/QEMU
On Fri Oct 3, 2025 at 10:06 AM CEST, Roger Pau Monné wrote: > On Thu, Oct 02, 2025 at 07:48:28PM +0200, Alejandro Vallejo wrote: >> On Thu Oct 2, 2025 at 5:37 PM CEST, Roger Pau Monné wrote: >> > On Thu, Oct 02, 2025 at 04:48:38PM +0200, Alejandro Vallejo wrote: >> >> On Thu Oct 2, 2025 at 4:22 PM CEST, Roger Pau Monné wrote: >> >> > On Thu, Oct 02, 2025 at 03:55:34PM +0200, Alejandro Vallejo wrote: >> >> >> If QEMU has a debug isa-debug-exit device, we can simply write to it >> >> >> to exit rather than spinning after a failed hypercall. >> >> >> >> >> >> While at it, reorder an out-of-order include. >> >> >> >> >> >> Signed-off-by: Alejandro Vallejo <alejandro.garciavallejo@xxxxxxx> >> >> >> --- >> >> >> arch/x86/hvm/traps.c | 16 +++++++++++++++- >> >> >> arch/x86/pv/traps.c | 5 +++++ >> >> >> common/lib.c | 2 +- >> >> >> common/report.c | 8 +++++--- >> >> >> include/xtf/framework.h | 3 +++ >> >> >> 5 files changed, 29 insertions(+), 5 deletions(-) >> >> >> >> >> >> diff --git a/arch/x86/hvm/traps.c b/arch/x86/hvm/traps.c >> >> >> index ad7b8cb..b8c4d0c 100644 >> >> >> --- a/arch/x86/hvm/traps.c >> >> >> +++ b/arch/x86/hvm/traps.c >> >> >> @@ -1,5 +1,6 @@ >> >> >> -#include <xtf/traps.h> >> >> >> +#include <xtf/hypercall.h> >> >> >> #include <xtf/lib.h> >> >> >> +#include <xtf/traps.h> >> >> >> >> >> >> #include <arch/idt.h> >> >> >> #include <arch/lib.h> >> >> >> @@ -139,6 +140,19 @@ void arch_init_traps(void) >> >> >> virt_to_gfn(__end_user_bss)); >> >> >> } >> >> >> >> >> >> +void arch_shutdown(unsigned int reason) >> >> >> +{ >> >> >> + hypercall_shutdown(reason); >> >> > >> >> > This relies on the hypercall page being poised with `ret`, which is >> >> > IMO fragile. I would rather have it poisoned with `int3` and prevent >> >> > such stray accesses in the first place. >> >> >> >> I dont' mind caching Xen presence somewhere, but that involves some code >> >> motion >> >> from setup.c, which I wanted to avoid. >> > >> > I think it's very likely that at some point we will need to cache this? >> > >> > enum { >> > NATIVE, >> > XEN, >> > QEMU, >> > ... >> > } hypervisor_env; >> > >> > Or similar. >> >> Maybe NATIVE, XEN_VIRT and NON_XEN_VIRT? I see no reason to distinguish >> between >> TCG, KVM and any other accelerator; and QEMU is imprecise because we use for >> HVM. You could imagine chainloading XTF from GRUB to test the HVM env. > > Maybe not for XTF. IIRC KVM also offers some PV interfaces (like the > PV timer) that native QEMU doesn't. Sure, but we don't want to test KVM PV. It _could_ be used for it, but KVM has its own unit testing facilities already. https://gitlab.com/kvm-unit-tests/kvm-unit-tests.git > > Rather than having an exclusive hypervisor mode, we could signal what > interfaces are available. For example Xen (and I bet KVM too) can > expose native interfaces plus viridian extensions, in which case we > might want to detect both if present. That would require using a > separate boolean for each extra interface. IOW: > > bool xen_hypercall; > bool viridian_foo; > bool qemu_debug; > ... > > (Possibly not the best naming) I'm of the opinion of not adding things not strictly required. > > BTW, is it possible for a guest to discover whether the > "isa-debug-exit" functionality is present? Besides ensuring a read gets zero, no. From the QEMU sources: static uint64_t debug_exit_read(void *opaque, hwaddr addr, unsigned size) { return 0; } static void debug_exit_write(void *opaque, hwaddr addr, uint64_t val, unsigned width) { qemu_system_shutdown_request_with_code(SHUTDOWN_CAUSE_GUEST_SHUTDOWN, (val << 1) | 1); } I didn't see any signaling anywhere in CPUID or elsewhere. Though I admit it was years ago that I last checked, this isn't the sort of feature that changes very often. > > Sorry, I'm possibly derailing this patch series. Can only mean you find it interesting. That's always good :) But to concretise actions, I think I'll keep it simple for the time being and add a single `cpu_has_xen` global boolean; then place the shutdown hypercall before the QEMU exit device write, gated by cpu_has_xen. That prevents making a hypercall when the "wrong" hypervisor is present (or none). Cheers, Alejandro
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |