iowait_boost signal is applied independently of util and doesn't take into account uclamp settings of the rq. An io heavy task that is capped by uclamp_max could still request higher frequency because sugov_iowait_apply() doesn't clamp the boost via uclamp_rq_util_with() like effective_cpu_util() does. Make sure that iowait_boost honours uclamp requests by calling uclamp_rq_util_with() when applying the boost.
Unified · Split
| @@ -289,6 +289,7 @@ static void sugov_iowait_apply(struct sugov_cpu *sg_cpu, u64 time) · 288 unmodified lines | |||
| 289 | * into the same scale so we can compare. | 289 | * into the same scale so we can compare. |
| 290 | */ | 290 | */ |
| 291 | boost = (sg_cpu->iowait_boost * sg_cpu->max) >> SCHED_CAPACITY_SHIFT; | 291 | boost = (sg_cpu->iowait_boost * sg_cpu->max) >> SCHED_CAPACITY_SHIFT; |
| 292 | boost = uclamp_rq_util_with(cpu_rq(sg_cpu->cpu), boost, NULL); | ||
| 292 | if (sg_cpu->util < boost) | 293 | if (sg_cpu->util < boost) |
| 293 | sg_cpu->util = boost; | 294 | sg_cpu->util = boost; |
| 294 | } | 295 | } |