From b7f31af2f1edce51324cf18859ca2163c2f1d919 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_pd_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_pd_energy adjust energy calculation Bug: 178021064 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 07f21f88e2a2..6686dbc0f1af 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -68,3 +68,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_lockup_pool); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sysrq_crash); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_group); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_map_util_freq); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_em_pd_energy); diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 61d926289438..ed5b113273ad 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -75,6 +75,13 @@ DECLARE_HOOK(android_vh_map_util_freq, unsigned long cap, unsigned long *next_freq), TP_ARGS(util, freq, cap, next_freq)); +struct em_perf_domain; +DECLARE_HOOK(android_vh_em_pd_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)); + /* macro versions of hooks are no longer required */ #endif /* _TRACE_HOOK_SCHED_H */ diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 1b028e23128b..8cabb63f4cd9 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6340,6 +6340,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; /* @@ -6376,7 +6377,11 @@ compute_energy(struct task_struct *p, int dst_cpu, struct perf_domain *pd) max_util = max(max_util, cpu_util); } - return em_pd_energy(pd->em_pd, max_util, sum_util); + trace_android_vh_em_pd_energy(pd->em_pd, max_util, sum_util, &energy); + if (!energy) + energy = em_pd_energy(pd->em_pd, max_util, sum_util); + + return energy; } /*