v1 of this series was a simple (on the surface) bug fix for an issue where a nested guest would get stuck in an infinite loop due to L0 restarting the guest over and over after an emulation failure because L0 incorrectly thought the emulation failure was due to a page fault in the guest's domain. While not wrong, v1 was essentially using duct tape to prop up the house of cards that is emulation type. v2 demolishes the house and builds a nice little fortress in its place. v2: - Fix known issues of EMULTYPE_NO_REEXECUTE not being passed - Invert re-execute flag and merge it with EMULTYPE_RETRY - Fix the original bug by not retrying nested guests' instructions - Unexport x86_emulate_instruction() to reduce the probability of introducing similar bugs in the future Sean Christopherson (8): KVM: VMX: Do not allow reexecute_instruction() when skipping MMIO instr KVM: x86: SVM: Set EMULTYPE_NO_REEXECUTE for RSM emulation KVM: x86: Invert emulation re-execute behavior to make it opt-in KVM: x86: Merge EMULTYPE_RETRY and EMULTYPE_ALLOW_REEXECUTE KVM: x86: Default to not allowing emulation retry in kvm_mmu_page_fault KVM: x86: Do not re-{try,execute} after failed emulation in L2 KVM: x86: Rename emulate_instruction() to kvm_emulate_instruction() KVM: x86: Unexport x86_emulate_instruction() arch/x86/include/asm/kvm_host.h | 19 ++++++------------- arch/x86/kvm/mmu.c | 21 +++++++++++++++------ arch/x86/kvm/svm.c | 16 ++++++++-------- arch/x86/kvm/vmx.c | 18 +++++++++--------- arch/x86/kvm/x86.c | 28 +++++++++++++++++++++++----- arch/x86/kvm/x86.h | 2 ++ 6 files changed, 63 insertions(+), 41 deletions(-) -- 2.18.0