|
@@ -766,6 +766,28 @@ int setup_profiling_timer(unsigned int multiplier)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_SCHED_SMT
|
|
|
+/* cpumask of CPUs with asymetric SMT dependancy */
|
|
|
+static const int powerpc_smt_flags(void)
|
|
|
+{
|
|
|
+ int flags = SD_SHARE_CPUPOWER | SD_SHARE_PKG_RESOURCES;
|
|
|
+
|
|
|
+ if (cpu_has_feature(CPU_FTR_ASYM_SMT)) {
|
|
|
+ printk_once(KERN_INFO "Enabling Asymmetric SMT scheduling\n");
|
|
|
+ flags |= SD_ASYM_PACKING;
|
|
|
+ }
|
|
|
+ return flags;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
+static struct sched_domain_topology_level powerpc_topology[] = {
|
|
|
+#ifdef CONFIG_SCHED_SMT
|
|
|
+ { cpu_smt_mask, powerpc_smt_flags, SD_INIT_NAME(SMT) },
|
|
|
+#endif
|
|
|
+ { cpu_cpu_mask, SD_INIT_NAME(DIE) },
|
|
|
+ { NULL, },
|
|
|
+};
|
|
|
+
|
|
|
void __init smp_cpus_done(unsigned int max_cpus)
|
|
|
{
|
|
|
cpumask_var_t old_mask;
|
|
@@ -790,15 +812,8 @@ void __init smp_cpus_done(unsigned int max_cpus)
|
|
|
|
|
|
dump_numa_cpu_topology();
|
|
|
|
|
|
-}
|
|
|
+ set_sched_topology(powerpc_topology);
|
|
|
|
|
|
-int arch_sd_sibling_asym_packing(void)
|
|
|
-{
|
|
|
- if (cpu_has_feature(CPU_FTR_ASYM_SMT)) {
|
|
|
- printk_once(KERN_INFO "Enabling Asymmetric SMT scheduling\n");
|
|
|
- return SD_ASYM_PACKING;
|
|
|
- }
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_HOTPLUG_CPU
|