Skip to content

Commit

Permalink
KVM: nSVM: do not mark all VMCB01 fields dirty on nested vmexit
Browse files Browse the repository at this point in the history
Since L1 and L2 now use different VMCBs, most of the fields remain
the same from one L1 run to the next.  svm_set_cr0 and other functions
called by nested_svm_vmexit already take care of clearing the
corresponding clean bits; only the TSC offset is special.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
Paolo Bonzini committed Mar 15, 2021
1 parent 7c3ecfc commit 7ca62d1
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions arch/x86/kvm/svm/nested.c
Original file line number Diff line number Diff line change
Expand Up @@ -700,8 +700,11 @@ int nested_svm_vmexit(struct vcpu_svm *svm)
svm_set_gif(svm, false);
svm->vmcb->control.exit_int_info = 0;

svm->vmcb->control.tsc_offset = svm->vcpu.arch.tsc_offset =
svm->vcpu.arch.l1_tsc_offset;
svm->vcpu.arch.tsc_offset = svm->vcpu.arch.l1_tsc_offset;
if (svm->vmcb->control.tsc_offset != svm->vcpu.arch.tsc_offset) {
svm->vmcb->control.tsc_offset = svm->vcpu.arch.tsc_offset;
vmcb_mark_dirty(svm->vmcb, VMCB_INTERCEPTS);
}

svm->nested.ctl.nested_cr3 = 0;

Expand All @@ -719,8 +722,6 @@ int nested_svm_vmexit(struct vcpu_svm *svm)
svm->vcpu.arch.dr7 = DR7_FIXED_1;
kvm_update_dr7(&svm->vcpu);

vmcb_mark_all_dirty(svm->vmcb);

trace_kvm_nested_vmexit_inject(vmcb12->control.exit_code,
vmcb12->control.exit_info_1,
vmcb12->control.exit_info_2,
Expand Down

0 comments on commit 7ca62d1

Please sign in to comment.