This brings together the remaining parts of SMM. For now I've left the
"weird" interaction between SMM and NMI blocking, and I'm using the same
format for the state save area (which is also the one used by QEMU) as
the RFC.
It builds on the previous cleanup patches, which (with the exception
of "KVM: x86: pass kvm_mmu_page to gfn_to_rmap") are now in kvm/queue.
The first six patches are more or less the same as the previous version,
while the address spaces part hopefully touches all affected functions
now.
Patches 1-6 implement the SMM API and world switch; patches 7-12
implements the multiple address spaces; patch 13 ties the loose
ends and advertises the capability.
Tested with SeaBIOS and OVMF, where SMM provides the trusted base
for secure boot.
Thanks,
Paolo
Paolo Bonzini (13):
KVM: x86: introduce num_emulated_msrs
KVM: x86: pass host_initiated to functions that read MSRs
KVM: x86: pass the whole hflags field to emulator and back
KVM: x86: API changes for SMM support
KVM: x86: stubs for SMM support
KVM: x86: save/load state on SMM switch
KVM: add vcpu-specific functions to read/write/translate GFNs
KVM: implement multiple address spaces
KVM: x86: pass kvm_mmu_page to gfn_to_rmap
KVM: x86: use vcpu-specific functions to read/write/translate GFNs
KVM: x86: work on all available address spaces
KVM: x86: add SMM to the MMU role, support SMRAM address space
KVM: x86: advertise KVM_CAP_X86_SMM
Documentation/virtual/kvm/api.txt | 52 ++-
arch/powerpc/include/asm/kvm_book3s_64.h | 2 +-
arch/x86/include/asm/kvm_emulate.h | 9 +-
arch/x86/include/asm/kvm_host.h | 44 ++-
arch/x86/include/asm/vmx.h | 1 +
arch/x86/include/uapi/asm/kvm.h | 11 +-
arch/x86/kvm/cpuid.h | 8 +
arch/x86/kvm/emulate.c | 262 +++++++++++++-
arch/x86/kvm/kvm_cache_regs.h | 5 +
arch/x86/kvm/lapic.c | 4 +-
arch/x86/kvm/mmu.c | 171 +++++-----
arch/x86/kvm/mmu_audit.c | 16 +-
arch/x86/kvm/paging_tmpl.h | 18 +-
arch/x86/kvm/svm.c | 73 ++--
arch/x86/kvm/trace.h | 22 ++
arch/x86/kvm/vmx.c | 106 +++---
arch/x86/kvm/x86.c | 562 ++++++++++++++++++++++++++-----
include/linux/kvm_host.h | 49 ++-
include/uapi/linux/kvm.h | 6 +-
virt/kvm/kvm_main.c | 237 ++++++++++---
20 files changed, 1337 insertions(+), 321 deletions(-)