This is the combination of Kevin's WBNOINVD series[1] with Zheyun's targeted flushing series[2]. This is very, very lightly tested (emphasis on "very"). Note, I dropped Reviewed-by tags for patches to which I made non-trivial modifications. [1] https://lore.kernel.org/all/20250201000259.3289143-1-kevinloughlin@xxxxxxxxxx [2] https://lore.kernel.org/all/20250128015345.7929-1-szy0127@xxxxxxxxxxx Relative to those series: - Name the WBNOINVD opcode macro ASM_WBNOINVD to avoid a conflict with KVM's CPUID stuff. - Fix issues with SMP=n. - Define all helpers in x86/lib. - Don't return 0 from the helpers. - Rename the CPU bitmap to avoid a naming collisions with KVM's existing pCPU bitmap for WBINVD, and to not have WBINVD (versus WBNOINVD) in the name. - Fix builds where CPU bitmaps are off-stack. - Massage comments. - Mark a CPU as having done VMRUN in pre_sev_run(), but test to see if the CPU already ran to avoid the locked RMW, i.e. to (hopefully) avoid bouncing the cache line. Kevin Loughlin (2): x86, lib: Add WBNOINVD helper functions KVM: SEV: Prefer WBNOINVD over WBINVD for cache maintenance efficiency Sean Christopherson (2): x86, lib: Drop the unused return value from wbinvd_on_all_cpus() KVM: x86: Use wbinvd_on_cpu() instead of an open-coded equivalent Zheyun Shen (3): KVM: SVM: Remove wbinvd in sev_vm_destroy() x86, lib: Add wbinvd and wbnoinvd helpers to target multiple CPUs KVM: SVM: Flush cache only on CPUs running SEV guest arch/x86/include/asm/smp.h | 23 ++++++-- arch/x86/include/asm/special_insns.h | 19 ++++++- arch/x86/kvm/svm/sev.c | 79 +++++++++++++++++++--------- arch/x86/kvm/svm/svm.h | 1 + arch/x86/kvm/x86.c | 11 +--- arch/x86/lib/cache-smp.c | 26 ++++++++- 6 files changed, 119 insertions(+), 40 deletions(-) base-commit: fed48e2967f402f561d80075a20c5c9e16866e53 -- 2.48.1.711.g2feabab25a-goog