RWSEM_FLAG_HANDOFF
if (!(count & (RWSEM_WRITER_LOCKED | RWSEM_FLAG_HANDOFF))) {
RWSEM_FLAG_HANDOFF|RWSEM_FLAG_READFAIL)
atomic_long_andnot(RWSEM_FLAG_HANDOFF | RWSEM_FLAG_WAITERS, &sem->count);
if (!(oldcount & RWSEM_FLAG_HANDOFF)) {
adjustment -= RWSEM_FLAG_HANDOFF;
if (oldcount & RWSEM_FLAG_HANDOFF)
adjustment -= RWSEM_FLAG_HANDOFF;
if (oldcount & RWSEM_FLAG_HANDOFF)
adjustment -= RWSEM_FLAG_HANDOFF;
bool has_handoff = !!(count & RWSEM_FLAG_HANDOFF);
new |= RWSEM_FLAG_HANDOFF;
new &= ~RWSEM_FLAG_HANDOFF;
if (new & RWSEM_FLAG_HANDOFF) {
while (!(count & (RWSEM_LOCK_MASK|RWSEM_FLAG_HANDOFF))) {