|
@@ -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;
|