On 15-05-18, 21:49, Srinivas Pandruvada wrote: > Added cpufreq_get_sched_util() to get the CFS, DL and max utilization > values for a CPU. This is required for getting utilization values > for cpufreq drivers outside of kernel/sched folder. > > Signed-off-by: Srinivas Pandruvada <srinivas.pandruv...@linux.intel.com> > --- > include/linux/sched/cpufreq.h | 2 ++ > kernel/sched/cpufreq.c | 23 +++++++++++++++++++++++ > 2 files changed, 25 insertions(+) > > diff --git a/include/linux/sched/cpufreq.h b/include/linux/sched/cpufreq.h > index 5966744..a366600 100644 > --- a/include/linux/sched/cpufreq.h > +++ b/include/linux/sched/cpufreq.h > @@ -20,6 +20,8 @@ void cpufreq_add_update_util_hook(int cpu, struct > update_util_data *data, > void (*func)(struct update_util_data *data, u64 time, > unsigned int flags)); > void cpufreq_remove_update_util_hook(int cpu); > +void cpufreq_get_sched_util(int cpu, unsigned long *util_cfs, > + unsigned long *util_dl, unsigned long *max); > #endif /* CONFIG_CPU_FREQ */ > > #endif /* _LINUX_SCHED_CPUFREQ_H */ > diff --git a/kernel/sched/cpufreq.c b/kernel/sched/cpufreq.c > index 5e54cbc..36e2839 100644 > --- a/kernel/sched/cpufreq.c > +++ b/kernel/sched/cpufreq.c > @@ -60,3 +60,26 @@ void cpufreq_remove_update_util_hook(int cpu) > rcu_assign_pointer(per_cpu(cpufreq_update_util_data, cpu), NULL); > } > EXPORT_SYMBOL_GPL(cpufreq_remove_update_util_hook); > + > +/** > + * cpufreq_get_sched_util - Get utilization values. > + * @cpu: The targeted CPU. > + * > + * Get the CFS, DL and max utilization. > + * This function allows cpufreq driver outside the kernel/sched to access > + * utilization value for a CPUs run queue. > + */ > +void cpufreq_get_sched_util(int cpu, unsigned long *util_cfs, > + unsigned long *util_dl, unsigned long *max) > +{ > +#ifdef CONFIG_CPU_FREQ_GOV_SCHEDUTIL
What will happen when schedutil is compiled in the kernel but ondemand is the one getting used currently ? > + struct rq *rq = cpu_rq(cpu); > + > + *max = arch_scale_cpu_capacity(NULL, cpu); > + *util_cfs = cpu_util_cfs(rq); > + *util_dl = cpu_util_dl(rq); > +#else > + *util_cfs = *util_dl = 1; > +#endif > +} > +EXPORT_SYMBOL_GPL(cpufreq_get_sched_util); > -- > 2.9.5 -- viresh