diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 03a9d96cbeeb..5c55fad58211 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -404,6 +404,12 @@ DECLARE_RESTRICTED_HOOK(android_rvh_update_load_avg_cfs_rq, DECLARE_RESTRICTED_HOOK(android_rvh_update_rt_rq_load_avg_internal, TP_PROTO(u64 now, struct rq *rq, int running, int *ret), TP_ARGS(now, rq, running, ret), 1); + +DECLARE_HOOK(android_vh_map_util_freq, + TP_PROTO(unsigned long util, unsigned long freq, + unsigned long cap, unsigned long *next_freq), + TP_ARGS(util, freq, cap, next_freq)); + /* macro versions of hooks are no longer required */ #endif /* _TRACE_HOOK_SCHED_H */ diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index a41fa6c53f6f..d6e1a9453fb7 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -175,9 +175,14 @@ static unsigned int get_next_freq(struct sugov_policy *sg_policy, { struct cpufreq_policy *policy = sg_policy->policy; unsigned int freq; + unsigned long next_freq = 0; freq = get_capacity_ref_freq(policy); - freq = map_util_freq(util, freq, max); + trace_android_vh_map_util_freq(util, freq, max, &next_freq); + if (next_freq) + freq = next_freq; + else + freq = map_util_freq(util, freq, max); if (freq == sg_policy->cached_raw_freq && !sg_policy->need_freq_update) return sg_policy->next_freq; diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c index 8aa2c60766cf..98849d307ab3 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -105,3 +105,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_load_avg_blocked_se); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_load_avg_se); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_load_avg_cfs_rq); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_rt_rq_load_avg_internal); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_map_util_freq);