From 4b88cf85247f60ada68300b37f84d24256f85cb3 Mon Sep 17 00:00:00 2001 From: Rick Yiu Date: Thu, 7 Jan 2021 13:55:19 +0800 Subject: [PATCH] ANDROID: sched: Add vendor hook for uclamp_eff_value Vendor may have their own behavior for determing uclamp value. Bug: 170507972 Signed-off-by: Rick Yiu Change-Id: I33f8adc7240f6a44f16446421536047db2794989 --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/sched.h | 7 +++++++ kernel/sched/core.c | 6 ++++++ 3 files changed, 14 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 4bb2685424e0..ac5b8d8e7b7e 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -167,3 +167,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_command); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_compl_command); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_wake_up_sync); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_wake_flags); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_value); diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 44201e0307c6..a5dff482f5c3 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -268,6 +268,13 @@ DECLARE_HOOK(android_vh_set_wake_flags, TP_PROTO(int *wake_flags, unsigned int *mode), TP_ARGS(wake_flags, mode)); +enum uclamp_id; +struct uclamp_se; +DECLARE_RESTRICTED_HOOK(android_rvh_uclamp_eff_value, + TP_PROTO(struct task_struct *p, enum uclamp_id clamp_id, + struct uclamp_se *uclamp_default, unsigned long *ret), + TP_ARGS(p, clamp_id, uclamp_default, ret), 1); + /* macro versions of hooks are no longer required */ #endif /* _TRACE_HOOK_SCHED_H */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 7521eace6e55..ba254b802ca0 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1144,6 +1144,12 @@ unsigned long uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id) { struct uclamp_se uc_eff; + unsigned long ret = ULONG_MAX; + + trace_android_rvh_uclamp_eff_value(p, clamp_id, &uclamp_default[clamp_id], &ret); + if (ret != ULONG_MAX) + return ret; + /* Task currently refcounted: use back-annotated (effective) value */ if (p->uclamp[clamp_id].active) return (unsigned long)p->uclamp[clamp_id].value;