----- Original Message ----- > > 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; > >
I see - it looks possible. Thank you for this example.