x86/sched: Add SD_ASYM_PACKING flags to x86 ITMT CPU
Some Intel cores in a package can be boosted to a higher turbo frequency with ITMT 3.0 technology. The scheduler can use the asymmetric packing feature to move tasks to the more capable cores. If ITMT is enabled, add SD_ASYM_PACKING flag to the thread and core sched domains to enable asymmetric packing. Co-developed-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com> Cc: linux-pm@vger.kernel.org Cc: peterz@infradead.org Cc: jolsa@redhat.com Cc: rjw@rjwysocki.net Cc: linux-acpi@vger.kernel.org Cc: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Cc: bp@suse.de Link: http://lkml.kernel.org/r/9bbb885bedbef4eb50e197305eb16b160cff0831.1479844244.git.tim.c.chen@linux.intel.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>hifive-unleashed-5.1
parent
f9793e3495
commit
d3d37d850d
|
@ -482,22 +482,42 @@ static bool match_die(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_SCHED_SMT) || defined(CONFIG_SCHED_MC)
|
||||||
|
static inline int x86_sched_itmt_flags(void)
|
||||||
|
{
|
||||||
|
return sysctl_sched_itmt_enabled ? SD_ASYM_PACKING : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SCHED_MC
|
||||||
|
static int x86_core_flags(void)
|
||||||
|
{
|
||||||
|
return cpu_core_flags() | x86_sched_itmt_flags();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_SCHED_SMT
|
||||||
|
static int x86_smt_flags(void)
|
||||||
|
{
|
||||||
|
return cpu_smt_flags() | x86_sched_itmt_flags();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct sched_domain_topology_level x86_numa_in_package_topology[] = {
|
static struct sched_domain_topology_level x86_numa_in_package_topology[] = {
|
||||||
#ifdef CONFIG_SCHED_SMT
|
#ifdef CONFIG_SCHED_SMT
|
||||||
{ cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT) },
|
{ cpu_smt_mask, x86_smt_flags, SD_INIT_NAME(SMT) },
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SCHED_MC
|
#ifdef CONFIG_SCHED_MC
|
||||||
{ cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) },
|
{ cpu_coregroup_mask, x86_core_flags, SD_INIT_NAME(MC) },
|
||||||
#endif
|
#endif
|
||||||
{ NULL, },
|
{ NULL, },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct sched_domain_topology_level x86_topology[] = {
|
static struct sched_domain_topology_level x86_topology[] = {
|
||||||
#ifdef CONFIG_SCHED_SMT
|
#ifdef CONFIG_SCHED_SMT
|
||||||
{ cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT) },
|
{ cpu_smt_mask, x86_smt_flags, SD_INIT_NAME(SMT) },
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SCHED_MC
|
#ifdef CONFIG_SCHED_MC
|
||||||
{ cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) },
|
{ cpu_coregroup_mask, x86_core_flags, SD_INIT_NAME(MC) },
|
||||||
#endif
|
#endif
|
||||||
{ cpu_cpu_mask, SD_INIT_NAME(DIE) },
|
{ cpu_cpu_mask, SD_INIT_NAME(DIE) },
|
||||||
{ NULL, },
|
{ NULL, },
|
||||||
|
|
Loading…
Reference in New Issue