diff options
Diffstat (limited to 'kernel/cpu.c')
| -rw-r--r-- | kernel/cpu.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/kernel/cpu.c b/kernel/cpu.c index 3c7f3b4c453c..91d5c38eb7e5 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -10,6 +10,7 @@  #include <linux/sched/signal.h>  #include <linux/sched/hotplug.h>  #include <linux/sched/task.h> +#include <linux/sched/smt.h>  #include <linux/unistd.h>  #include <linux/cpu.h>  #include <linux/oom.h> @@ -367,6 +368,12 @@ static void lockdep_release_cpus_lock(void)  #endif	/* CONFIG_HOTPLUG_CPU */ +/* + * Architectures that need SMT-specific errata handling during SMT hotplug + * should override this. + */ +void __weak arch_smt_update(void) { } +  #ifdef CONFIG_HOTPLUG_SMT  enum cpuhp_smt_control cpu_smt_control __read_mostly = CPU_SMT_ENABLED;  EXPORT_SYMBOL_GPL(cpu_smt_control); @@ -1011,6 +1018,7 @@ out:  	 * concurrent CPU hotplug via cpu_add_remove_lock.  	 */  	lockup_detector_cleanup(); +	arch_smt_update();  	return ret;  } @@ -1139,6 +1147,7 @@ static int _cpu_up(unsigned int cpu, int tasks_frozen, enum cpuhp_state target)  	ret = cpuhp_up_callbacks(cpu, st, target);  out:  	cpus_write_unlock(); +	arch_smt_update();  	return ret;  } @@ -2055,12 +2064,6 @@ static void cpuhp_online_cpu_device(unsigned int cpu)  	kobject_uevent(&dev->kobj, KOBJ_ONLINE);  } -/* - * Architectures that need SMT-specific errata handling during SMT hotplug - * should override this. - */ -void __weak arch_smt_update(void) { }; -  static int cpuhp_smt_disable(enum cpuhp_smt_control ctrlval)  {  	int cpu, ret = 0;  | 
