v3 -> v4: 1. Patch# 1 fixes the problem differently from what v3 did. In the new fix, svm_vcpu_run() for L1 first checks if the previous #VMEXIT from L2 was a VMRUN #VMEXIT and if that VMRUN is being single-stepped. If both of these conditions are satisfied, it synthesizes a #DB intercept to account for the pending RFLAGS.TF. This prevents the instruction next to VMRUN from being executed before taking care of the pending RFLAGS.TF. 2. in Patch# 4, in host_rflags_test(), the call to vmmcall() has been moved down. [PATCH 1/4 v4] KVM: nSVM: Trigger synthetic #DB intercept following completion of single-stepped VMRUN instruction [PATCH 2/4 v4] KVM: X86: Add a utility function to read current RIP [PATCH 3/4 v4] nSVM: Add assembly label to VMRUN instruction [PATCH 4/4 v4] nSVM: Test effect of host RFLAGS.TF on VMRUN arch/x86/kvm/svm/svm.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) Krish Sadhukhan (1): KVM: Trigger synthetic #DB intercept following completion of single-stepped VMRUN instruction lib/x86/processor.h | 7 ++++ x86/svm.c | 16 ++++++-- x86/svm_tests.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+), 4 deletions(-) Krish Sadhukhan (3): KVM: X86: Add a utility function to read current RIP KVM: nSVM: Add assembly label to VMRUN instruction nSVM: Test effect of host RFLAGS.TF on VMRUN