[PATCH 0/7] x86, KVM: Optimize SEV cache flushing

Sean Christopherson posted 7 patches 11 months, 2 weeks ago
There is a newer version of this series
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(-)
[PATCH 0/7] x86, KVM: Optimize SEV cache flushing
Posted by Sean Christopherson 11 months, 2 weeks ago
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@google.com
[2] https://lore.kernel.org/all/20250128015345.7929-1-szy0127@sjtu.edu.cn

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
Re: [PATCH 0/7] x86, KVM: Optimize SEV cache flushing
Posted by Tom Lendacky 11 months, 1 week ago
On 2/26/25 19:48, Sean Christopherson wrote:
> 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").

We ran this series through our SEV validation tests over the weekend on
Rome, Milan and Genoa systems and didn't observe any issues.

Thanks,
Tom

> 
> 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@google.com
> [2] https://lore.kernel.org/all/20250128015345.7929-1-szy0127@sjtu.edu.cn
> 
> 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