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
Signed-off-by: Will McVicker <willmcvicker@google.com>
This commit is contained in:
Rick Yiu
2021-03-12 16:33:30 +08:00
committed by Will McVicker
parent 87475cbbe1
commit abf44714df
3 changed files with 14 additions and 0 deletions

View File

@@ -217,3 +217,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_new_ilb);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rproc_recovery);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_uninterruptible_tasks);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_uninterruptible_tasks_dn);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_get);

View File

@@ -304,6 +304,13 @@ DECLARE_HOOK(android_vh_free_task,
TP_PROTO(struct task_struct *p),
TP_ARGS(p));
enum uclamp_id;
struct uclamp_se;
DECLARE_RESTRICTED_HOOK(android_rvh_uclamp_eff_get,
TP_PROTO(struct task_struct *p, enum uclamp_id clamp_id,
struct uclamp_se *uclamp_max, struct uclamp_se *uclamp_eff, int *ret),
TP_ARGS(p, clamp_id, uclamp_max, uclamp_eff, ret), 1);
DECLARE_RESTRICTED_HOOK(android_rvh_after_enqueue_task,
TP_PROTO(struct rq *rq, struct task_struct *p),
TP_ARGS(rq, p), 1);

View File

@@ -1478,6 +1478,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_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 */
if (unlikely(uc_req.value > uc_max.value))