KVM: nVMX: nSVM: 'nested_run' should count guest-entry attempts that make it to guest code
Currently, the 'nested_run' statistic counts all guest-entry attempts, including those that fail during vmentry checks on Intel and during consistency checks on AMD. Convert this statistic to count only those guest-entries that make it past these state checks and make it to guest code. This will tell us the number of guest-entries that actually executed or tried to execute guest code. Signed-off-by: Krish Sadhukhan <Krish.Sadhukhan@oracle.com> Message-Id: <20210609180340.104248-2-krish.sadhukhan@oracle.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
ecc513e5bb
commit
b93af02c67
|
@ -596,8 +596,6 @@ int nested_svm_vmrun(struct kvm_vcpu *vcpu)
|
|||
struct kvm_host_map map;
|
||||
u64 vmcb12_gpa;
|
||||
|
||||
++vcpu->stat.nested_run;
|
||||
|
||||
if (is_smm(vcpu)) {
|
||||
kvm_queue_exception(vcpu, UD_VECTOR);
|
||||
return 1;
|
||||
|
|
|
@ -3844,6 +3844,12 @@ static __no_kcsan fastpath_t svm_vcpu_run(struct kvm_vcpu *vcpu)
|
|||
svm->next_rip = 0;
|
||||
if (is_guest_mode(vcpu)) {
|
||||
nested_sync_control_from_vmcb02(svm);
|
||||
|
||||
/* Track VMRUNs that have made past consistency checking */
|
||||
if (svm->nested.nested_run_pending &&
|
||||
svm->vmcb->control.exit_code != SVM_EXIT_ERR)
|
||||
++vcpu->stat.nested_run;
|
||||
|
||||
svm->nested.nested_run_pending = 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -3470,8 +3470,6 @@ static int nested_vmx_run(struct kvm_vcpu *vcpu, bool launch)
|
|||
u32 interrupt_shadow = vmx_get_interrupt_shadow(vcpu);
|
||||
enum nested_evmptrld_status evmptrld_status;
|
||||
|
||||
++vcpu->stat.nested_run;
|
||||
|
||||
if (!nested_vmx_check_permission(vcpu))
|
||||
return 1;
|
||||
|
||||
|
|
|
@ -6809,7 +6809,18 @@ static fastpath_t vmx_vcpu_run(struct kvm_vcpu *vcpu)
|
|||
|
||||
kvm_load_host_xsave_state(vcpu);
|
||||
|
||||
vmx->nested.nested_run_pending = 0;
|
||||
if (is_guest_mode(vcpu)) {
|
||||
/*
|
||||
* Track VMLAUNCH/VMRESUME that have made past guest state
|
||||
* checking.
|
||||
*/
|
||||
if (vmx->nested.nested_run_pending &&
|
||||
!vmx->exit_reason.failed_vmentry)
|
||||
++vcpu->stat.nested_run;
|
||||
|
||||
vmx->nested.nested_run_pending = 0;
|
||||
}
|
||||
|
||||
vmx->idt_vectoring_info = 0;
|
||||
|
||||
if (unlikely(vmx->fail)) {
|
||||
|
|
Loading…
Reference in New Issue