ANDROID: sched: Add vendor hook for uclamp_eff_get

Vendor may have their own behavior for determing uclamp value. Also
uclamp_eff_get() is used in uclamp_rq_inc_id() when task is enqueued,
and it is contained in uclamp_eff_value(), there is no much benefit to
hook uclamp_eff_value(), so remove the hook in uclamp_eff_value().

Bug: 170507972
Bug: 180859906
Signed-off-by: Rick Yiu <rickyiu@google.com>
Change-Id: Ibf7c043188a77c40baf5b4040b198a4197236089
This commit is contained in:
Rick Yiu
2021-03-12 16:33:30 +08:00
parent 5e1e3e9387
commit cc1f93cb20
3 changed files with 10 additions and 10 deletions

View File

@@ -173,7 +173,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_tm_command);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_check_int_errors); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_check_int_errors);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_wake_up_sync); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_wake_up_sync);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_wake_flags); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_wake_flags);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_value); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_get);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpufreq_transition); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpufreq_transition);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cgroup_set_task); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cgroup_set_task);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_syscall_prctl_finished); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_syscall_prctl_finished);

View File

@@ -270,10 +270,10 @@ DECLARE_HOOK(android_vh_set_wake_flags,
enum uclamp_id; enum uclamp_id;
struct uclamp_se; struct uclamp_se;
DECLARE_RESTRICTED_HOOK(android_rvh_uclamp_eff_value, DECLARE_RESTRICTED_HOOK(android_rvh_uclamp_eff_get,
TP_PROTO(struct task_struct *p, enum uclamp_id clamp_id, TP_PROTO(struct task_struct *p, enum uclamp_id clamp_id,
struct uclamp_se *uclamp_default, unsigned long *ret), struct uclamp_se *uclamp_max, struct uclamp_se *uclamp_eff, int *ret),
TP_ARGS(p, clamp_id, uclamp_default, ret), 1); TP_ARGS(p, clamp_id, uclamp_max, uclamp_eff, ret), 1);
/* macro versions of hooks are no longer required */ /* macro versions of hooks are no longer required */

View File

@@ -1130,6 +1130,12 @@ uclamp_eff_get(struct task_struct *p, enum uclamp_id clamp_id)
{ {
struct uclamp_se uc_req = uclamp_tg_restrict(p, clamp_id); struct uclamp_se uc_req = uclamp_tg_restrict(p, clamp_id);
struct uclamp_se uc_max = uclamp_default[clamp_id]; struct uclamp_se uc_max = uclamp_default[clamp_id];
struct uclamp_se uc_eff;
int ret = 0;
trace_android_rvh_uclamp_eff_get(p, clamp_id, &uc_max, &uc_eff, &ret);
if (ret)
return uc_eff;
/* System default restrictions always apply */ /* System default restrictions always apply */
if (unlikely(uc_req.value > uc_max.value)) if (unlikely(uc_req.value > uc_max.value))
@@ -1142,12 +1148,6 @@ unsigned long uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id)
{ {
struct uclamp_se uc_eff; 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 */ /* Task currently refcounted: use back-annotated (effective) value */
if (p->uclamp[clamp_id].active) if (p->uclamp[clamp_id].active)
return (unsigned long)p->uclamp[clamp_id].value; return (unsigned long)p->uclamp[clamp_id].value;