[PATCH v3 0/6] target/i386: add support for FRED

Xin Li
2023-11-09T07:50:22Z

This patch set adds support for the Intel flexible return and event delivery
(FRED) architecture to allow Qemu to run KVM guests with FRED enabled.

The FRED architecture defines simple new transitions that change privilege
level (ring transitions). The FRED architecture was designed with the
following goals:
1) Improve overall performance and response time by replacing event delivery
through the interrupt descriptor table (IDT event delivery) and event
return by the IRET instruction with lower latency transitions.
2) Improve software robustness by ensuring that event delivery establishes
the full supervisor context and that event return establishes the full
user context.

Intel VMX architecture is extended to run FRED guests, and the changes
are majorly:
1) New VMCS fields for FRED context management, which includes two new
event data VMCS fields, eight new guest FRED context VMCS fields and
eight new host FRED context VMCS fields.
2) VMX nested-Exception support for proper virtualization of stack
levels introduced with FRED architecture.

Search for the latest FRED spec in most search engines with this search pattern:

site:intel.com FRED (flexible return and event delivery) specification

The counterpart KVM patch set is at:
https://lore.kernel.org/kvm/20231108183003.5981-1-xin3.li@intel.com/T/#m77876e22876f41c5ec677c0834a46113a4987d31

---
Changelog
v3:
- Add WRMSRNS as a baseline feature for FRED.
- Add the secondary VM exit controls MSR.
- Add FRED VMX controls to VM exit/entry feature words and
scripts/kvm/vmxcap.
- Do not set/get FRED SSP0 MSR, i.e. PL0_SSP MSR, with FRED, leave it to
KVM CET.

v2:
- Add VMX nested-exception support to scripts/kvm/vmxcap (Paolo Bonzini).
- Move FRED MSRs from basic x86_cpu part to .subsections part (Weijiang Yang).

Xin Li (6):
target/i386: add support for FRED in CPUID enumeration
target/i386: mark CR4.FRED not reserved
target/i386: add the secondary VM exit controls MSR
target/i386: add support for VMX FRED controls
target/i386: enumerate VMX nested-exception support
target/i386: Add get/set/migrate support for FRED MSRs

scripts/kvm/vmxcap | 13 ++++++++++++
target/i386/cpu.c | 15 ++++++++++---
target/i386/cpu.h | 42 ++++++++++++++++++++++++++++++++++++-
target/i386/kvm/kvm.c | 49 +++++++++++++++++++++++++++++++++++++++++++
target/i386/machine.c | 28 +++++++++++++++++++++++++
5 files changed, 143 insertions(+), 4 deletions(-)

base-commit: a3c3aaa846ad61b801e7196482dcf4afb8ba34e4
--
2.42.0