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:
@@ -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);
|
||||||
|
@@ -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 */
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user