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; >