Commit 13b9a962 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar

locking/rwsem: Rename 'activity' to 'count'

There are two definitions of struct rw_semaphore, one in linux/rwsem.h
and one in linux/rwsem-spinlock.h.

For some reason they have different names for the initial field. This
makes it impossible to use C99 named initialization for
__RWSEM_INITIALIZER() -- or we have to duplicate that entire thing
along with the structure definitions.

The simpler patch is renaming the rwsem-spinlock variant to match the
regular rwsem.

This allows us to switch to C99 named initialization.
Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/n/tip-bmrZolsbGmautmzrerog27io@git.kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent 33ecd208
...@@ -15,13 +15,13 @@ ...@@ -15,13 +15,13 @@
#ifdef __KERNEL__ #ifdef __KERNEL__
/* /*
* the rw-semaphore definition * the rw-semaphore definition
* - if activity is 0 then there are no active readers or writers * - if count is 0 then there are no active readers or writers
* - if activity is +ve then that is the number of active readers * - if count is +ve then that is the number of active readers
* - if activity is -1 then there is one active writer * - if count is -1 then there is one active writer
* - if wait_list is not empty, then there are processes waiting for the semaphore * - if wait_list is not empty, then there are processes waiting for the semaphore
*/ */
struct rw_semaphore { struct rw_semaphore {
__s32 activity; __s32 count;
raw_spinlock_t wait_lock; raw_spinlock_t wait_lock;
struct list_head wait_list; struct list_head wait_list;
#ifdef CONFIG_DEBUG_LOCK_ALLOC #ifdef CONFIG_DEBUG_LOCK_ALLOC
......
...@@ -26,7 +26,7 @@ int rwsem_is_locked(struct rw_semaphore *sem) ...@@ -26,7 +26,7 @@ int rwsem_is_locked(struct rw_semaphore *sem)
unsigned long flags; unsigned long flags;
if (raw_spin_trylock_irqsave(&sem->wait_lock, flags)) { if (raw_spin_trylock_irqsave(&sem->wait_lock, flags)) {
ret = (sem->activity != 0); ret = (sem->count != 0);
raw_spin_unlock_irqrestore(&sem->wait_lock, flags); raw_spin_unlock_irqrestore(&sem->wait_lock, flags);
} }
return ret; return ret;
...@@ -46,7 +46,7 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name, ...@@ -46,7 +46,7 @@ void __init_rwsem(struct rw_semaphore *sem, const char *name,
debug_check_no_locks_freed((void *)sem, sizeof(*sem)); debug_check_no_locks_freed((void *)sem, sizeof(*sem));
lockdep_init_map(&sem->dep_map, name, key, 0); lockdep_init_map(&sem->dep_map, name, key, 0);
#endif #endif
sem->activity = 0; sem->count = 0;
raw_spin_lock_init(&sem->wait_lock); raw_spin_lock_init(&sem->wait_lock);
INIT_LIST_HEAD(&sem->wait_list); INIT_LIST_HEAD(&sem->wait_list);
} }
...@@ -95,7 +95,7 @@ __rwsem_do_wake(struct rw_semaphore *sem, int wakewrite) ...@@ -95,7 +95,7 @@ __rwsem_do_wake(struct rw_semaphore *sem, int wakewrite)
waiter = list_entry(next, struct rwsem_waiter, list); waiter = list_entry(next, struct rwsem_waiter, list);
} while (waiter->type != RWSEM_WAITING_FOR_WRITE); } while (waiter->type != RWSEM_WAITING_FOR_WRITE);
sem->activity += woken; sem->count += woken;
out: out:
return sem; return sem;
...@@ -126,9 +126,9 @@ void __sched __down_read(struct rw_semaphore *sem) ...@@ -126,9 +126,9 @@ void __sched __down_read(struct rw_semaphore *sem)
raw_spin_lock_irqsave(&sem->wait_lock, flags); raw_spin_lock_irqsave(&sem->wait_lock, flags);
if (sem->activity >= 0 && list_empty(&sem->wait_list)) { if (sem->count >= 0 && list_empty(&sem->wait_list)) {
/* granted */ /* granted */
sem->activity++; sem->count++;
raw_spin_unlock_irqrestore(&sem->wait_lock, flags); raw_spin_unlock_irqrestore(&sem->wait_lock, flags);
goto out; goto out;
} }
...@@ -170,9 +170,9 @@ int __down_read_trylock(struct rw_semaphore *sem) ...@@ -170,9 +170,9 @@ int __down_read_trylock(struct rw_semaphore *sem)
raw_spin_lock_irqsave(&sem->wait_lock, flags); raw_spin_lock_irqsave(&sem->wait_lock, flags);
if (sem->activity >= 0 && list_empty(&sem->wait_list)) { if (sem->count >= 0 && list_empty(&sem->wait_list)) {
/* granted */ /* granted */
sem->activity++; sem->count++;
ret = 1; ret = 1;
} }
...@@ -206,7 +206,7 @@ void __sched __down_write_nested(struct rw_semaphore *sem, int subclass) ...@@ -206,7 +206,7 @@ void __sched __down_write_nested(struct rw_semaphore *sem, int subclass)
* itself into sleep and waiting for system woke it or someone * itself into sleep and waiting for system woke it or someone
* else in the head of the wait list up. * else in the head of the wait list up.
*/ */
if (sem->activity == 0) if (sem->count == 0)
break; break;
set_task_state(tsk, TASK_UNINTERRUPTIBLE); set_task_state(tsk, TASK_UNINTERRUPTIBLE);
raw_spin_unlock_irqrestore(&sem->wait_lock, flags); raw_spin_unlock_irqrestore(&sem->wait_lock, flags);
...@@ -214,7 +214,7 @@ void __sched __down_write_nested(struct rw_semaphore *sem, int subclass) ...@@ -214,7 +214,7 @@ void __sched __down_write_nested(struct rw_semaphore *sem, int subclass)
raw_spin_lock_irqsave(&sem->wait_lock, flags); raw_spin_lock_irqsave(&sem->wait_lock, flags);
} }
/* got the lock */ /* got the lock */
sem->activity = -1; sem->count = -1;
list_del(&waiter.list); list_del(&waiter.list);
raw_spin_unlock_irqrestore(&sem->wait_lock, flags); raw_spin_unlock_irqrestore(&sem->wait_lock, flags);
...@@ -235,9 +235,9 @@ int __down_write_trylock(struct rw_semaphore *sem) ...@@ -235,9 +235,9 @@ int __down_write_trylock(struct rw_semaphore *sem)
raw_spin_lock_irqsave(&sem->wait_lock, flags); raw_spin_lock_irqsave(&sem->wait_lock, flags);
if (sem->activity == 0) { if (sem->count == 0) {
/* got the lock */ /* got the lock */
sem->activity = -1; sem->count = -1;
ret = 1; ret = 1;
} }
...@@ -255,7 +255,7 @@ void __up_read(struct rw_semaphore *sem) ...@@ -255,7 +255,7 @@ void __up_read(struct rw_semaphore *sem)
raw_spin_lock_irqsave(&sem->wait_lock, flags); raw_spin_lock_irqsave(&sem->wait_lock, flags);
if (--sem->activity == 0 && !list_empty(&sem->wait_list)) if (--sem->count == 0 && !list_empty(&sem->wait_list))
sem = __rwsem_wake_one_writer(sem); sem = __rwsem_wake_one_writer(sem);
raw_spin_unlock_irqrestore(&sem->wait_lock, flags); raw_spin_unlock_irqrestore(&sem->wait_lock, flags);
...@@ -270,7 +270,7 @@ void __up_write(struct rw_semaphore *sem) ...@@ -270,7 +270,7 @@ void __up_write(struct rw_semaphore *sem)
raw_spin_lock_irqsave(&sem->wait_lock, flags); raw_spin_lock_irqsave(&sem->wait_lock, flags);
sem->activity = 0; sem->count = 0;
if (!list_empty(&sem->wait_list)) if (!list_empty(&sem->wait_list))
sem = __rwsem_do_wake(sem, 1); sem = __rwsem_do_wake(sem, 1);
...@@ -287,7 +287,7 @@ void __downgrade_write(struct rw_semaphore *sem) ...@@ -287,7 +287,7 @@ void __downgrade_write(struct rw_semaphore *sem)
raw_spin_lock_irqsave(&sem->wait_lock, flags); raw_spin_lock_irqsave(&sem->wait_lock, flags);
sem->activity = 1; sem->count = 1;
if (!list_empty(&sem->wait_list)) if (!list_empty(&sem->wait_list))
sem = __rwsem_do_wake(sem, 0); sem = __rwsem_do_wake(sem, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment