From b5a8eefc03fcb87d34114ad46ac6abcba64b29d9 Mon Sep 17 00:00:00 2001 From: Yun Hsiang Date: Thu, 14 Jan 2021 13:47:38 +0800 Subject: [PATCH] ANDROID: sched: add em_cpu_energy vendor hook We add a vendor hook for util to freq calculation in schedutil, so we need to do corresponding change for energy calculation. android_vh_em_cpu_energy adjust energy calculation Bug: 178022444 Signed-off-by: Yun Hsiang Change-Id: Iae772cf07881602eea3f27aeb75fba753e7c2635 --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/sched.h | 7 +++++++ kernel/sched/fair.c | 7 ++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index e1ac08e26e6a..ed487644d890 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -116,3 +116,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_misfit_status); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_cgroup_attach); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_cgroup_can_attach); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_map_util_freq); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_em_cpu_energy); diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index eb016caec373..8c05ed7ff612 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -198,6 +198,13 @@ 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)); + +struct em_perf_domain; +DECLARE_HOOK(android_vh_em_cpu_energy, + TP_PROTO(struct em_perf_domain *pd, + unsigned long max_util, unsigned long sum_util, + unsigned long *energy), + TP_ARGS(pd, max_util, sum_util, energy)); #endif /* _TRACE_HOOK_SCHED_H */ /* This part must be outside protection */ #include diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 4c00a3119e08..e60cfe22a278 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6532,6 +6532,7 @@ compute_energy(struct task_struct *p, int dst_cpu, struct perf_domain *pd) struct cpumask *pd_mask = perf_domain_span(pd); unsigned long cpu_cap = arch_scale_cpu_capacity(cpumask_first(pd_mask)); unsigned long max_util = 0, sum_util = 0; + unsigned long energy = 0; int cpu; /* @@ -6568,7 +6569,11 @@ compute_energy(struct task_struct *p, int dst_cpu, struct perf_domain *pd) max_util = max(max_util, cpu_util); } - return em_cpu_energy(pd->em_pd, max_util, sum_util); + trace_android_vh_em_cpu_energy(pd->em_pd, max_util, sum_util, &energy); + if (!energy) + energy = em_cpu_energy(pd->em_pd, max_util, sum_util); + + return energy; } /*