]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
KVM: x86: Advertise AVX10.2 CPUID to userspace
authorZhao Liu <zhao1.liu@intel.com>
Thu, 20 Nov 2025 05:07:19 +0000 (13:07 +0800)
committerSean Christopherson <seanjc@google.com>
Fri, 23 Jan 2026 18:00:01 +0000 (10:00 -0800)
Bump up the maximum supported AVX10 version and enumerate AVX10.2 to
userspace when it's supported by the host.

Intel AVX10 Version 2 (Intel AVX10.2) includes a suite of new
instructions delivering new AI features and performance, accelerated
media processing, expanded Web Assembly, and Cryptography support, along
with enhancements to existing legacy instructions for completeness and
efficiency, and it is enumerated as version 2 in CPUID 0x24.0x0.EBX[bits
0-7] [1].

AVX10.2 has no current kernel usage and requires no additional host
kernel enabling work (based on AVX10.1 support) and provides no new
VMX controls [2]. Moreover, since AVX10.2 is the superset of AVX10.1,
there's no need to worry about AVX10.1 and AVX10.2 compatibility issues
in KVM.

Therefore, it's safe to advertise AVX10.2 version to userspace directly
if host supports AVX10.2.

[1]: Intel Advanced Vector Extensions 10.2 Architecture Specification
     (rev 5.0).
[2]: Note: Since AVX10.2 spec (rev 4.0), it has been declared "AVX10/512
     will be used in all Intel products, supporting vector lengths of
     128, 256, and 512 in all product lines", and the VMX support (in
     earlier revisions) for AVX10/256 guest on AVX10/512 host has been
     dropped.

Tested-by: Xudong Hao <xudong.hao@intel.com>
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Link: https://patch.msgid.link/20251120050720.931449-4-zhao1.liu@intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/cpuid.c

index 750c353e0dbf17186ce2139b10341735774bca16..ecb4ca9af78899608ca8c94dac45e23263345e48 100644 (file)
@@ -1666,7 +1666,7 @@ static inline int __do_cpuid_func(struct kvm_cpuid_array *array, u32 function)
                 * is guaranteed to be >=1 if AVX10 is supported.  Note #2, the
                 * version needs to be captured before overriding EBX features!
                 */
-               avx10_version = min_t(u8, entry->ebx & 0xff, 1);
+               avx10_version = min_t(u8, entry->ebx & 0xff, 2);
                cpuid_entry_override(entry, CPUID_24_0_EBX);
                entry->ebx |= avx10_version;