mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-05-26 11:40:24 +02:00
KVM: nSVM: Avoid clearing VMCB_LBR in vmcb12
svm_copy_lbrs() always marks VMCB_LBR dirty in the destination VMCB.
However, nested_svm_vmexit() uses it to copy LBRs to vmcb12, and
clearing clean bits in vmcb12 is not architecturally defined.
Move vmcb_mark_dirty() to callers and drop it for vmcb12.
This also facilitates incoming refactoring that does not pass the entire
VMCB to svm_copy_lbrs().
Fixes: d20c796ca3 ("KVM: x86: nSVM: implement nested LBR virtualization")
Cc: stable@vger.kernel.org
Signed-off-by: Yosry Ahmed <yosry@kernel.org>
Link: https://patch.msgid.link/20260303003421.2185681-2-yosry@kernel.org
Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
committed by
Sean Christopherson
parent
d99df02ff4
commit
b53ab5167a
@@ -715,6 +715,7 @@ static void nested_vmcb02_prepare_save(struct vcpu_svm *svm, struct vmcb *vmcb12
|
||||
} else {
|
||||
svm_copy_lbrs(vmcb02, vmcb01);
|
||||
}
|
||||
vmcb_mark_dirty(vmcb02, VMCB_LBR);
|
||||
svm_update_lbrv(&svm->vcpu);
|
||||
}
|
||||
|
||||
@@ -1231,10 +1232,12 @@ int nested_svm_vmexit(struct vcpu_svm *svm)
|
||||
kvm_make_request(KVM_REQ_EVENT, &svm->vcpu);
|
||||
|
||||
if (unlikely(guest_cpu_cap_has(vcpu, X86_FEATURE_LBRV) &&
|
||||
(svm->nested.ctl.virt_ext & LBR_CTL_ENABLE_MASK)))
|
||||
(svm->nested.ctl.virt_ext & LBR_CTL_ENABLE_MASK))) {
|
||||
svm_copy_lbrs(vmcb12, vmcb02);
|
||||
else
|
||||
} else {
|
||||
svm_copy_lbrs(vmcb01, vmcb02);
|
||||
vmcb_mark_dirty(vmcb01, VMCB_LBR);
|
||||
}
|
||||
|
||||
svm_update_lbrv(vcpu);
|
||||
|
||||
|
||||
@@ -848,8 +848,6 @@ void svm_copy_lbrs(struct vmcb *to_vmcb, struct vmcb *from_vmcb)
|
||||
to_vmcb->save.br_to = from_vmcb->save.br_to;
|
||||
to_vmcb->save.last_excp_from = from_vmcb->save.last_excp_from;
|
||||
to_vmcb->save.last_excp_to = from_vmcb->save.last_excp_to;
|
||||
|
||||
vmcb_mark_dirty(to_vmcb, VMCB_LBR);
|
||||
}
|
||||
|
||||
static void __svm_enable_lbrv(struct kvm_vcpu *vcpu)
|
||||
|
||||
Reference in New Issue
Block a user