[PATCH v5 00/20] KVM: x86: Enable APX for guests

Chang S. Bae posted 20 patches 4 days, 8 hours ago
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
[PATCH v5 00/20] KVM: x86: Enable APX for guests
Posted by Chang S. Bae 4 days, 8 hours ago
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@mail.gmail.com

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,
Chang

Relevant Posting
 * V4: https://lore.kernel.org/20260512011502.53072-1-chang.seok.bae@intel.com
 * KVM-unit-test patch: https://lore.kernel.org/20260420212355.507827-1-chang.seok.bae@intel.com

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
-- 
2.53.0
Re: [PATCH v5 00/20] KVM: x86: Enable APX for guests
Posted by Paolo Bonzini 3 days, 18 hours ago
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@mail.gmail.com
> 
> 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@intel.com
>   * KVM-unit-test patch: https://lore.kernel.org/20260420212355.507827-1-chang.seok.bae@intel.com
> 
> 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
Re: [PATCH v5 00/20] KVM: x86: Enable APX for guests
Posted by Chang S. Bae 2 days, 3 hours ago
On 7/21/2026 12:09 AM, Paolo Bonzini wrote:
> 
> 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.

So far I could take a coupe of points:

   * Patch02: "register restore" => "register save" in changelog
   * Patch18: add `case 0x29:` to cpuid_function_is_indexed()

Otherwise, replied back there.

Thanks,
Chang