From: Paul Durrant <pdurrant@xxxxxxxxxx> Currently we treat the shared_info page as guest memory and the VMM informs KVM of its location using a GFN. However it is not guest memory as such; it's an overlay page. So we pointlessly invalidate and re-cache a mapping to the *same page* of memory every time the guest requests that shared_info be mapped into its address space. Let's avoid doing that by modifying the pfncache code to allow activation using a fixed userspace HVA as well as a GPA. Also, if the guest does not hypercall to explicitly set a pointer to a vcpu_info in its own memory, the default vcpu_info embedded in the shared_info page should be used. At the moment the VMM has to set up a pointer to the structure explicitly (again treating it like it's in guest memory, despite being in an overlay page). Let's also avoid the need for that. We already have a cached mapping for the shared_info page so just use that directly by default. Paul Durrant (13): KVM: pfncache: add a map helper function KVM: pfncache: add a mark-dirty helper KVM: pfncache: add a helper to get the gpa KVM: pfncache: base offset check on khva rather than gpa KVM: pfncache: allow a cache to be activated with a fixed (userspace) HVA KVM: xen: allow shared_info to be mapped by fixed HVA KVM: xen: prepare for using 'default' vcpu_info KVM: xen: prevent vcpu_id from changing whilst shared_info is valid KVM: xen: automatically use the vcpu_info embedded in shared_info KVM: selftests / xen: set KVM_XEN_VCPU_ATTR_TYPE_VCPU_ID KVM: selftests / xen: map shared_info using HVA rather than GFN KVM: selftests / xen: don't explicitly set the vcpu_info address KVM: xen: advertize the KVM_XEN_HVM_CONFIG_SHARED_INFO_HVA capability Documentation/virt/kvm/api.rst | 49 ++++-- arch/x86/include/asm/kvm_host.h | 4 + arch/x86/kvm/x86.c | 17 +-- arch/x86/kvm/xen.c | 139 +++++++++++++----- arch/x86/kvm/xen.h | 6 +- include/linux/kvm_host.h | 43 ++++++ include/linux/kvm_types.h | 3 +- include/uapi/linux/kvm.h | 6 +- .../selftests/kvm/x86_64/xen_shinfo_test.c | 75 ++++++++-- virt/kvm/pfncache.c | 129 +++++++++++----- 10 files changed, 360 insertions(+), 111 deletions(-) --- Cc: "H. Peter Anvin" <hpa@xxxxxxxxx> Cc: Borislav Petkov <bp@xxxxxxxxx> Cc: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx> Cc: David Woodhouse <dwmw2@xxxxxxxxxxxxx> Cc: Ingo Molnar <mingo@xxxxxxxxxx> Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> Cc: Sean Christopherson <seanjc@xxxxxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Cc: x86@xxxxxxxxxx -- 2.39.2