On Mon, 2018-07-16 at 00:15 +0200, Ingo Molnar wrote:
> * Vincent Guittot <vincent.guit...@linaro.org> wrote:
> 
> > The utilization of the CPU by rt, dl and interrupts are now tracked with
> > PELT so we can use these metrics instead of rt_avg to evaluate the remaining
> > capacity available for cfs class.
> > 
> > scale_rt_capacity() behavior has been changed and now returns the remaining
> > capacity available for cfs instead of a scaling factor because rt, dl and
> > interrupt provide now absolute utilization value.
> > 
> > The same formula as schedutil is used:
> >   irq util_avg + (1 - irq util_avg / max capacity ) * /Sum rq util_avg
> > but the implementation is different because it doesn't return the same value
> > and doesn't benefit of the same optimization
[]
> I have applied the delta fix below for simplicity, but what we really want is 
> a 
> cleanup of that function to eliminate the #ifdefs. One solution would be to 
> factor 
> out the 'irq' utilization value into a helper inline, and double check that 
> if the 
> configs are off the compiler does the right thing and eliminates this 
> identity 
> transformation for the irq==0 case:
[]
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
[]
> @@ -7550,7 +7550,10 @@ static unsigned long scale_rt_capacity(int cpu)
>  {
>       struct rq *rq = cpu_rq(cpu);
>       unsigned long max = arch_scale_cpu_capacity(NULL, cpu);
> -     unsigned long used, irq, free;
> +     unsigned long used, free;
> +#if defined(CONFIG_IRQ_TIME_ACCOUNTING) || 
> defined(CONFIG_PARAVIRT_TIME_ACCOUNTING)
> +     unsigned long irq;
> +#endif
>  
>  #if defined(CONFIG_IRQ_TIME_ACCOUNTING) || 
> defined(CONFIG_PARAVIRT_TIME_ACCOUNTING)

Perhaps combine these two #if defined blocks into
a single block

>       irq = READ_ONCE(rq->avg_irq.util_avg);

Reply via email to