On 16 March 2016 at 08:41, Peter Zijlstra <pet...@infradead.org> wrote: > On Tue, Mar 15, 2016 at 03:06:09PM -0700, Michael Turquette wrote: >> Quoting Peter Zijlstra (2016-03-15 14:25:20) >> > On Sun, Mar 13, 2016 at 10:22:09PM -0700, Michael Turquette wrote: >> > > +++ b/include/linux/sched.h >> > > @@ -2362,15 +2362,25 @@ extern u64 scheduler_tick_max_deferment(void); >> > > static inline bool sched_can_stop_tick(void) { return false; } >> > > #endif >> > > >> > > +enum sched_class_util { >> > > + cfs_util, >> > > + rt_util, >> > > + dl_util, >> > > + nr_util_types, >> > > +}; >> > > + >> > > #ifdef CONFIG_CPU_FREQ >> > > struct freq_update_hook { >> > > + void (*func)(struct freq_update_hook *hook, >> > > + enum sched_class_util sched_class, u64 time, >> > > unsigned long util, unsigned long max); >> > > }; >> > > >> > Have you looked at the asm that generated? At some point you'll start >> > spilling on the stack and it'll be a god awful mess. >> > >> >> Is your complaint about the enum that I added to the existing function >> signature, or do you not like the original function signature[0] from >> Rafael's patch, sans enum? > > No, my complaint is more about the call ABI for all our platforms, at > some point we start passing arguments on the stack instead of through > registers. > > I'm not sure where that starts hurting, but its always a concern when > adding arguments to functions.
I wonder if it's really worth passing per sched_class request to sched_util ? sched_util is about selecting a frequency based on the utilization of the CPU, it only needs a value that reflect the whole utilization. Can't we sum (or whatever the formula we want to apply) utilizations before calling cpufreq_update_util