Reviving the first section (so far) of a patch set that Joao posted as RFC last year: https://lore.kernel.org/kvm/20190220201609.28290-1-joao.m.martins@xxxxxxxxxx/ This adds basic hypercall interception support, and adds support for timekeeping and runstate-related shared info regions. I've updated and reworked the original a bit, including (in my v1): • Support for 32-bit guests • 64-bit second support in wallclock • Time counters for runnable/blocked states in runstate support • Self-tests • Fixed Viridian coexistence • No new KVM_CAP_XEN_xxx, just more bits returned by KVM_CAP_XEN_HVM v2: • Remember the RCU read-critical sections on using the shared info pages • Fix 32-bit build of compat structures (which we use there too) • Use RUNSTATE_blocked as initial state not RUNSTATE_runnable • Include documentation, add cosmetic KVM_XEN_HVM_CONFIG_HYPERCALL_MSR David Woodhouse (7): KVM: Fix arguments to kvm_{un,}map_gfn() KVM: x86/xen: Fix coexistence of Xen and Hyper-V hypercalls KVM: x86/xen: latch long_mode when hypercall page is set up KVM: x86/xen: add definitions of compat_shared_info, compat_vcpu_info xen: add wc_sec_hi to struct shared_info KVM: x86: declare Xen HVM shared info capability and add test case KVM: Add documentation for Xen hypercall and shared_info updates Joao Martins (9): KVM: x86/xen: fix Xen hypercall page msr handling KVM: x86/xen: intercept xen hypercalls if enabled KVM: x86/xen: add KVM_XEN_HVM_SET_ATTR/KVM_XEN_HVM_GET_ATTR KVM: x86/xen: register shared_info page KVM: x86/xen: setup pvclock updates KVM: x86/xen: update wallclock region KVM: x86/xen: register vcpu info KVM: x86/xen: register vcpu time info region KVM: x86/xen: register runstate info Documentation/virt/kvm/api.rst | 119 ++++++++++++++++++++++++++++++++++ arch/x86/include/asm/kvm_host.h | 23 +++++++ arch/x86/include/asm/xen/interface.h | 3 + arch/x86/kvm/Makefile | 2 +- arch/x86/kvm/hyperv.c | 40 ++++++++---- arch/x86/kvm/trace.h | 36 +++++++++++ arch/x86/kvm/x86.c | 110 ++++++++++++++++++++------------ arch/x86/kvm/x86.h | 1 + arch/x86/kvm/xen.c | 557 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ arch/x86/kvm/xen.h | 83 ++++++++++++++++++++++++ include/linux/kvm_host.h | 34 +++++----- include/uapi/linux/kvm.h | 48 ++++++++++++++ include/xen/interface/xen.h | 4 +- tools/testing/selftests/kvm/Makefile | 2 + tools/testing/selftests/kvm/lib/kvm_util.c | 1 + tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c | 187 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ tools/testing/selftests/kvm/x86_64/xen_vmcall_test.c | 150 +++++++++++++++++++++++++++++++++++++++++++ virt/kvm/kvm_main.c | 8 +-- 18 files changed, 1335 insertions(+), 73 deletions(-)