[PATCH v3 00/11] RFC: nested AVIC

From: Maxim Levitsky
Date: Tue Mar 01 2022 - 13:27:23 EST


This patch series implement everything that is needed to
use AMD's AVIC while a nested guest is running including
ability of the nested guest to use it, and brings feature
parity vs APICv.

I already posted patch 2, and patch 1 is extracted from another
patch I posted today ‘KVM: x86: nSVM: implement nested VMLOAD/VMSAVE’
To make this series not depend on anything.

This is RFC. There still corner cases that need to be fixed in regard to locking,
especially around RCU use, locking is IMHO a bit ugly and inefficient.

I did test this with nested guests (even 3 level of nesting, all with AVIC enabled),
I also did a light test with VFIO passthrough.

Suggestions, comments are welcome.

Best regards,
Maxim Levitsky

Maxim Levitsky (11):
KVM: x86: SVM: move nested_npt_enabled to svm.h
KVM: x86: SVM: allow AVIC to co-exist with a nested guest running
KVM: x86: mmu: allow to enable write tracking externally
x86: KVMGT: use kvm_page_track_write_tracking_enable
KVM: x86: mmu: add gfn_in_memslot helper
KVM: x86: lapic: don't allow to change APIC ID when apic acceleration
is enabled
KVM: x86: SVM: remove avic's broken code that updated APIC ID
KVM: x86: SVM: move avic state to separate struct
KVM: x86: rename .set_apic_access_page_addr to reload_apic_access_page
KVM: nSVM: implement support for nested AVIC
KVM: SVM: allow to avoid not needed updates to is_running

arch/x86/include/asm/kvm-x86-ops.h | 3 +-
arch/x86/include/asm/kvm_host.h | 12 +-
arch/x86/include/asm/kvm_page_track.h | 1 +
arch/x86/include/asm/svm.h | 8 +-
arch/x86/kvm/Kconfig | 3 -
arch/x86/kvm/lapic.c | 28 +-
arch/x86/kvm/mmu.h | 8 +-
arch/x86/kvm/mmu/mmu.c | 16 +-
arch/x86/kvm/mmu/page_track.c | 10 +-
arch/x86/kvm/svm/avic.c | 763 +++++++++++++++++++++++---
arch/x86/kvm/svm/nested.c | 147 ++++-
arch/x86/kvm/svm/svm.c | 61 +-
arch/x86/kvm/svm/svm.h | 158 +++++-
arch/x86/kvm/trace.h | 164 +++++-
arch/x86/kvm/vmx/vmx.c | 8 +-
arch/x86/kvm/x86.c | 31 +-
drivers/gpu/drm/i915/Kconfig | 1 -
drivers/gpu/drm/i915/gvt/kvmgt.c | 5 +
include/linux/kvm_host.h | 10 +-
virt/kvm/kvm_main.c | 3 +-
20 files changed, 1298 insertions(+), 142 deletions(-)

--
2.26.3