It's simpler like so:

On Thu, Jul 18, 2019 at 01:04:46PM +0200, Peter Zijlstra wrote:
> X = 0;
> 
>       rwsem_down_read()
>         for (;;) {
>           set_current_state(TASK_UNINTERRUPTIBLE);
>
>                                                               X = 1;
>                                                               
> rwsem_up_write();
>                                                                 
> rwsem_mark_wake()
>                                                                   
> atomic_long_add(adjustment, &sem->count);
>                                                                   
> smp_store_release(&waiter->task, NULL);
> 
>           if (!waiter.task)
>             break;
> 
>           ...
>         }
> 
>       r = X;
> 

Reply via email to