Loading drivers/cpufreq/cpufreq.c +0 −1 Original line number Diff line number Diff line Loading @@ -2278,7 +2278,6 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy, ret = cpufreq_start_governor(policy); if (!ret) { pr_debug("cpufreq: governor change\n"); sched_cpufreq_governor_change(policy, old_gov); return 0; } cpufreq_exit_governor(policy); Loading kernel/sched/cpufreq_schedutil.c +2 −35 Original line number Diff line number Diff line Loading @@ -968,7 +968,7 @@ static struct kobj_type sugov_tunables_ktype = { /********************** cpufreq governor interface *********************/ struct cpufreq_governor schedutil_gov; static struct cpufreq_governor schedutil_gov; static struct sugov_policy *sugov_policy_alloc(struct cpufreq_policy *policy) { Loading Loading @@ -1272,7 +1272,7 @@ static void sugov_limits(struct cpufreq_policy *policy) sg_policy->need_freq_update = true; } struct cpufreq_governor schedutil_gov = { static struct cpufreq_governor schedutil_gov = { .name = "schedutil", .owner = THIS_MODULE, .dynamic_switching = true, Loading @@ -1295,36 +1295,3 @@ static int __init sugov_register(void) return cpufreq_register_governor(&schedutil_gov); } fs_initcall(sugov_register); #ifdef CONFIG_ENERGY_MODEL extern bool sched_energy_update; extern struct mutex sched_energy_mutex; static void rebuild_sd_workfn(struct work_struct *work) { mutex_lock(&sched_energy_mutex); sched_energy_update = true; rebuild_sched_domains(); sched_energy_update = false; mutex_unlock(&sched_energy_mutex); } static DECLARE_WORK(rebuild_sd_work, rebuild_sd_workfn); /* * EAS shouldn't be attempted without sugov, so rebuild the sched_domains * on governor changes to make sure the scheduler knows about it. */ void sched_cpufreq_governor_change(struct cpufreq_policy *policy, struct cpufreq_governor *old_gov) { if (old_gov == &schedutil_gov || policy->governor == &schedutil_gov) { /* * When called from the cpufreq_register_driver() path, the * cpu_hotplug_lock is already held, so use a work item to * avoid nested locking in rebuild_sched_domains(). */ schedule_work(&rebuild_sd_work); } } #endif kernel/sched/sched.h +1 −1 Original line number Diff line number Diff line Loading @@ -2659,7 +2659,7 @@ unsigned long scale_irq_capacity(unsigned long util, unsigned long irq, unsigned } #endif #if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) #ifdef CONFIG_ENERGY_MODEL #define perf_domain_span(pd) (to_cpumask(((pd)->em_pd->cpus))) #else #define perf_domain_span(pd) NULL Loading kernel/sched/topology.c +4 −23 Original line number Diff line number Diff line Loading @@ -202,9 +202,7 @@ sd_parent_degenerate(struct sched_domain *sd, struct sched_domain *parent) } DEFINE_STATIC_KEY_FALSE(sched_energy_present); #if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) DEFINE_MUTEX(sched_energy_mutex); bool sched_energy_update; #ifdef CONFIG_ENERGY_MODEL static void free_pd(struct perf_domain *pd) { Loading Loading @@ -292,7 +290,6 @@ static void sched_energy_set(bool has_eas) * 1. an Energy Model (EM) is available; * 2. the SD_ASYM_CPUCAPACITY flag is set in the sched_domain hierarchy. * 3. the EM complexity is low enough to keep scheduling overheads low; * 4. schedutil is driving the frequency of all CPUs of the rd; * * The complexity of the Energy Model is defined as: * Loading @@ -312,15 +309,12 @@ static void sched_energy_set(bool has_eas) */ #define EM_MAX_COMPLEXITY 2048 extern struct cpufreq_governor schedutil_gov; static bool build_perf_domains(const struct cpumask *cpu_map) { int i, nr_pd = 0, nr_cs = 0, nr_cpus = cpumask_weight(cpu_map); struct perf_domain *pd = NULL, *tmp; int cpu = cpumask_first(cpu_map); struct root_domain *rd = cpu_rq(cpu)->rd; struct cpufreq_policy *policy; struct cpufreq_governor *gov; /* EAS is enabled for asymmetric CPU capacity topologies. */ if (!per_cpu(sd_asym_cpucapacity, cpu)) { Loading @@ -336,19 +330,6 @@ static bool build_perf_domains(const struct cpumask *cpu_map) if (find_pd(pd, i)) continue; /* Do not attempt EAS if schedutil is not being used. */ policy = cpufreq_cpu_get(i); if (!policy) goto free; gov = policy->governor; cpufreq_cpu_put(policy); if (gov != &schedutil_gov) { if (rd->pd) pr_warn("rd %*pbl: Disabling EAS, schedutil is mandatory\n", cpumask_pr_args(cpu_map)); goto free; } /* Create the new pd and add it to the local list. */ tmp = pd_init(i); if (!tmp) Loading Loading @@ -392,7 +373,7 @@ static bool build_perf_domains(const struct cpumask *cpu_map) } #else static void free_pd(struct perf_domain *pd) { } #endif /* CONFIG_ENERGY_MODEL && CONFIG_CPU_FREQ_GOV_SCHEDUTIL*/ #endif /* CONFIG_ENERGY_MODEL */ static void free_rootdomain(struct rcu_head *rcu) { Loading Loading @@ -2214,10 +2195,10 @@ void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[], ; } #if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) #ifdef CONFIG_ENERGY_MODEL /* Build perf. domains: */ for (i = 0; i < ndoms_new; i++) { for (j = 0; j < n && !sched_energy_update; j++) { for (j = 0; j < n; j++) { if (cpumask_equal(doms_new[i], doms_cur[j]) && cpu_rq(cpumask_first(doms_cur[j]))->rd->pd) { has_eas = true; Loading Loading
drivers/cpufreq/cpufreq.c +0 −1 Original line number Diff line number Diff line Loading @@ -2278,7 +2278,6 @@ static int cpufreq_set_policy(struct cpufreq_policy *policy, ret = cpufreq_start_governor(policy); if (!ret) { pr_debug("cpufreq: governor change\n"); sched_cpufreq_governor_change(policy, old_gov); return 0; } cpufreq_exit_governor(policy); Loading
kernel/sched/cpufreq_schedutil.c +2 −35 Original line number Diff line number Diff line Loading @@ -968,7 +968,7 @@ static struct kobj_type sugov_tunables_ktype = { /********************** cpufreq governor interface *********************/ struct cpufreq_governor schedutil_gov; static struct cpufreq_governor schedutil_gov; static struct sugov_policy *sugov_policy_alloc(struct cpufreq_policy *policy) { Loading Loading @@ -1272,7 +1272,7 @@ static void sugov_limits(struct cpufreq_policy *policy) sg_policy->need_freq_update = true; } struct cpufreq_governor schedutil_gov = { static struct cpufreq_governor schedutil_gov = { .name = "schedutil", .owner = THIS_MODULE, .dynamic_switching = true, Loading @@ -1295,36 +1295,3 @@ static int __init sugov_register(void) return cpufreq_register_governor(&schedutil_gov); } fs_initcall(sugov_register); #ifdef CONFIG_ENERGY_MODEL extern bool sched_energy_update; extern struct mutex sched_energy_mutex; static void rebuild_sd_workfn(struct work_struct *work) { mutex_lock(&sched_energy_mutex); sched_energy_update = true; rebuild_sched_domains(); sched_energy_update = false; mutex_unlock(&sched_energy_mutex); } static DECLARE_WORK(rebuild_sd_work, rebuild_sd_workfn); /* * EAS shouldn't be attempted without sugov, so rebuild the sched_domains * on governor changes to make sure the scheduler knows about it. */ void sched_cpufreq_governor_change(struct cpufreq_policy *policy, struct cpufreq_governor *old_gov) { if (old_gov == &schedutil_gov || policy->governor == &schedutil_gov) { /* * When called from the cpufreq_register_driver() path, the * cpu_hotplug_lock is already held, so use a work item to * avoid nested locking in rebuild_sched_domains(). */ schedule_work(&rebuild_sd_work); } } #endif
kernel/sched/sched.h +1 −1 Original line number Diff line number Diff line Loading @@ -2659,7 +2659,7 @@ unsigned long scale_irq_capacity(unsigned long util, unsigned long irq, unsigned } #endif #if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) #ifdef CONFIG_ENERGY_MODEL #define perf_domain_span(pd) (to_cpumask(((pd)->em_pd->cpus))) #else #define perf_domain_span(pd) NULL Loading
kernel/sched/topology.c +4 −23 Original line number Diff line number Diff line Loading @@ -202,9 +202,7 @@ sd_parent_degenerate(struct sched_domain *sd, struct sched_domain *parent) } DEFINE_STATIC_KEY_FALSE(sched_energy_present); #if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) DEFINE_MUTEX(sched_energy_mutex); bool sched_energy_update; #ifdef CONFIG_ENERGY_MODEL static void free_pd(struct perf_domain *pd) { Loading Loading @@ -292,7 +290,6 @@ static void sched_energy_set(bool has_eas) * 1. an Energy Model (EM) is available; * 2. the SD_ASYM_CPUCAPACITY flag is set in the sched_domain hierarchy. * 3. the EM complexity is low enough to keep scheduling overheads low; * 4. schedutil is driving the frequency of all CPUs of the rd; * * The complexity of the Energy Model is defined as: * Loading @@ -312,15 +309,12 @@ static void sched_energy_set(bool has_eas) */ #define EM_MAX_COMPLEXITY 2048 extern struct cpufreq_governor schedutil_gov; static bool build_perf_domains(const struct cpumask *cpu_map) { int i, nr_pd = 0, nr_cs = 0, nr_cpus = cpumask_weight(cpu_map); struct perf_domain *pd = NULL, *tmp; int cpu = cpumask_first(cpu_map); struct root_domain *rd = cpu_rq(cpu)->rd; struct cpufreq_policy *policy; struct cpufreq_governor *gov; /* EAS is enabled for asymmetric CPU capacity topologies. */ if (!per_cpu(sd_asym_cpucapacity, cpu)) { Loading @@ -336,19 +330,6 @@ static bool build_perf_domains(const struct cpumask *cpu_map) if (find_pd(pd, i)) continue; /* Do not attempt EAS if schedutil is not being used. */ policy = cpufreq_cpu_get(i); if (!policy) goto free; gov = policy->governor; cpufreq_cpu_put(policy); if (gov != &schedutil_gov) { if (rd->pd) pr_warn("rd %*pbl: Disabling EAS, schedutil is mandatory\n", cpumask_pr_args(cpu_map)); goto free; } /* Create the new pd and add it to the local list. */ tmp = pd_init(i); if (!tmp) Loading Loading @@ -392,7 +373,7 @@ static bool build_perf_domains(const struct cpumask *cpu_map) } #else static void free_pd(struct perf_domain *pd) { } #endif /* CONFIG_ENERGY_MODEL && CONFIG_CPU_FREQ_GOV_SCHEDUTIL*/ #endif /* CONFIG_ENERGY_MODEL */ static void free_rootdomain(struct rcu_head *rcu) { Loading Loading @@ -2214,10 +2195,10 @@ void partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[], ; } #if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) #ifdef CONFIG_ENERGY_MODEL /* Build perf. domains: */ for (i = 0; i < ndoms_new; i++) { for (j = 0; j < n && !sched_energy_update; j++) { for (j = 0; j < n; j++) { if (cpumask_equal(doms_new[i], doms_cur[j]) && cpu_rq(cpumask_first(doms_cur[j]))->rd->pd) { has_eas = true; Loading