On Mon, May 20, 2019 at 04:59:14PM -0400, Waiman Long wrote: > +static inline bool rwsem_reader_phase_trylock(struct rw_semaphore *sem, > + long last_rowner) > +{ > + long owner = atomic_long_read(&sem->owner); > + > + if (!(owner & RWSEM_READER_OWNED)) > + return false; > + > + owner &= ~RWSEM_OWNER_FLAGS_MASK; > + last_rowner &= ~RWSEM_OWNER_FLAGS_MASK; > + if ((owner != last_rowner) && rwsem_try_read_lock_unqueued(sem)) {
just because I'm struggling with sleep deprivation and the big picture isn't making sense,.. you can write that like: ((owner ^ last_rowner) & ~RWSEM_OWNER_FLAGS_MASK) > + lockevent_inc(rwsem_opt_rlock2); > + lockevent_add(rwsem_opt_fail, -1); > + return true; > + } > + return false; > +}