Kernel KVM virtualization development
 help / color / mirror / Atom feed
* [PATCH v1 0/9] KVM: x86: Add support for AMD Extended APIC registers
@ 2026-02-04  7:44 Manali Shukla
  2026-02-04  7:44 ` [PATCH v1 1/9] KVM: x86: Refactor APIC register mask handling to support extended " Manali Shukla
                   ` (9 more replies)
  0 siblings, 10 replies; 15+ messages in thread
From: Manali Shukla @ 2026-02-04  7:44 UTC (permalink / raw)
  To: seanjc, pbonzini
  Cc: mingo, bp, dave.hansen, kvm, x86, santosh.shukla, nikunj.dadhania,
	Naveen.Rao, dapeng1.mi, manali.shukla

Add support for AMD's Extended APIC registers, which reside in a 4KB
APIC page instead of the legacy 1KB APIC register space.  Extended LVT
registers (offsets 0x500-0x530) provide additional interrupt vectors
for features like Instruction Based Sampling (IBS).

Introduce KVM_CAP_LAPIC2 to allow userspace to opt into the full 4KB
APIC register space. The capability uses a bitmask to support different
APIC extensions:

  KVM_LAPIC2_DEFAULT: 4KB APIC register space (common foundation)
  KVM_LAPIC2_AMD_DEFAULT: Extended LVT registers (AMD-specific)

Add KVM_GET/SET_LAPIC2 ioctls that operate on a 4KB APIC register space
accommodate extended registers.  Legacy KVM_GET/SET_LAPIC continue to
work for backward compatibility.

Emulate extended APIC registers (APIC_EFEAT, APIC_ECTRL, APIC_EILVTn)
when the guest has X86_FEATURE_EXTAPIC and userspace enables
KVM_CAP_LAPIC2.  Current AMD processors support four extended LVT
entries, future processors may support up to 255.

Integrate with AVIC to accelerate extended LVT MSR access when
AVIC_EXTLVT is supported.  Reads are accelerated without VM-exits;
writes trigger trap-style VM-exits.

Tested on AMD hardware with Extapic support:
- Extended APIC register read/write emulation and AVIC acceleration
  with IBS driver running on the guest
- VM migration with extended APIC state and without extended APIC state
- Backward compatibility check:
  Fallback to legacy IOCTLs when KVM_CAP_LAPIC2 capability is not enabled

Equivalent Qemu changes can be found at:
https://github.com/AMDESE/qemu/tree/extlvt_v1

Patches are prepared on kvm-x86/next (003f68c79227).

Manali Shukla (7):
  KVM: x86: Refactor APIC register mask handling to support extended
    APIC registers
  x86/apic: Add helper to get maximum number of Extended LVT registers
  KVM: SVM: Set kvm_caps.has_extapic when CPU supports Extended APIC
  KVM: x86: Introduce KVM_CAP_LAPIC2 for 4KB APIC register space support
  KVM: x86: Refactor APIC state get/set to accept variable-sized buffers
  KVM: Add KVM_GET_LAPIC2 and KVM_SET_LAPIC2 for extended APIC
  KVM: SVM: Add AVIC support for extended LVT MSRs

Santosh Shukla (2):
  KVM: x86: Emulate Extended LVT registers for AMD guests
  x86/cpufeatures: Add CPUID feature bit for Extended LVT AVIC
    acceleration

 Documentation/virt/kvm/api.rst     |  75 +++++++++++++
 arch/x86/include/asm/apic.h        |   1 +
 arch/x86/include/asm/apicdef.h     |  18 +++
 arch/x86/include/asm/cpufeatures.h |   1 +
 arch/x86/include/asm/kvm_host.h    |  12 ++
 arch/x86/include/uapi/asm/kvm.h    |   5 +
 arch/x86/kernel/apic/apic.c        |  17 +++
 arch/x86/kvm/cpuid.c               |  10 +-
 arch/x86/kvm/lapic.c               | 169 ++++++++++++++++++++---------
 arch/x86/kvm/lapic.h               |  14 ++-
 arch/x86/kvm/svm/avic.c            |  14 +++
 arch/x86/kvm/svm/svm.c             |   3 +
 arch/x86/kvm/vmx/vmx.c             |  10 +-
 arch/x86/kvm/x86.c                 |  93 +++++++++++++++-
 arch/x86/kvm/x86.h                 |   2 +
 include/uapi/linux/kvm.h           |   7 ++
 16 files changed, 390 insertions(+), 61 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2026-05-06 11:23 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-04  7:44 [PATCH v1 0/9] KVM: x86: Add support for AMD Extended APIC registers Manali Shukla
2026-02-04  7:44 ` [PATCH v1 1/9] KVM: x86: Refactor APIC register mask handling to support extended " Manali Shukla
2026-02-04  7:44 ` [PATCH v1 2/9] x86/apic: Add helper to get maximum number of Extended LVT registers Manali Shukla
2026-05-06 11:22   ` Borislav Petkov
2026-02-04  7:44 ` [PATCH v1 3/9] KVM: SVM: Set kvm_caps.has_extapic when CPU supports Extended APIC Manali Shukla
2026-02-04  7:44 ` [PATCH v1 4/9] KVM: x86: Introduce KVM_CAP_LAPIC2 for 4KB APIC register space support Manali Shukla
2026-02-04  7:44 ` [PATCH v1 5/9] KVM: x86: Refactor APIC state get/set to accept variable-sized buffers Manali Shukla
2026-02-04  7:44 ` [PATCH v1 6/9] KVM: Add KVM_GET_LAPIC2 and KVM_SET_LAPIC2 for extended APIC Manali Shukla
2026-03-16 13:00   ` Nikunj A. Dadhania
2026-03-23 11:15     ` Manali Shukla
2026-02-04  7:44 ` [PATCH v1 7/9] KVM: x86: Emulate Extended LVT registers for AMD guests Manali Shukla
2026-02-04  7:44 ` [PATCH v1 8/9] x86/cpufeatures: Add CPUID feature bit for Extended LVT AVIC acceleration Manali Shukla
2026-02-04  7:44 ` [PATCH v1 9/9] KVM: SVM: Add AVIC support for extended LVT MSRs Manali Shukla
2026-03-10  6:17 ` [PATCH v1 0/9] KVM: x86: Add support for AMD Extended APIC registers Manali Shukla
2026-04-27  4:34   ` Shukla, Manali

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox