Testing cpumask for a CPU to be cleared just before setting the exact same CPU is useless because the end result is always the same: CPU is set. While there, switch CPU setter to a non-atomic version. Atomicity is useless here because sev_writeback_caches() ends up with a plain for_each_cpu() loop in smp_call_function_many_cond(), which is not atomic by nature. Fixes: 6f38f8c57464 ("KVM: SVM: Flush cache only on CPUs running SEV guest") Signed-off-by: Yury Norov --- arch/x86/kvm/svm/sev.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index 49d7557de8bc..8170674d39c1 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -3498,8 +3498,7 @@ int pre_sev_run(struct vcpu_svm *svm, int cpu) * have encrypted, dirty data in the cache, and flush caches only for * CPUs that have entered the guest. */ - if (!cpumask_test_cpu(cpu, to_kvm_sev_info(kvm)->have_run_cpus)) - cpumask_set_cpu(cpu, to_kvm_sev_info(kvm)->have_run_cpus); + __cpumask_set_cpu(cpu, to_kvm_sev_info(kvm)->have_run_cpus); /* Assign the asid allocated with this SEV guest */ svm->asid = asid; -- 2.43.0