Re: [RFC][PATCH 0/7] locking/rwsem: Convert rwsem count to atomic_long_t

From: Peter Zijlstra
Date: Fri Jun 03 2016 - 18:36:45 EST


On Fri, Jun 03, 2016 at 11:09:54AM -0700, Jason Low wrote:
> --- a/arch/alpha/include/asm/rwsem.h
> +++ b/arch/alpha/include/asm/rwsem.h
> @@ -25,8 +25,8 @@ static inline void __down_read(struct rw_semaphore *sem)
> {
> long oldcount;
> #ifndef CONFIG_SMP
> - oldcount = sem->count;
> - sem->count += RWSEM_ACTIVE_READ_BIAS;
> + oldcount = atomic_long_read(&sem->count);
> + atomic_long_add(RWSEM_ACTIVE_READ_BIAS, &sem->count);
> #else

That _completely_ misses the point of the whole !SMP code.

Something like:

diff --git a/arch/alpha/include/asm/rwsem.h b/arch/alpha/include/asm/rwsem.h
index a217bf8..77873d0 100644
--- a/arch/alpha/include/asm/rwsem.h
+++ b/arch/alpha/include/asm/rwsem.h
@@ -25,8 +25,8 @@ static inline void __down_read(struct rw_semaphore *sem)
{
long oldcount;
#ifndef CONFIG_SMP
- oldcount = sem->count;
- sem->count += RWSEM_ACTIVE_READ_BIAS;
+ oldcount = sem->count.counter;
+ sem->count.counter += RWSEM_ACTIVE_READ_BIAS;
#else
long temp;
__asm__ __volatile__(

preserves the intent.