Commit 923fcb3d authored by Yury Norov's avatar Yury Norov Committed by Sean Christopherson
Browse files

KVM: SEV: don't check have_run_cpus in sev_writeback_caches()



Drop KVM's check on an empty cpumask when flushing caches when memory is
being reclaimed from an SEV VM, as smp_call_function_many_cond() naturally
(and correctly) handles an empty cpumask.  This avoids an extra O(n)
lookup in the common case where at least one pCPU has enterred the guest,
which could be noticeable in some setups, e.g. if a small VM is pinned to
the last few pCPUs in the system.

Fixes: 6f38f8c5 ("KVM: SVM: Flush cache only on CPUs running SEV guest")
Signed-off-by: default avatarYury Norov (NVIDIA) <yury.norov@gmail.com>
[sean: rewrite changelog to capture performance angle]
Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent c87bd4dd
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -718,13 +718,6 @@ static void sev_clflush_pages(struct page *pages[], unsigned long npages)

static void sev_writeback_caches(struct kvm *kvm)
{
	/*
	 * Note, the caller is responsible for ensuring correctness if the mask
	 * can be modified, e.g. if a CPU could be doing VMRUN.
	 */
	if (cpumask_empty(to_kvm_sev_info(kvm)->have_run_cpus))
		return;

	/*
	 * Ensure that all dirty guest tagged cache entries are written back
	 * before releasing the pages back to the system for use.  CLFLUSH will
@@ -739,6 +732,9 @@ static void sev_writeback_caches(struct kvm *kvm)
	 * serializing multiple calls and having responding CPUs (to the IPI)
	 * mark themselves as still running if they are running (or about to
	 * run) a vCPU for the VM.
	 *
	 * Note, the caller is responsible for ensuring correctness if the mask
	 * can be modified, e.g. if a CPU could be doing VMRUN.
	 */
	wbnoinvd_on_cpus_mask(to_kvm_sev_info(kvm)->have_run_cpus);
}