aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Chen <tim.c.chen@linux.intel.com>2016-11-22 15:23:57 -0500
committerThomas Gleixner <tglx@linutronix.de>2016-11-24 14:44:20 -0500
commitd3d37d850d1d77bd66bceb8326e6353d3314b270 (patch)
tree296db59a8a7f9252156cd898ffdf65033fa128a5
parentf9793e34952cda133caaa35738a4b46053331c96 (diff)
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>
-rw-r--r--arch/x86/kernel/smpboot.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index ac61ee71d50e..4f130624c3f4 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -482,22 +482,42 @@ static bool match_die(struct cpuinfo_x86 *c, struct cpuinfo_x86 *o)
482 return false; 482 return false;
483} 483}
484 484
485#if defined(CONFIG_SCHED_SMT) || defined(CONFIG_SCHED_MC)
486static inline int x86_sched_itmt_flags(void)
487{
488 return sysctl_sched_itmt_enabled ? SD_ASYM_PACKING : 0;
489}
490
491#ifdef CONFIG_SCHED_MC
492static int x86_core_flags(void)
493{
494 return cpu_core_flags() | x86_sched_itmt_flags();
495}
496#endif
497#ifdef CONFIG_SCHED_SMT
498static int x86_smt_flags(void)
499{
500 return cpu_smt_flags() | x86_sched_itmt_flags();
501}
502#endif
503#endif
504
485static struct sched_domain_topology_level x86_numa_in_package_topology[] = { 505static struct sched_domain_topology_level x86_numa_in_package_topology[] = {
486#ifdef CONFIG_SCHED_SMT 506#ifdef CONFIG_SCHED_SMT
487 { cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT) }, 507 { cpu_smt_mask, x86_smt_flags, SD_INIT_NAME(SMT) },
488#endif 508#endif
489#ifdef CONFIG_SCHED_MC 509#ifdef CONFIG_SCHED_MC
490 { cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) }, 510 { cpu_coregroup_mask, x86_core_flags, SD_INIT_NAME(MC) },
491#endif 511#endif
492 { NULL, }, 512 { NULL, },
493}; 513};
494 514
495static struct sched_domain_topology_level x86_topology[] = { 515static struct sched_domain_topology_level x86_topology[] = {
496#ifdef CONFIG_SCHED_SMT 516#ifdef CONFIG_SCHED_SMT
497 { cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT) }, 517 { cpu_smt_mask, x86_smt_flags, SD_INIT_NAME(SMT) },
498#endif 518#endif
499#ifdef CONFIG_SCHED_MC 519#ifdef CONFIG_SCHED_MC
500 { cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) }, 520 { cpu_coregroup_mask, x86_core_flags, SD_INIT_NAME(MC) },
501#endif 521#endif
502 { cpu_cpu_mask, SD_INIT_NAME(DIE) }, 522 { cpu_cpu_mask, SD_INIT_NAME(DIE) },
503 { NULL, }, 523 { NULL, },