Message ID | 20230914084946.200043-1-paul@xen.org (mailing list archive) |
---|---|
Headers | show |
Series | KVM: xen: update shared_info and vcpu_info handling | expand |
On Thu, 2023-09-14 at 08:49 +0000, Paul Durrant wrote: > From: Paul Durrant <pdurrant@amazon.com> > > 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. Looks sane to me in general; thanks. The changes to the pfncache ended up being a little bit more than I originally anticipated when I said you just needed to disable the GPA→uHVA lookup via memslots which was about 10 lines... but I think it's still true that it's worth using the pfncache to avoid reproducing the intricate mmu_notifier invalidations.
From: Paul Durrant <pdurrant@amazon.com> 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@zytor.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: David Woodhouse <dwmw2@infradead.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Sean Christopherson <seanjc@google.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: x86@kernel.org