From d5aece25862f22e5c65e9a8f99767adf54b8955d Mon Sep 17 00:00:00 2001 From: Liujie Xie Date: Thu, 11 Nov 2021 17:05:49 +0800 Subject: [PATCH] ANDROID: vendor_hooks: Add hooks for frequency optimization These hooks will do the following works: a) Record the number of times when target_freq being clamped b) Record the number of times when target_freq is greater than policy->cur c) Make corresponding optimization strategies in different hooks d) change the value of target_freq for some scenarios Bug: 205906618 Bug: 206896672 Change-Id: I8eba66fd0c6d36393ca39045cf228b659834e0ae Signed-off-by: Liujie Xie Signed-off-by: vincent.wang (cherry picked from commit 7e2fbdaeabb31251f42e38bed0ae0b660408f8e6) (cherry picked from commit cf551f380a3c47894accfffc2c8b3d4547a60f9a) --- drivers/android/vendor_hooks.c | 3 +++ drivers/cpufreq/cpufreq.c | 6 ++++++ include/trace/hooks/cpufreq.h | 15 +++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 029254fb8675..8e4acd88e72a 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -108,6 +108,9 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_v3_affinity_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_suspend_epoch_val); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_show_resume_epoch_val); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_freq_table_limits); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpufreq_resolve_freq); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpufreq_fast_switch); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpufreq_target); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_newidle_balance); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_nohz_balancer_kick); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_rebalance_domains); diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index cb9f75455d85..92302f03cae8 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c @@ -532,8 +532,10 @@ static unsigned int __resolve_freq(struct cpufreq_policy *policy, unsigned int target_freq, unsigned int relation) { unsigned int idx; + unsigned int old_target_freq = target_freq; target_freq = clamp_val(target_freq, policy->min, policy->max); + trace_android_vh_cpufreq_resolve_freq(policy, &target_freq, old_target_freq); if (!cpufreq_driver->target_index) return target_freq; @@ -2099,9 +2101,11 @@ unsigned int cpufreq_driver_fast_switch(struct cpufreq_policy *policy, unsigned int target_freq) { unsigned int freq; + unsigned int old_target_freq = target_freq; int cpu; target_freq = clamp_val(target_freq, policy->min, policy->max); + trace_android_vh_cpufreq_fast_switch(policy, &target_freq, old_target_freq); freq = cpufreq_driver->fast_switch(policy, target_freq); if (!freq) @@ -2259,6 +2263,8 @@ int __cpufreq_driver_target(struct cpufreq_policy *policy, target_freq = __resolve_freq(policy, target_freq, relation); + trace_android_vh_cpufreq_target(policy, &target_freq, old_target_freq); + pr_debug("target for CPU %u: %u kHz, relation %u, requested %u kHz\n", policy->cpu, target_freq, relation, old_target_freq); diff --git a/include/trace/hooks/cpufreq.h b/include/trace/hooks/cpufreq.h index 4f164b7626df..b7c5586442ef 100644 --- a/include/trace/hooks/cpufreq.h +++ b/include/trace/hooks/cpufreq.h @@ -24,6 +24,21 @@ DECLARE_RESTRICTED_HOOK(android_rvh_cpufreq_transition, TP_PROTO(struct cpufreq_policy *policy), TP_ARGS(policy), 1); +DECLARE_HOOK(android_vh_cpufreq_resolve_freq, + TP_PROTO(struct cpufreq_policy *policy, unsigned int *target_freq, + unsigned int old_target_freq), + TP_ARGS(policy, target_freq, old_target_freq)); + +DECLARE_HOOK(android_vh_cpufreq_fast_switch, + TP_PROTO(struct cpufreq_policy *policy, unsigned int *target_freq, + unsigned int old_target_freq), + TP_ARGS(policy, target_freq, old_target_freq)); + +DECLARE_HOOK(android_vh_cpufreq_target, + TP_PROTO(struct cpufreq_policy *policy, unsigned int *target_freq, + unsigned int old_target_freq), + TP_ARGS(policy, target_freq, old_target_freq)); + #endif /* _TRACE_HOOK_CPUFREQ_H */ /* This part must be outside protection */ #include