qemu/target/i386/hvf
Liran Alon fd13f23b8c target/i386: kvm: Add support for KVM_CAP_EXCEPTION_PAYLOAD
Kernel commit c4f55198c7c2 ("kvm: x86: Introduce KVM_CAP_EXCEPTION_PAYLOAD")
introduced a new KVM capability which allows userspace to correctly
distinguish between pending and injected exceptions.

This distinguish is important in case of nested virtualization scenarios
because a L2 pending exception can still be intercepted by the L1 hypervisor
while a L2 injected exception cannot.

Furthermore, when an exception is attempted to be injected by QEMU,
QEMU should specify the exception payload (CR2 in case of #PF or
DR6 in case of #DB) instead of having the payload already delivered in
the respective vCPU register. Because in case exception is injected to
L2 guest and is intercepted by L1 hypervisor, then payload needs to be
reported to L1 intercept (VMExit handler) while still preserving
respective vCPU register unchanged.

This commit adds support for QEMU to properly utilise this new KVM
capability (KVM_CAP_EXCEPTION_PAYLOAD).

Reviewed-by: Nikita Leshenko <nikita.leshchenko@oracle.com>
Signed-off-by: Liran Alon <liran.alon@oracle.com>
Message-Id: <20190619162140.133674-10-liran.alon@oracle.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2019-06-21 13:25:27 +02:00
..
hvf-i386.h Clean up ill-advised or unusual header guards 2019-05-13 08:58:55 +02:00
hvf.c target/i386: kvm: Add support for KVM_CAP_EXCEPTION_PAYLOAD 2019-06-21 13:25:27 +02:00
Makefile.objs i386: hvf: move all hvf files in the same directory 2017-12-22 15:02:05 +01:00
panic.h i386: hvf: cleanup x86_gen.h 2017-12-22 15:02:07 +01:00
README.md i386: Compile CPUX86State xsave_buf only when support KVM or HVF 2018-10-02 19:09:12 +02:00
vmcs.h Clean up ill-advised or unusual header guards 2019-05-13 08:58:55 +02:00
vmx.h Clean up includes 2018-02-09 05:05:11 +01:00
x86_cpuid.c target-i386: hvf: remove MPX support 2019-02-05 16:50:17 +01:00
x86_decode.c cpu: Replace ENV_GET_CPU with env_cpu 2019-06-10 07:03:34 -07:00
x86_decode.h Normalize header guard symbol definition. 2019-05-13 08:58:55 +02:00
x86_descr.c i386: hvf: unify register enums between HVF and the rest 2017-12-22 15:02:07 +01:00
x86_descr.h Normalize header guard symbol definition. 2019-05-13 08:58:55 +02:00
x86_emu.c cpu: Replace ENV_GET_CPU with env_cpu 2019-06-10 07:03:34 -07:00
x86_emu.h Clean up ill-advised or unusual header guards 2019-05-13 08:58:55 +02:00
x86_flags.c i386: hvf: cleanup x86_gen.h 2017-12-22 15:02:07 +01:00
x86_flags.h Clean up ill-advised or unusual header guards 2019-05-13 08:58:55 +02:00
x86_mmu.c Drop unneeded system header includes 2018-02-10 10:07:40 +03:00
x86_mmu.h Clean up ill-advised or unusual header guards 2019-05-13 08:58:55 +02:00
x86_task.c target: Do not include "exec/exec-all.h" if it is not necessary 2018-06-01 14:15:10 +02:00
x86_task.h Clean up header guards that don't match their file name 2019-05-13 08:58:55 +02:00
x86.c i386: hvf: remove addr_t 2017-12-22 15:02:07 +01:00
x86.h Normalize header guard symbol definition. 2019-05-13 08:58:55 +02:00
x86hvf.c target/i386: kvm: Add support for KVM_CAP_EXCEPTION_PAYLOAD 2019-06-21 13:25:27 +02:00
x86hvf.h i386: hvf: move all hvf files in the same directory 2017-12-22 15:02:05 +01:00

OS X Hypervisor.framework support in QEMU

These sources (and ../hvf-all.c) are adapted from Veertu Inc's vdhh (Veertu Desktop Hosted Hypervisor) (last known location: https://github.com/veertuinc/vdhh) with some minor changes, the most significant of which were:

  1. Adapt to our current QEMU's CPUState structure and address_space_rw API; many struct members have been moved around (emulated x86 state, xsave_buf) due to historical differences + QEMU needing to handle more emulation targets.
  2. Removal of apic_page and hyperv-related functionality.
  3. More relaxed use of qemu_mutex_lock_iothread.