[PATCH v2 0/7] KVM: SVM: Enable FRED support

Shivansh Dhiman posted 7 patches 2 hours ago
arch/x86/include/asm/svm.h |  35 ++++++++++-
arch/x86/kvm/svm/svm.c     | 122 ++++++++++++++++++++++++++++++++++++-
2 files changed, 152 insertions(+), 5 deletions(-)
[PATCH v2 0/7] KVM: SVM: Enable FRED support
Posted by Shivansh Dhiman 2 hours ago
This series adds SVM support for FRED (Flexible Return and Event Delivery)
virtualization in KVM.

FRED introduces simplified privilege level transitions to replace IDT-based
event delivery and IRET returns, providing lower latency event handling while
ensuring complete supervisor context on delivery and full user context on
return. FRED defines event delivery for both ring 3->0 and ring 0->0
transitions, and introduces ERETU for returning to ring 3 and ERETS for
remaining in ring 0.

AMD hardware extends the VMCB to support FRED virtualization with dedicated
save area fields for FRED MSRs (RSP0-3, SSP1-3, STKLVLS, CONFIG) and control
fields for event injection data (EXITINTDATA, EVENTINJDATA).

The implementation spans seven patches. The important changes are:

1) Extend VMCB structures with FRED fields mentioned above and disable MSR
   interception for FRED-enabled guests to avoid unnecessary VM exits.

2) Support for nested exceptions where we populate event injection data
   when delivering exceptions like page faults and debug traps. 

Changes in v2:
- Modified the zeroing of FRED MSRs from INIT to RESET and updated the commit
  message (Sean Christopherson).
- Used guest_cpu_cap_has() instead of checking VMCB bit in recalc intercepts 
  (Sean Christopherson).
- Variable rename from 'fred_enable' to 'intercept' (Sean Christopherson).
- Moved FRED MSRs save/restore logic from svm_vcpu_enter_exit() to 
  svm_prepare_[host_switch/switch_to_guest]() to reduce some MSR accesses.
- While switching to host, added a safety check on guest_state_loaded.
- Removed the need for a new function parameter 'reinject_on_vmexit' in 
  svm_complete_interrupts() (Paolo Bonzini).
- Replace variable 'nested' with 'is_nested' (Sean Christopherson).
- Formatted variables in reverse fir-tree order (Sean Christopherson).
- Gate all the FRED MSRs through guest_cpu_cap_has() while dumping VMCB
  (Sean Christopherson).
- Confined the enabling of vFRED to svm_vcpu_after_set_cpuid() only
  (Sean Christopherson).

This series is based on top of FRED support for VMX patchset [1],
patches 1-17. The VMX patchset was rebased on top of v6.18.0 kernel.
Previous version v1 of this series can be found here:
https://lore.kernel.org/kvm/20260129063653.3553076-1-shivansh.dhiman@amd.com/

[1] https://lore.kernel.org/kvm/20251026201911.505204-1-xin@zytor.com

Regards,
Shivansh
---
Neeraj Upadhyay (3):
  KVM: SVM: Initialize FRED VMCB fields
  KVM: SVM: Populate FRED event data on event injection
  KVM: SVM: Support FRED nested exception injection

Shivansh Dhiman (4):
  KVM: SVM: Disable interception of FRED MSRs for FRED supported guests
  KVM: SVM: Save restore FRED_RSP0 for FRED supported guests
  KVM: SVM: Dump FRED context in dump_vmcb()
  KVM: SVM: Enable FRED virtualization

 arch/x86/include/asm/svm.h |  35 ++++++++++-
 arch/x86/kvm/svm/svm.c     | 122 ++++++++++++++++++++++++++++++++++++-
 2 files changed, 152 insertions(+), 5 deletions(-)

base-commit: f76e83ecf6bce6d3793f828d92170b69e636f3c9
-- 
2.43.0