mbox series

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

Message ID 20250227014858.3244505-1-seanjc@google.com (mailing list archive)
Headers show
Series x86, KVM: Optimize SEV cache flushing | expand

Message

Sean Christopherson Feb. 27, 2025, 1:48 a.m. UTC
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

Comments

Tom Lendacky March 3, 2025, 4:46 p.m. UTC | #1
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