Skip to content

Commit

Permalink
Merge tag 'x86_misc_for_6.13-rc1' of git://git.kernel.org/pub/scm/lin…
Browse files Browse the repository at this point in the history
…ux/kernel/git/tip/tip

Pull misc x86 updates from Dave Hansen:
 "As usual for this branch, these are super random: a compile fix for
  some newish LLVM checks and making sure a Kconfig text reference to
  'RSB' matches the normal definition:

   - Rework some CPU setup code to keep LLVM happy on 32-bit

   - Correct RSB terminology in Kconfig text"

* tag 'x86_misc_for_6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/cpu: Make sure flag_is_changeable_p() is always being used
  x86/bugs: Correct RSB terminology in Kconfig
  • Loading branch information
Linus Torvalds committed Nov 22, 2024
2 parents be9318c + 62e7244 commit 5af5d43
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 33 deletions.
17 changes: 8 additions & 9 deletions arch/x86/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2564,15 +2564,14 @@ config MITIGATION_CALL_DEPTH_TRACKING
default y
help
Compile the kernel with call depth tracking to mitigate the Intel
SKL Return-Speculation-Buffer (RSB) underflow issue. The
mitigation is off by default and needs to be enabled on the
kernel command line via the retbleed=stuff option. For
non-affected systems the overhead of this option is marginal as
the call depth tracking is using run-time generated call thunks
in a compiler generated padding area and call patching. This
increases text size by ~5%. For non affected systems this space
is unused. On affected SKL systems this results in a significant
performance gain over the IBRS mitigation.
SKL Return-Stack-Buffer (RSB) underflow issue. The mitigation is off
by default and needs to be enabled on the kernel command line via the
retbleed=stuff option. For non-affected systems the overhead of this
option is marginal as the call depth tracking is using run-time
generated call thunks in a compiler generated padding area and call
patching. This increases text size by ~5%. For non affected systems
this space is unused. On affected SKL systems this results in a
significant performance gain over the IBRS mitigation.

config CALL_THUNKS_DEBUG
bool "Enable call thunks and call depth tracking debugging"
Expand Down
8 changes: 5 additions & 3 deletions arch/x86/include/asm/cpuid.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
#ifndef _ASM_X86_CPUID_H
#define _ASM_X86_CPUID_H

#include <linux/types.h>

#include <asm/string.h>

struct cpuid_regs {
Expand All @@ -20,11 +22,11 @@ enum cpuid_regs_idx {
};

#ifdef CONFIG_X86_32
extern int have_cpuid_p(void);
bool have_cpuid_p(void);
#else
static inline int have_cpuid_p(void)
static inline bool have_cpuid_p(void)
{
return 1;
return true;
}
#endif
static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,
Expand Down
39 changes: 18 additions & 21 deletions arch/x86/kernel/cpu/common.c
Original file line number Diff line number Diff line change
Expand Up @@ -276,21 +276,13 @@ static int __init x86_noinvpcid_setup(char *s)
}
early_param("noinvpcid", x86_noinvpcid_setup);

#ifdef CONFIG_X86_32
static int cachesize_override = -1;
static int disable_x86_serial_nr = 1;

static int __init cachesize_setup(char *str)
{
get_option(&str, &cachesize_override);
return 1;
}
__setup("cachesize=", cachesize_setup);

/* Standard macro to see if a specific flag is changeable */
static inline int flag_is_changeable_p(u32 flag)
static inline bool flag_is_changeable_p(unsigned long flag)
{
u32 f1, f2;
unsigned long f1, f2;

if (!IS_ENABLED(CONFIG_X86_32))
return true;

/*
* Cyrix and IDT cpus allow disabling of CPUID
Expand All @@ -313,11 +305,22 @@ static inline int flag_is_changeable_p(u32 flag)
: "=&r" (f1), "=&r" (f2)
: "ir" (flag));

return ((f1^f2) & flag) != 0;
return (f1 ^ f2) & flag;
}

#ifdef CONFIG_X86_32
static int cachesize_override = -1;
static int disable_x86_serial_nr = 1;

static int __init cachesize_setup(char *str)
{
get_option(&str, &cachesize_override);
return 1;
}
__setup("cachesize=", cachesize_setup);

/* Probe for the CPUID instruction */
int have_cpuid_p(void)
bool have_cpuid_p(void)
{
return flag_is_changeable_p(X86_EFLAGS_ID);
}
Expand Down Expand Up @@ -349,10 +352,6 @@ static int __init x86_serial_nr_setup(char *s)
}
__setup("serialnumber", x86_serial_nr_setup);
#else
static inline int flag_is_changeable_p(u32 flag)
{
return 1;
}
static inline void squash_the_stupid_serial_number(struct cpuinfo_x86 *c)
{
}
Expand Down Expand Up @@ -1088,7 +1087,6 @@ void get_cpu_address_sizes(struct cpuinfo_x86 *c)

static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c)
{
#ifdef CONFIG_X86_32
int i;

/*
Expand All @@ -1109,7 +1107,6 @@ static void identify_cpu_without_cpuid(struct cpuinfo_x86 *c)
break;
}
}
#endif
}

#define NO_SPECULATION BIT(0)
Expand Down

0 comments on commit 5af5d43

Please sign in to comment.