Commit 929d3b2e authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Greg Kroah-Hartman

cpu/hotplug: Set CPU_SMT_NOT_SUPPORTED early

commit fee0aede upstream

The CPU_SMT_NOT_SUPPORTED state is set (if the processor does not support
SMT) when the sysfs SMT control file is initialized.

That was fine so far as this was only required to make the output of the
control file correct and to prevent writes in that case.

With the upcoming l1tf command line parameter, this needs to be set up
before the L1TF mitigation selection and command line parsing happens.
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Tested-by: default avatarJiri Kosina <jkosina@suse.cz>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
Link: https://lkml.kernel.org/r/20180713142323.121795971@linutronix.deSigned-off-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a69c5e07
...@@ -57,6 +57,12 @@ void __init check_bugs(void) ...@@ -57,6 +57,12 @@ void __init check_bugs(void)
{ {
identify_boot_cpu(); identify_boot_cpu();
/*
* identify_boot_cpu() initialized SMT support information, let the
* core code know.
*/
cpu_smt_check_topology();
if (!IS_ENABLED(CONFIG_SMP)) { if (!IS_ENABLED(CONFIG_SMP)) {
pr_info("CPU: "); pr_info("CPU: ");
print_cpu_info(&boot_cpu_data); print_cpu_info(&boot_cpu_data);
......
...@@ -267,9 +267,11 @@ enum cpuhp_smt_control { ...@@ -267,9 +267,11 @@ enum cpuhp_smt_control {
#if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT) #if defined(CONFIG_SMP) && defined(CONFIG_HOTPLUG_SMT)
extern enum cpuhp_smt_control cpu_smt_control; extern enum cpuhp_smt_control cpu_smt_control;
extern void cpu_smt_disable(bool force); extern void cpu_smt_disable(bool force);
extern void cpu_smt_check_topology(void);
#else #else
# define cpu_smt_control (CPU_SMT_ENABLED) # define cpu_smt_control (CPU_SMT_ENABLED)
static inline void cpu_smt_disable(bool force) { } static inline void cpu_smt_disable(bool force) { }
static inline void cpu_smt_check_topology(void) { }
#endif #endif
#endif /* _LINUX_CPU_H_ */ #endif /* _LINUX_CPU_H_ */
...@@ -374,6 +374,16 @@ void __init cpu_smt_disable(bool force) ...@@ -374,6 +374,16 @@ void __init cpu_smt_disable(bool force)
} }
} }
/*
* The decision whether SMT is supported can only be done after the full
* CPU identification. Called from architecture code.
*/
void __init cpu_smt_check_topology(void)
{
if (!topology_smt_supported())
cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
}
static int __init smt_cmdline_disable(char *str) static int __init smt_cmdline_disable(char *str)
{ {
cpu_smt_disable(str && !strcmp(str, "force")); cpu_smt_disable(str && !strcmp(str, "force"));
...@@ -2053,9 +2063,6 @@ static const struct attribute_group cpuhp_smt_attr_group = { ...@@ -2053,9 +2063,6 @@ static const struct attribute_group cpuhp_smt_attr_group = {
static int __init cpu_smt_state_init(void) static int __init cpu_smt_state_init(void)
{ {
if (!topology_smt_supported())
cpu_smt_control = CPU_SMT_NOT_SUPPORTED;
return sysfs_create_group(&cpu_subsys.dev_root->kobj, return sysfs_create_group(&cpu_subsys.dev_root->kobj,
&cpuhp_smt_attr_group); &cpuhp_smt_attr_group);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment