From 18b294fa4c88452825edc7df9e6bab179a472731 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: 178047619 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 686c406fe95d..147223cf061a 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -132,3 +132,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ftrace_dump_buffer); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_allow_domain_state); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_map_util_freq); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_report_bug); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_em_cpu_energy); diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 1635cd61e3e8..55d742e8fc0a 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -227,6 +227,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_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)); + /* 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 8c9f54ca89e7..cc83f4981dd7 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6509,6 +6509,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; /* @@ -6545,7 +6546,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; } /*