From bf868a6f04b814193dbc174d2b2671ff009044b4 Mon Sep 17 00:00:00 2001 From: Pavankumar Kondeti Date: Wed, 3 Jul 2019 13:54:04 +0530 Subject: [PATCH] sched/topology: Enable EAS on SMP systems also Currently EAS gets disabled when the system has only symmetric CPUs. For example, either the system is SMP or all big or little CPUs are hotplugged out on a b.L system. EAS features are required for better power and performance on systems with symmetric CPUs. So don't disable EAS on symmetric systems. This is done by assigning sd_asym_cpucapacity per-cpu pointer to the only available sched domain. Change-Id: If08a162f652a6a73884481ebc60e940373dbf9e2 Signed-off-by: Pavankumar Kondeti --- kernel/sched/topology.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c index 4a6a2c0f60c8..7c5d8556f374 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -653,6 +653,22 @@ static void update_top_cache_domain(int cpu) rcu_assign_pointer(per_cpu(sd_asym_packing, cpu), sd); sd = lowest_flag_domain(cpu, SD_ASYM_CPUCAPACITY); + /* + * EAS gets disabled when there are no asymmetric capacity + * CPUs in the system. For example, all big CPUs are + * hotplugged out on a b.L system. We want EAS enabled + * all the time to get both power and perf benefits. So, + * lets assign sd_asym_cpucapacity to the only available + * sched domain. This is also important for a single cluster + * systems which wants to use EAS. + * + * Setting sd_asym_cpucapacity() to a sched domain which + * has all symmetric capacity CPUs is technically incorrect but + * works well for us in getting EAS enabled all the time. + */ + if (!sd) + sd = cpu_rq(cpu)->sd; + rcu_assign_pointer(per_cpu(sd_asym_cpucapacity, cpu), sd); }