Re: [PATCH] sched: move access of avg_rt and avg_dl into existing helper functions

From: Shrikanth Hegde
Date: Fri Dec 22 2023 - 03:04:02 EST




On 12/21/23 9:46 PM, Vincent Guittot wrote:
> Hi Shrikanth,
>
> On Wed, 20 Dec 2023 at 15:49, Shrikanth Hegde
> <sshegde@xxxxxxxxxxxxxxxxxx> wrote:
>>
>>
>>
>> On 12/20/23 7:29 PM, Vincent Guittot wrote:
>>
>> Hi Vincent, thanks for taking a look.
>>
>>> On Wed, 20 Dec 2023 at 07:55, Shrikanth Hegde
>>> <sshegde@xxxxxxxxxxxxxxxxxx> wrote:
>>>>
>
> [...]
>
>>>> -#ifdef CONFIG_HAVE_SCHED_AVG_IRQ
>>>> - if (READ_ONCE(rq->avg_irq.util_avg))
>>>> + if (cpu_util_irq(rq))
>>>
>>> cpu_util_irq doesn't call READ_ONCE()
>>>
>>
>>
>> I see. Actually it would be right if cpu_util_irq does call READ_ONCE no?
>
> Yes, cpu_util_irq should call READ_ONCE()
>

Ok.

Sorry I forgot to mention about avg_irq.
I will send out v2 with the above change of READ_ONCE added soon.

>>
>> Sorry i havent yet understood the memory barriers in details. Please correct me
>> if i am wrong here,
>> since ___update_load_avg(&rq->avg_irq, 1) does use WRITE_ONCE and reading out this
>> value using cpu_util_irq on a different CPU should use READ_ONCE no?
>
> Yes
>
>>
>>>
>>>> return true;
>>>> -#endif
>>>>
>>>> return false;
>>>> }
>>>> @@ -9481,8 +9479,8 @@ static unsigned long scale_rt_capacity(int cpu)
>>>> * avg_thermal.load_avg tracks thermal pressure and the weighted
>>>> * average uses the actual delta max capacity(load).
>>>> */
>>>> - used = READ_ONCE(rq->avg_rt.util_avg);
>>>> - used += READ_ONCE(rq->avg_dl.util_avg);
>>>> + used = cpu_util_rt(rq);
>>>> + used += cpu_util_dl(rq);
>>>> used += thermal_load_avg(rq);
>>>>
>>>> if (unlikely(used >= max))
>>>> --
>>>> 2.39.3
>>>>