Messages in this thread | | | Date | Tue, 16 Apr 2019 18:17:27 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH v4 06/16] locking/rwsem: Code cleanup after files merging |
| |
On Tue, Apr 16, 2019 at 06:01:13PM +0200, Peter Zijlstra wrote: > @@ -794,34 +770,38 @@ static inline int __down_read_trylock(st > */ > static inline void __down_write(struct rw_semaphore *sem) > { > - if (unlikely(atomic_long_cmpxchg_acquire(&sem->count, 0, > - RWSEM_WRITER_LOCKED))) > - rwsem_down_write_failed(sem); > + long tmp = RWSEM_UNLOCKED_VALUE; > + > + if (unlikely(atomic_long_try_cmpxchg_acquire(&sem->count, &tmp, > + RWSEM_WRITER_LOCKED)))
!
> + rwsem_down_write_slow(sem, TASK_UNINTERRUPTIBLE); > rwsem_set_owner(sem); > } > > static inline int __down_write_killable(struct rw_semaphore *sem) > { > - if (unlikely(atomic_long_cmpxchg_acquire(&sem->count, 0, > - RWSEM_WRITER_LOCKED))) > - if (IS_ERR(rwsem_down_write_failed_killable(sem))) > + long tmp = RWSEM_UNLOCKED_VALUE; > + > + if (unlikely(atomic_long_try_cmpxchg_acquire(&sem->count, &tmp, > + RWSEM_WRITER_LOCKED))) {
also !
> + if (IS_ERR(rwsem_down_write_slow(sem, TASK_KILLABLE))) > return -EINTR; > + } > rwsem_set_owner(sem); > return 0; > }
I'm having a great day it seems, it's like back in uni, trying to find all the missing - signs in this page-long DE.
| |