]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: x86: Advertise MOVRS CPUID to userspace
authorZhao Liu <zhao1.liu@intel.com>
Thu, 20 Nov 2025 05:07:17 +0000 (13:07 +0800)
committerSean Christopherson <seanjc@google.com>
Fri, 23 Jan 2026 17:59:38 +0000 (09:59 -0800)
Define the feature flag for MOVRS and advertise support to userspace when
the feature is supported by the host.

MOVRS is a new set of instructions introduced in the Intel platform
Diamond Rapids, to provide load instructions that carry a read-shared
hint.

Functionally, MOVRS family is equivalent to existing load instructions,
but its read-shared hint indicates that the source memory location is
likely to become read-shared by multiple processors, i.e., read in the
future by at least one other processor before it is written (assuming it
is ever written in the future). This hint could optimize the behavior of
the caches, especially shared caches, for this data for future reads by
multiple processors. Additionally, MOVRS family also includes a software
prefetch instruction, PREFETCHRST2, that carries the same read-shared
hint. [*]

MOVRS family is enumerated by CPUID single-bit (0x7.0x1.EAX[bit 31]).
Since it's on a densely-populated CPUID leaf and some other bits on
this leaf have kernel usages, define this new feature in cpufeatures.h,
but hide it in /proc/cpuinfo due to lack of current kernel usage.

Advertise MOVRS bit to userspace directly. It's safe, since there's no
new VMX controls or additional host enabling required for guests to use
this feature.

[*]: Intel Architecture Instruction Set Extensions and Future Features
     (rev.059).

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-2-zhao1.liu@intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/include/asm/cpufeatures.h
arch/x86/kvm/cpuid.c

index c3b53beb130078cabecd4d43b98dac8af921f087..33d0f5764e2456c60e1ad365118dc7787e6c1dcd 100644 (file)
 #define X86_FEATURE_AMX_FP16           (12*32+21) /* AMX fp16 Support */
 #define X86_FEATURE_AVX_IFMA            (12*32+23) /* Support for VPMADD52[H,L]UQ */
 #define X86_FEATURE_LAM                        (12*32+26) /* "lam" Linear Address Masking */
+#define X86_FEATURE_MOVRS              (12*32+31) /* MOVRS instructions */
 
 /* AMD-defined CPU features, CPUID level 0x80000008 (EBX), word 13 */
 #define X86_FEATURE_CLZERO             (13*32+ 0) /* "clzero" CLZERO instruction */
index f37331ad3ad859ae0b160ab0bc327ef757be5c7f..e83b73a4aad826bf4fa36dc1511acf066408ac4a 100644 (file)
@@ -1028,6 +1028,7 @@ void kvm_set_cpu_caps(void)
                F(AMX_FP16),
                F(AVX_IFMA),
                F(LAM),
+               F(MOVRS),
        );
 
        kvm_cpu_cap_init(CPUID_7_1_ECX,