From 87475cbbe154c5bb6f794a71d2c514a14579e5a0 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Mon, 4 Jan 2021 22:10:32 +0800 Subject: [PATCH] ANDROID: sched: Add vendor hook for cpu_overutilized Currently, cpu_overutilized uses the threshold 80% of cpu capacity, Add vendor hook so that vendor could define other values. Bug: 176722431 Signed-off-by: Rick Yiu Change-Id: Ic10bd8ebb40f7321cfa10e33ac020e3347ca6550 (cherry picked from commit b199c6e8795791e008cfff6e214676857cd0651c) Signed-off-by: J. Avila (cherry picked from commit f5998fbf2dbbcdda953018d95150b394b02b286b) --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/sched.h | 8 ++++++++ kernel/sched/fair.c | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 73b487115268..bcb27fe175d7 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -105,6 +105,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_energy_efficient_cpu); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_sugov_sched_attr); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_iowait); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_sugov_update); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpu_overutilized); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_setaffinity); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_cpus_allowed); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_skip_swapcache_flags); diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 5dfecc295340..77b97216fa9d 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -120,17 +120,25 @@ DECLARE_RESTRICTED_HOOK(android_rvh_migrate_queued_task, DECLARE_RESTRICTED_HOOK(android_rvh_find_energy_efficient_cpu, TP_PROTO(struct task_struct *p, int prev_cpu, int sync, int *new_cpu), TP_ARGS(p, prev_cpu, sync, new_cpu), 1); + struct sched_attr; DECLARE_HOOK(android_vh_set_sugov_sched_attr, TP_PROTO(struct sched_attr *attr), TP_ARGS(attr)); + DECLARE_RESTRICTED_HOOK(android_rvh_set_iowait, TP_PROTO(struct task_struct *p, struct rq *rq, int *should_iowait_boost), TP_ARGS(p, rq, should_iowait_boost), 1); + struct sugov_policy; DECLARE_RESTRICTED_HOOK(android_rvh_set_sugov_update, TP_PROTO(struct sugov_policy *sg_policy, unsigned int next_freq, bool *should_update), TP_ARGS(sg_policy, next_freq, should_update), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_cpu_overutilized, + TP_PROTO(int cpu, int *overutilized), + TP_ARGS(cpu, overutilized), 1); + DECLARE_RESTRICTED_HOOK(android_rvh_sched_setaffinity, TP_PROTO(struct task_struct *p, const struct cpumask *in_mask, int *retval), TP_ARGS(p, in_mask, retval), 1); diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 1673b6f102d4..6fbee038ae85 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -5588,6 +5588,12 @@ static inline unsigned long cpu_util(int cpu); static inline bool cpu_overutilized(int cpu) { + int overutilized = -1; + + trace_android_rvh_cpu_overutilized(cpu, &overutilized); + if (overutilized != -1) + return overutilized; + return !fits_capacity(cpu_util(cpu), capacity_of(cpu)); }