linux/arch/x86/kvm/svm
Sean Christopherson 4c08e737f0 KVM: SVM: Take and hold ir_list_lock when updating vCPU's Physical ID entry
Hoist the acquisition of ir_list_lock from avic_update_iommu_vcpu_affinity()
to its two callers, avic_vcpu_load() and avic_vcpu_put(), specifically to
encapsulate the write to the vCPU's entry in the AVIC Physical ID table.
This will allow a future fix to pull information from the Physical ID entry
when updating the IRTE, without potentially consuming stale information,
i.e. without racing with the vCPU being (un)loaded.

Add a comment to call out that ir_list_lock does NOT protect against
multiple writers, specifically that reading the Physical ID entry in
avic_vcpu_put() outside of the lock is safe.

To preserve some semblance of independence from ir_list_lock, keep the
READ_ONCE() in avic_vcpu_load() even though acuiring the spinlock
effectively ensures the load(s) will be generated after acquiring the
lock.

Cc: stable@vger.kernel.org
Tested-by: Alejandro Jimenez <alejandro.j.jimenez@oracle.com>
Reviewed-by: Joao Martins <joao.m.martins@oracle.com>
Link: https://lore.kernel.org/r/20230808233132.2499764-2-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
2023-08-17 11:31:37 -07:00
..
avic.c KVM: SVM: Take and hold ir_list_lock when updating vCPU's Physical ID entry 2023-08-17 11:31:37 -07:00
hyperv.c KVM: nSVM: hyper-v: Enable L2 TLB flush 2022-11-18 12:59:18 -05:00
hyperv.h KVM: nSVM: hyper-v: Enable L2 TLB flush 2022-11-18 12:59:18 -05:00
nested.c KVM: nSVM: Implement support for nested VNMI 2023-03-22 17:43:45 -07:00
pmu.c KVM: x86/svm/pmu: Add AMD PerfMonV2 support 2023-06-06 17:31:44 -07:00
sev.c KVM: SVM: Don't defer NMI unblocking until next exit for SEV-ES guests 2023-07-28 16:13:18 -07:00
svm.c KVM: SVM: Use svm_get_lbr_vmcb() helper to handle writes to DEBUGCTL 2023-08-02 16:41:55 -07:00
svm.h KVM: SEV: move set_dr_intercepts/clr_dr_intercepts from the header 2023-07-28 15:58:53 -07:00
svm_onhyperv.c KVM: x86: Unify pr_fmt to use module name for all KVM modules 2022-12-29 15:47:35 -05:00
svm_onhyperv.h s390: 2023-05-01 12:06:20 -07:00
svm_ops.h KVM: SVM: restore host save area from assembly 2022-11-09 12:25:33 -05:00
vmenter.S Linux 6.1-rc6 2022-11-21 23:01:51 +01:00