This is basically the same as v2 except that it has a small fix to "KVM: x86: enable event window in inject_pending_event", where a second pending interrupt or NMI was not enabling the window-open vmexit (caught by apic.flat). In addition I've renamed inject_pending_event to handle_processor_events. The series now passes kvm-unit-tests and various nested hypervisor tests so now it's *really* ready for review! (Thanks Krish for looking at it so far). I'm quite pleased with the overall look of the code, though the INT_CTL arbitration is a bit ugly. I have plans to implement nested vGIF and vLS, and then I will probably clean it up. Paolo Paolo Bonzini (28): KVM: x86: track manually whether an event has been injected KVM: x86: enable event window in inject_pending_event KVM: nSVM: inject exceptions via svm_check_nested_events KVM: nSVM: remove exit_required KVM: nSVM: correctly inject INIT vmexits KVM: SVM: always update CR3 in VMCB KVM: nVMX: always update CR3 in VMCS KVM: nSVM: move map argument out of enter_svm_guest_mode KVM: nSVM: extract load_nested_vmcb_control KVM: nSVM: extract preparation of VMCB for nested run KVM: nSVM: move MMU setup to nested_prepare_vmcb_control KVM: nSVM: clean up tsc_offset update KVM: nSVM: pass vmcb_control_area to copy_vmcb_control_area KVM: nSVM: remove trailing padding for struct vmcb_control_area KVM: nSVM: save all control fields in svm->nested KVM: nSVM: restore clobbered INT_CTL fields after clearing VINTR KVM: nSVM: synchronize VMCB controls updated by the processor on every vmexit KVM: nSVM: remove unnecessary if KVM: nSVM: extract svm_set_gif KVM: SVM: preserve VGIF across VMCB switch KVM: nSVM: synthesize correct EXITINTINFO on vmexit KVM: nSVM: remove HF_VINTR_MASK KVM: nSVM: remove HF_HIF_MASK KVM: nSVM: split nested_vmcb_check_controls KVM: nSVM: leave guest mode when clearing EFER.SVME KVM: MMU: pass arbitrary CR0/CR4/EFER to kvm_init_shadow_mmu selftests: kvm: add a SVM version of state-test KVM: nSVM: implement KVM_GET_NESTED_STATE and KVM_SET_NESTED_STATE Vitaly Kuznetsov (2): selftests: kvm: introduce cpu_has_svm() check selftests: kvm: fix smm test on SVM arch/x86/include/asm/kvm_host.h | 12 +- arch/x86/include/asm/svm.h | 9 +- arch/x86/include/uapi/asm/kvm.h | 17 +- arch/x86/kvm/cpuid.h | 5 + arch/x86/kvm/irq.c | 1 + arch/x86/kvm/mmu.h | 2 +- arch/x86/kvm/mmu/mmu.c | 14 +- arch/x86/kvm/svm/nested.c | 624 ++++++++++++------ arch/x86/kvm/svm/svm.c | 154 ++--- arch/x86/kvm/svm/svm.h | 33 +- arch/x86/kvm/vmx/nested.c | 5 - arch/x86/kvm/vmx/vmx.c | 25 +- arch/x86/kvm/x86.c | 146 ++-- .../selftests/kvm/include/x86_64/svm_util.h | 10 + tools/testing/selftests/kvm/x86_64/smm_test.c | 19 +- .../testing/selftests/kvm/x86_64/state_test.c | 62 +- 16 files changed, 708 insertions(+), 430 deletions(-) -- 2.26.2