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 (8): 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: automatically use the vcpu_info embedded in shared_info arch/x86/include/asm/kvm_host.h | 4 + arch/x86/kvm/x86.c | 18 ++--- arch/x86/kvm/xen.c | 121 ++++++++++++++++++++++-------- arch/x86/kvm/xen.h | 6 +- include/linux/kvm_host.h | 43 +++++++++++ include/linux/kvm_types.h | 3 +- include/uapi/linux/kvm.h | 7 +- virt/kvm/pfncache.c | 129 +++++++++++++++++++++++--------- 8 files changed, 251 insertions(+), 80 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