Message ID | 20200507181012.29791-5-qperret@google.com (mailing list archive) |
---|---|
State | RFC, archived |
Headers | show |
Series | Modularize schedutil | expand |
On Thu, May 07, 2020 at 07:10:02PM +0100, Quentin Perret wrote: > CPUFreq calls into sched_cpufreq_governor_change() when switching > governors, which triggers a sched domain rebuild when entering or > exiting schedutil. > > Move the function to sched/cpufreq.c to prepare the ground for the > modularization of schedutil. > > Signed-off-by: Quentin Perret <qperret@google.com> > --- > kernel/sched/cpufreq.c | 33 ++++++++++++++++++++++++++++++++ > kernel/sched/cpufreq_schedutil.c | 33 -------------------------------- > 2 files changed, 33 insertions(+), 33 deletions(-) > > diff --git a/kernel/sched/cpufreq.c b/kernel/sched/cpufreq.c > index 7c2fe50fd76d..82f2dda61a55 100644 > --- a/kernel/sched/cpufreq.c > +++ b/kernel/sched/cpufreq.c > @@ -75,3 +75,36 @@ bool cpufreq_this_cpu_can_update(struct cpufreq_policy *policy) > (policy->dvfs_possible_from_any_cpu && > rcu_dereference_sched(*this_cpu_ptr(&cpufreq_update_util_data))); > } > + > +#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. > + */ In the previous patch, you removed reference to schedutil and replaced it with " an EAS-compatible CPUfreq governor (schedutil)". May be you could do the same here. Thanks, Pavan
On Friday 08 May 2020 at 11:05:23 (+0530), Pavan Kondeti wrote: > In the previous patch, you removed reference to schedutil and replaced it with > " an EAS-compatible CPUfreq governor (schedutil)". May be you could do the > same here. Good point, I add it to the todo list for v2 ;) Thanks, Quentin
diff --git a/kernel/sched/cpufreq.c b/kernel/sched/cpufreq.c index 7c2fe50fd76d..82f2dda61a55 100644 --- a/kernel/sched/cpufreq.c +++ b/kernel/sched/cpufreq.c @@ -75,3 +75,36 @@ bool cpufreq_this_cpu_can_update(struct cpufreq_policy *policy) (policy->dvfs_possible_from_any_cpu && rcu_dereference_sched(*this_cpu_ptr(&cpufreq_update_util_data))); } + +#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 && old_gov->want_eas) || policy->governor->want_eas) { + /* + * 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 diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index c5e5045f7c81..33e67c48f668 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -905,36 +905,3 @@ static int __init sugov_register(void) return cpufreq_register_governor(&schedutil_gov); } core_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 && old_gov->want_eas) || policy->governor->want_eas) { - /* - * 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
CPUFreq calls into sched_cpufreq_governor_change() when switching governors, which triggers a sched domain rebuild when entering or exiting schedutil. Move the function to sched/cpufreq.c to prepare the ground for the modularization of schedutil. Signed-off-by: Quentin Perret <qperret@google.com> --- kernel/sched/cpufreq.c | 33 ++++++++++++++++++++++++++++++++ kernel/sched/cpufreq_schedutil.c | 33 -------------------------------- 2 files changed, 33 insertions(+), 33 deletions(-)