KVM: x86: Move kvm_trace_exit into atomic vmexit section
PATCH 1/1 KVM: x86: Move kvm_trace_exit into atomic vmexit section
This avoids that events causing the vmexit are recorded before the actual exit reason.
Signed-off-by Jan Kiszka <[email protected]>
--- arch/x86/kvm/svm.c | 4 ++-- arch/x86/kvm/vmx.c | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-)
arch/x86/kvm/svm.c +2 -2
@@ -3335,8 +3335,6 @@ static int handle_exit(struct kvm_vcpu *vcpu)struct kvm_run *kvm_run = vcpu->run;u32 exit_code = svm->vmcb->control.exit_code; -trace_kvm_exit (exit_code, vcpu,KVM_ISA_SVM ); -if (!is_cr_intercept (svm,INTERCEPT_CR0_WRITE )) vcpu->arch.cr0 = svm->vmcb->save.cr0;if (npt_enabled)
@@ -3790,6 +3788,8 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu) vcpu->arch.regs[VCPU_REGS_RSP ] = svm->vmcb->save.rsp; vcpu->arch.regs[VCPU_REGS_RIP ] = svm->vmcb->save.rip; +trace_kvm_exit (svm->vmcb->control.exit_code, vcpu,KVM_ISA_SVM ); +if (unlikely (svm->vmcb->control.exit_code ==SVM_EXIT_NMI ))kvm_before_handle_nmi (&svm->vcpu);
arch/x86/kvm/vmx.c +1 -2
@@ -5739,8 +5739,6 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu)u32 exit_reason = vmx->exit_reason;u32 vectoring_info = vmx->idt_vectoring_info; -trace_kvm_exit (exit_reason, vcpu,KVM_ISA_VMX ); -/* If guest state is invalid, start emulating */ if (vmx->emulation_required && emulate_invalid_guest_state)return handle_invalid_guest_state (vcpu);
@@ -6144,6 +6142,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu) vmx->loaded_vmcs->launched =1 ; vmx->exit_reason =vmcs_read32 (VM_EXIT_REASON ); +trace_kvm_exit (vmx->exit_reason, vcpu,KVM_ISA_VMX );vmx_complete_atomic_exit (vmx);vmx_recover_nmi_blocking (vmx);
Signature · 1 line
1.7.3.4