Re: [PATCH v5 00/20] KVM: x86: Enable APX for guests
From: Paolo Bonzini
Date: Tue Jul 21 2026 - 03:14:49 EST
On 7/20/26 19:19, Chang S. Bae wrote:
Hi Paolo and Sean,
Here is another iteration for this enabling series.
One topic worth highlighting first is about how to handle userspace
writes to the APX state through the KVM XSAVE API, following the
discussion here:
https://lore.kernel.org/CABgObfaocwfLdUBKJYYYEDH8X3n6iEbMsscbaCe_C=8JNnhDBA@xxxxxxxxxxxxxx
So what this revision ended up with is just to keep those copy paths from
userspace and acknowledge the redundant copy to VCPU cache / guest
fpstate. Patch3 has more context on that.
Besides that, this revision has several fixes and improvements. Sean
gave feedbacks. 0-day spotted on an issue. Also, since the preparatory
patches have been merged into the mainline, finally a review bot could
provide some feedbacks as well. The major changes are:
1. VMX Instruction Information Extension
During the time of V4, 0-day reported out an issue with patch7.
Fixing that also revealed patch4 was missing another function.
With a review bot's feeback, patch7 was also updated to ensure EGPR
indices for handling debug-register accesses. Also looking at
associated macros, patch6 was added for further cleanup.
2. Emulator Register Tracking
The review bot at hand also found a potential shift-out-bounds issue
in the register tracking. Patch10 was fixed.
3. APX Feature Exposure
As per Sean's feedback, the APX XCR0 and userspace exposure were
reworked a bit in patch14-18.
Along with the in-tree KVM x86 selftests, this time I ensured running the
x86 KVM-unit-test comparing between:
* Baseline - Paolo's `queue` branch
* This series on non-APX systems, and
* This series on APX hardware
The full set is also available at:
git://github.com/intel/apx.git apx-kvm_v5
Thanks, will review. Sashiko was a bit drunk when doing its thing, but please give a read to its comments in case it found something important.
Paolo
Thanks,
Chang
Relevant Posting
* V4: https://lore.kernel.org/20260512011502.53072-1-chang.seok.bae@xxxxxxxxx
* KVM-unit-test patch: https://lore.kernel.org/20260420212355.507827-1-chang.seok.bae@xxxxxxxxx
Chang S. Bae (19):
KVM: x86: Extend VCPU registers for EGPRs
KVM: VMX: Save guest EGPRs in VCPU cache
KVM: x86: Support APX state for XSAVE ABI
KVM: VMX: Refactor VMX instruction information access
KVM: VMX: Refactor instruction information decoding
KVM: VMX: Remove unused control-register access defines
KVM: VMX: Refactor register index retrieval from exit qualification
KVM: VMX: Support instruction information extension
KVM: nVMX: Propagate extended instruction information
KVM: x86: Support EGPR accessing and tracking for emulator
KVM: x86: Handle EGPR index and REX2-incompatible opcodes
KVM: x86: Support REX2-prefixed opcode decode
KVM: x86: Reject EVEX-prefixed instructions
KVM: x86: Guard valid XCR0.APX settings
KVM: x86: Add APX in supported XCR0
KVM: x86: Expose APX foundation feature to userspace
KVM: x86: Expose APX sub-features to userspace
KVM: x86: selftests: Add APX state and ABI test
KVM: x86: selftests: Add APX state handling and XCR0 sanity checks
Sean Christopherson (1):
KVM: x86: Move KVM_SUPPORTED_{XCR0,XSS} into kvm_x86_vendor_init()
arch/x86/Kconfig.assembler | 5 +
arch/x86/include/asm/kvm_host.h | 19 ++
arch/x86/include/asm/kvm_vcpu_regs.h | 50 +++++
arch/x86/include/asm/vmx.h | 22 +-
arch/x86/kvm/Kconfig | 4 +
arch/x86/kvm/cpuid.c | 27 ++-
arch/x86/kvm/cpuid.h | 2 +
arch/x86/kvm/emulate.c | 121 +++++++----
arch/x86/kvm/kvm_emulate.h | 21 +-
arch/x86/kvm/reverse_cpuid.h | 6 +
arch/x86/kvm/svm/svm.c | 8 +-
arch/x86/kvm/vmenter.h | 1 +
arch/x86/kvm/vmx/nested.c | 75 +++----
arch/x86/kvm/vmx/nested.h | 2 +-
arch/x86/kvm/vmx/vmcs12.c | 1 +
arch/x86/kvm/vmx/vmcs12.h | 3 +-
arch/x86/kvm/vmx/vmenter.S | 31 ++-
arch/x86/kvm/vmx/vmx.c | 28 ++-
arch/x86/kvm/vmx/vmx.h | 77 ++++++-
arch/x86/kvm/x86.c | 92 +++++++--
tools/testing/selftests/kvm/Makefile.kvm | 1 +
.../selftests/kvm/include/x86/processor.h | 120 +++++++++++
tools/testing/selftests/kvm/x86/apx_test.c | 191 ++++++++++++++++++
tools/testing/selftests/kvm/x86/state_test.c | 3 +
.../selftests/kvm/x86/xcr0_cpuid_test.c | 19 ++
25 files changed, 801 insertions(+), 128 deletions(-)
create mode 100644 tools/testing/selftests/kvm/x86/apx_test.c
base-commit: a204badd8432f93b7e862e7dac6db0fe3d65f370