x86/cpufeatures: Add the CPU feature bit for FRED
authorH. Peter Anvin (Intel) <hpa@zytor.com>
Tue, 5 Dec 2023 10:49:55 +0000 (02:49 -0800)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 25 Jan 2024 18:10:30 +0000 (19:10 +0100)
Any FRED enabled CPU will always have the following features as its
baseline:

  1) LKGS, load attributes of the GS segment but the base address into
     the IA32_KERNEL_GS_BASE MSR instead of the GS segment’s descriptor
     cache.

  2) WRMSRNS, non-serializing WRMSR for faster MSR writes.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Signed-off-by: Xin Li <xin3.li@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Shan Kang <shan.kang@intel.com>
Link: https://lore.kernel.org/r/20231205105030.8698-7-xin3.li@intel.com
arch/x86/include/asm/cpufeatures.h
arch/x86/kernel/cpu/cpuid-deps.c
tools/arch/x86/include/asm/cpufeatures.h

index bd05c75..ccbf914 100644 (file)
 #define X86_FEATURE_FZRM               (12*32+10) /* "" Fast zero-length REP MOVSB */
 #define X86_FEATURE_FSRS               (12*32+11) /* "" Fast short REP STOSB */
 #define X86_FEATURE_FSRC               (12*32+12) /* "" Fast short REP {CMPSB,SCASB} */
+#define X86_FEATURE_FRED               (12*32+17) /* Flexible Return and Event Delivery */
 #define X86_FEATURE_LKGS               (12*32+18) /* "" Load "kernel" (userspace) GS */
 #define X86_FEATURE_WRMSRNS            (12*32+19) /* "" Non-serializing WRMSR */
 #define X86_FEATURE_AMX_FP16           (12*32+21) /* "" AMX fp16 Support */
index e462c1d..b717420 100644 (file)
@@ -82,6 +82,8 @@ static const struct cpuid_dep cpuid_deps[] = {
        { X86_FEATURE_XFD,                      X86_FEATURE_XGETBV1   },
        { X86_FEATURE_AMX_TILE,                 X86_FEATURE_XFD       },
        { X86_FEATURE_SHSTK,                    X86_FEATURE_XSAVES    },
+       { X86_FEATURE_FRED,                     X86_FEATURE_LKGS      },
+       { X86_FEATURE_FRED,                     X86_FEATURE_WRMSRNS   },
        {}
 };
 
index 8792841..953e6ef 100644 (file)
 #define X86_FEATURE_FZRM               (12*32+10) /* "" Fast zero-length REP MOVSB */
 #define X86_FEATURE_FSRS               (12*32+11) /* "" Fast short REP STOSB */
 #define X86_FEATURE_FSRC               (12*32+12) /* "" Fast short REP {CMPSB,SCASB} */
+#define X86_FEATURE_FRED               (12*32+17) /* Flexible Return and Event Delivery */
 #define X86_FEATURE_LKGS               (12*32+18) /* "" Load "kernel" (userspace) GS */
 #define X86_FEATURE_WRMSRNS            (12*32+19) /* "" Non-serializing WRMSR */
 #define X86_FEATURE_AMX_FP16           (12*32+21) /* "" AMX fp16 Support */