mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
ANDROID: Re-use SUGOV_RT_MAX_FREQ to control uclamp rt behavior
By default uclamp RT tasks will use the max frequency, which is not the desired default behavior on mobile devices. Re-use the SUGOV_RT_MAX_FREQ sched_feat to control the default behavior. When SUGOV_RT_MAX_FREQ is NOT selected, the uclamp_min value of the RT tasks will be 0. Note, since now we use SUGOV_RT_MAX_FREQ to enforce the default max frequency for RT when uclamp is compiled in; the condition in schedutil_cpu_util() needs to be inverted so that max no longer unconditionally applied when uclamp is compiled in && SUGOV_RT_MAX_FREQ is true. This unconditional application means uclamp values are always ignored which is not what we want when uclamp is compiled in. Bug: 120440300 Signed-off-by: Qais Yousef <qais.yousef@arm.com> Change-Id: I3d36f1ebed6ef35a6299af32bbf4462d0353e783 Signed-off-by: Quentin Perret <qperret@google.com>
This commit is contained in:
parent
ecce1cf84a
commit
f503db1178
|
|
@ -1157,8 +1157,12 @@ static void __setscheduler_uclamp(struct task_struct *p,
|
|||
continue;
|
||||
|
||||
/* By default, RT tasks always get 100% boost */
|
||||
if (unlikely(rt_task(p) && clamp_id == UCLAMP_MIN))
|
||||
if (sched_feat(SUGOV_RT_MAX_FREQ) &&
|
||||
unlikely(rt_task(p) &&
|
||||
clamp_id == UCLAMP_MIN)) {
|
||||
|
||||
clamp_value = uclamp_none(UCLAMP_MAX);
|
||||
}
|
||||
|
||||
uclamp_se_set(uc_se, clamp_value, false);
|
||||
}
|
||||
|
|
@ -1191,8 +1195,12 @@ static void uclamp_fork(struct task_struct *p)
|
|||
unsigned int clamp_value = uclamp_none(clamp_id);
|
||||
|
||||
/* By default, RT tasks always get 100% boost */
|
||||
if (unlikely(rt_task(p) && clamp_id == UCLAMP_MIN))
|
||||
if (sched_feat(SUGOV_RT_MAX_FREQ) &&
|
||||
unlikely(rt_task(p) &&
|
||||
clamp_id == UCLAMP_MIN)) {
|
||||
|
||||
clamp_value = uclamp_none(UCLAMP_MAX);
|
||||
}
|
||||
|
||||
uclamp_se_set(&p->uclamp_req[clamp_id], clamp_value, false);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -244,7 +244,7 @@ unsigned long schedutil_cpu_util(int cpu, unsigned long util_cfs,
|
|||
unsigned long dl_util, util, irq;
|
||||
struct rq *rq = cpu_rq(cpu);
|
||||
|
||||
if ((sched_feat(SUGOV_RT_MAX_FREQ) || !IS_BUILTIN(CONFIG_UCLAMP_TASK)) &&
|
||||
if (sched_feat(SUGOV_RT_MAX_FREQ) && !IS_BUILTIN(CONFIG_UCLAMP_TASK) &&
|
||||
type == FREQUENCY_UTIL && rt_rq_is_runnable(&rq->rt)) {
|
||||
return max;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user