diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2018-08-07 08:19:57 +0200 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2018-08-07 12:25:30 +0200 |
commit | bc2d8d262cba5736332cbc866acb11b1c5748aa9 (patch) | |
tree | 2c521cb57923fb4ce065ea4279332ad406f55064 /kernel/smp.c | |
parent | KVM: VMX: Tell the nested hypervisor to skip L1D flush on vmentry (diff) | |
download | linux-bc2d8d262cba5736332cbc866acb11b1c5748aa9.tar.xz linux-bc2d8d262cba5736332cbc866acb11b1c5748aa9.zip |
cpu/hotplug: Fix SMT supported evaluation
Josh reported that the late SMT evaluation in cpu_smt_state_init() sets
cpu_smt_control to CPU_SMT_NOT_SUPPORTED in case that 'nosmt' was supplied
on the kernel command line as it cannot differentiate between SMT disabled
by BIOS and SMT soft disable via 'nosmt'. That wreckages the state and
makes the sysfs interface unusable.
Rework this so that during bringup of the non boot CPUs the availability of
SMT is determined in cpu_smt_allowed(). If a newly booted CPU is not a
'primary' thread then set the local cpu_smt_available marker and evaluate
this explicitely right after the initial SMP bringup has finished.
SMT evaulation on x86 is a trainwreck as the firmware has all the
information _before_ booting the kernel, but there is no interface to query
it.
Fixes: 73d5e2b47264 ("cpu/hotplug: detect SMT disabled by BIOS")
Reported-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel/smp.c')
-rw-r--r-- | kernel/smp.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/smp.c b/kernel/smp.c index 084c8b3a2681..d86eec5f51c1 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -584,6 +584,8 @@ void __init smp_init(void) num_nodes, (num_nodes > 1 ? "s" : ""), num_cpus, (num_cpus > 1 ? "s" : "")); + /* Final decision about SMT support */ + cpu_smt_check_topology(); /* Any cleanup work */ smp_cpus_done(setup_max_cpus); } |