Merge tag 'x86_cpu_for_v6.3_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 Feb 2023 22:51:40 +0000 (14:51 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 Feb 2023 22:51:40 +0000 (14:51 -0800)
Pull x86 cpuid updates from Borislav Petkov:

 - Cache the AMD debug registers in per-CPU variables to avoid MSR
   writes where possible, when supporting a debug registers swap feature
   for SEV-ES guests

 - Add support for AMD's version of eIBRS called Automatic IBRS which is
   a set-and-forget control of indirect branch restriction speculation
   resources on privilege change

 - Add support for a new x86 instruction - LKGS - Load kernel GS which
   is part of the FRED infrastructure

 - Reset SPEC_CTRL upon init to accomodate use cases like kexec which
   rediscover

 - Other smaller fixes and cleanups

* tag 'x86_cpu_for_v6.3_rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/amd: Cache debug register values in percpu variables
  KVM: x86: Propagate the AMD Automatic IBRS feature to the guest
  x86/cpu: Support AMD Automatic IBRS
  x86/cpu, kvm: Add the SMM_CTL MSR not present feature
  x86/cpu, kvm: Add the Null Selector Clears Base feature
  x86/cpu, kvm: Move X86_FEATURE_LFENCE_RDTSC to its native leaf
  x86/cpu, kvm: Add the NO_NESTED_DATA_BP feature
  KVM: x86: Move open-coded CPUID leaf 0x80000021 EAX bit propagation code
  x86/cpu, kvm: Add support for CPUID_80000021_EAX
  x86/gsseg: Add the new <asm/gsseg.h> header to <asm/asm-prototypes.h>
  x86/gsseg: Use the LKGS instruction if available for load_gs_index()
  x86/gsseg: Move load_gs_index() to its own new header file
  x86/gsseg: Make asm_load_gs_index() take an u16
  x86/opcode: Add the LKGS instruction to x86-opcode-map
  x86/cpufeature: Add the CPU feature bit for LKGS
  x86/bugs: Reset speculation control settings on init
  x86/cpu: Remove redundant extern x86_read_arch_cap_msr()

12 files changed:
1  2 
Documentation/admin-guide/kernel-parameters.txt
arch/x86/include/asm/cpufeatures.h
arch/x86/include/asm/debugreg.h
arch/x86/include/asm/msr-index.h
arch/x86/include/asm/special_insns.h
arch/x86/kernel/cpu/bugs.c
arch/x86/kernel/cpu/common.c
arch/x86/kernel/paravirt.c
arch/x86/kernel/signal_32.c
arch/x86/kvm/cpuid.c
arch/x86/kvm/x86.c
arch/x86/xen/enlighten_pv.c

  #define X86_FEATURE_AVX_VNNI          (12*32+ 4) /* AVX VNNI instructions */
  #define X86_FEATURE_AVX512_BF16               (12*32+ 5) /* AVX512 BFLOAT16 instructions */
  #define X86_FEATURE_CMPCCXADD           (12*32+ 7) /* "" CMPccXADD instructions */
 +#define X86_FEATURE_ARCH_PERFMON_EXT  (12*32+ 8) /* "" Intel Architectural PerfMon Extension */
+ #define X86_FEATURE_LKGS              (12*32+18) /* "" Load "kernel" (userspace) GS */
  #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 */
  
Simple merge
Simple merge
@@@ -184,19 -173,9 +173,9 @@@ static __always_inline void wbinvd(void
        native_wbinvd();
  }
  
- static inline void load_gs_index(unsigned int selector)
- {
- #ifdef CONFIG_X86_64
-       native_load_gs_index(selector);
- #else
-       loadsegment(gs, selector);
- #endif
- }
  #endif /* CONFIG_PARAVIRT_XXL */
  
 -static inline void clflush(volatile void *__p)
 +static __always_inline void clflush(volatile void *__p)
  {
        asm volatile("clflush %0" : "+m" (*(volatile char __force *)__p));
  }
Simple merge
@@@ -1403,14 -1412,6 +1414,9 @@@ static void __init cpu_set_bug_bits(str
                        setup_force_cpu_bug(X86_BUG_RETBLEED);
        }
  
-       if (cpu_has(c, X86_FEATURE_IBRS_ENHANCED) &&
-           !cpu_matches(cpu_vuln_whitelist, NO_EIBRS_PBRSB) &&
-           !(ia32_cap & ARCH_CAP_PBRSB_NO))
-               setup_force_cpu_bug(X86_BUG_EIBRS_PBRSB);
 +      if (cpu_matches(cpu_vuln_blacklist, SMT_RSB))
 +              setup_force_cpu_bug(X86_BUG_SMT_RSB);
 +
        if (cpu_matches(cpu_vuln_whitelist, NO_MELTDOWN))
                return;
  
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge