On domenica 3 aprile 2022 14:45:49 CEST Pavel Skripkin wrote:
Hi Fabio,
On 4/3/22 15:37, Fabio M. De Francesco wrote:
>> > >> > drivers/staging/r8188eu/core/rtw_pwrctrl.c:379
>> > >> > if (pwrpriv->ps_processing) {
>> > while (pwrpriv->ps_processing && rtw_get_passing_time_ms(start) <= 3000)
>> > msleep(10);
>> > }
>> > >> >> Hm, just wondering, shouldn't we annotate load from >> pwrpriv->ps_processing with READ_ONCE() inside while loop?
>> IIUC compiler might want to cache first load into register and we will >> stuck here forever.
> > You're right. This can be cached. In situations like these one should use
> barriers or other API that use barriers implicitly (completions, for example).
>
Not sure about completions, since they may sleep.
No completions in this special context. They for _sure_ might sleep. I was
talking about general cases when you are in a loop and wait for status change.
Also, don't think that barriers are needed here, since this code just waiting for observing value 1. Might be barrier will slightly speed up waiting thread, but will also slow down other thread
Here, I cannot help with a 100% good answer. Maybe Greg wants to say something
about it?
Attachment:
OpenPGP_signature
Description: OpenPGP digital signature