Intel introduces Advanced Matrix Extensions (AMX) [1] feature that will be shipping soon. AMX consists of configurable two-dimensional "TILE" registers and new accelerator instructions that operate on them. TMUL (Tile matrix MULtiply) is the first accelerator instruction set to use the new registers.
Intel AMX is XSAVE supported and XSAVE enabled. It is associated with two state components, XTILECFG and XTILEDATA. The XTILEDATA state component is very large so an XSAVE extension called extended feature disable (XFD) is introduced to support dynamic usage. When XFD is enabled for a state component, any instruction that would access that state component does not execute and instead generates an #NM. So Linux kernel arms XFD to monitor the first usage of AMX. This patchset adds AMX and XFD support for guest: providing related CPUID and MSRs to guest, adding extended XSAVE state context switch and XFD MSRs switch during vmenter/vmexit. This RFC series is based on kernel AMX series v3 [2] in LKML though not latest upstream commit and we'd looking forward for your comments. [1]: Intel Architecture Instruction Set Extension Programming Reference https://software.intel.com/content/dam/develop/external/us/en/documents/architecture-instruction-set-extensions-programming-reference.pdf [2]: AMX kernel series v3 https://lkml.org/lkml/2020/12/23/464 Jing Liu (7): kvm: x86: Expose XFD CPUID to guest kvm: x86: Introduce XFD MSRs as passthrough to guest kvm: x86: Dynamic XSAVE and XFD MSRs context switch kvm: x86: Add new ioctls for XSAVE extension kvm: x86: Revise CPUID.D.1.EBX for alignment rule kvm: x86: Add AMX_TILE, AMX_INT8 and AMX_BF16 support kvm: x86: AMX XCR0 support for guest arch/x86/include/asm/kvm_host.h | 3 + arch/x86/include/uapi/asm/kvm.h | 5 ++ arch/x86/kernel/fpu/init.c | 1 + arch/x86/kernel/fpu/xstate.c | 2 + arch/x86/kvm/cpuid.c | 19 +++- arch/x86/kvm/vmx/vmx.c | 114 ++++++++++++++++++++++++ arch/x86/kvm/vmx/vmx.h | 7 +- arch/x86/kvm/x86.c | 153 ++++++++++++++++++++++++++------ include/uapi/linux/kvm.h | 8 ++ 9 files changed, 279 insertions(+), 33 deletions(-) -- 2.18.4