@@ -182,21 +183,30 @@ static void sugov_get_util(struct sugov_cpu *sg_cpu)
sg_cpu->util_dl = cpu_util_dl(rq);
sg_cpu->bw_dl = cpu_bw_dl(rq);
sg_cpu->util_rt = cpu_util_rt(rq);
+ sg_cpu->util_irq = cpu_util_irq(rq);
}
static unsigned long sugov_aggregate_util(struct sugov_cpu *sg_cpu)
{
struct rq *rq = cpu_rq(sg_cpu->cpu);
- unsigned long util;
+ unsigned long util, max = sg_cpu->max;
if (rq->rt.rt_nr_running)
return sg_cpu->max;
+ if (unlikely(sg_cpu->util_irq >= max))
+ return max;
+
+ /* Sum rq utilization */
util = sg_cpu->util_cfs;
util += sg_cpu->util_rt;
- if ((util + sg_cpu->util_dl) >= sg_cpu->max)
- return sg_cpu->max;
:confirm b9