[PATCH RT 5/8] rt: rwsem/rwlock: lockdep annotations
From: Thomas Gleixner rwlocks and rwsems on RT do not allow multiple readers. Annotate the lockdep acquire functions accordingly. Signed-off-by: Thomas Gleixner Cc: stable...@vger.kernel.org Signed-off-by: Steven Rostedt --- kernel/rt.c | 46 +- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/kernel/rt.c b/kernel/rt.c index 092d6b3..aa10504 100644 --- a/kernel/rt.c +++ b/kernel/rt.c @@ -216,15 +216,17 @@ int __lockfunc rt_read_trylock(rwlock_t *rwlock) * write locked. */ migrate_disable(); - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { ret = rt_mutex_trylock(lock); - else if (!rwlock->read_depth) + if (ret) + rwlock_acquire(>dep_map, 0, 1, _RET_IP_); + } else if (!rwlock->read_depth) { ret = 0; + } - if (ret) { + if (ret) rwlock->read_depth++; - rwlock_acquire_read(>dep_map, 0, 1, _RET_IP_); - } else + else migrate_enable(); return ret; @@ -242,13 +244,13 @@ void __lockfunc rt_read_lock(rwlock_t *rwlock) { struct rt_mutex *lock = >lock; - rwlock_acquire_read(>dep_map, 0, 0, _RET_IP_); - /* * recursive read locks succeed when current owns the lock */ - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { + rwlock_acquire(>dep_map, 0, 0, _RET_IP_); __rt_spin_lock(lock); + } rwlock->read_depth++; } @@ -264,11 +266,11 @@ EXPORT_SYMBOL(rt_write_unlock); void __lockfunc rt_read_unlock(rwlock_t *rwlock) { - rwlock_release(>dep_map, 1, _RET_IP_); - /* Release the lock only when read_depth is down to 0 */ - if (--rwlock->read_depth == 0) + if (--rwlock->read_depth == 0) { + rwlock_release(>dep_map, 1, _RET_IP_); __rt_spin_unlock(>lock); + } } EXPORT_SYMBOL(rt_read_unlock); @@ -315,9 +317,10 @@ EXPORT_SYMBOL(rt_up_write); void rt_up_read(struct rw_semaphore *rwsem) { - rwsem_release(>dep_map, 1, _RET_IP_); - if (--rwsem->read_depth == 0) + if (--rwsem->read_depth == 0) { + rwsem_release(>dep_map, 1, _RET_IP_); rt_mutex_unlock(>lock); + } } EXPORT_SYMBOL(rt_up_read); @@ -366,15 +369,16 @@ int rt_down_read_trylock(struct rw_semaphore *rwsem) * but not when read_depth == 0 which means that the rwsem is * write locked. */ - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { ret = rt_mutex_trylock(>lock); - else if (!rwsem->read_depth) + if (ret) + rwsem_acquire(>dep_map, 0, 1, _RET_IP_); + } else if (!rwsem->read_depth) { ret = 0; + } - if (ret) { + if (ret) rwsem->read_depth++; - rwsem_acquire(>dep_map, 0, 1, _RET_IP_); - } return ret; } EXPORT_SYMBOL(rt_down_read_trylock); @@ -383,10 +387,10 @@ static void __rt_down_read(struct rw_semaphore *rwsem, int subclass) { struct rt_mutex *lock = >lock; - rwsem_acquire_read(>dep_map, subclass, 0, _RET_IP_); - - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { + rwsem_acquire(>dep_map, subclass, 0, _RET_IP_); rt_mutex_lock(>lock); + } rwsem->read_depth++; } -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH RT 5/8] rt: rwsem/rwlock: lockdep annotations
From: Thomas Gleixner t...@linutronix.de rwlocks and rwsems on RT do not allow multiple readers. Annotate the lockdep acquire functions accordingly. Signed-off-by: Thomas Gleixner t...@linutronix.de Cc: stable...@vger.kernel.org Signed-off-by: Steven Rostedt rost...@goodmis.org --- kernel/rt.c | 46 +- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/kernel/rt.c b/kernel/rt.c index 092d6b3..aa10504 100644 --- a/kernel/rt.c +++ b/kernel/rt.c @@ -216,15 +216,17 @@ int __lockfunc rt_read_trylock(rwlock_t *rwlock) * write locked. */ migrate_disable(); - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { ret = rt_mutex_trylock(lock); - else if (!rwlock-read_depth) + if (ret) + rwlock_acquire(rwlock-dep_map, 0, 1, _RET_IP_); + } else if (!rwlock-read_depth) { ret = 0; + } - if (ret) { + if (ret) rwlock-read_depth++; - rwlock_acquire_read(rwlock-dep_map, 0, 1, _RET_IP_); - } else + else migrate_enable(); return ret; @@ -242,13 +244,13 @@ void __lockfunc rt_read_lock(rwlock_t *rwlock) { struct rt_mutex *lock = rwlock-lock; - rwlock_acquire_read(rwlock-dep_map, 0, 0, _RET_IP_); - /* * recursive read locks succeed when current owns the lock */ - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { + rwlock_acquire(rwlock-dep_map, 0, 0, _RET_IP_); __rt_spin_lock(lock); + } rwlock-read_depth++; } @@ -264,11 +266,11 @@ EXPORT_SYMBOL(rt_write_unlock); void __lockfunc rt_read_unlock(rwlock_t *rwlock) { - rwlock_release(rwlock-dep_map, 1, _RET_IP_); - /* Release the lock only when read_depth is down to 0 */ - if (--rwlock-read_depth == 0) + if (--rwlock-read_depth == 0) { + rwlock_release(rwlock-dep_map, 1, _RET_IP_); __rt_spin_unlock(rwlock-lock); + } } EXPORT_SYMBOL(rt_read_unlock); @@ -315,9 +317,10 @@ EXPORT_SYMBOL(rt_up_write); void rt_up_read(struct rw_semaphore *rwsem) { - rwsem_release(rwsem-dep_map, 1, _RET_IP_); - if (--rwsem-read_depth == 0) + if (--rwsem-read_depth == 0) { + rwsem_release(rwsem-dep_map, 1, _RET_IP_); rt_mutex_unlock(rwsem-lock); + } } EXPORT_SYMBOL(rt_up_read); @@ -366,15 +369,16 @@ int rt_down_read_trylock(struct rw_semaphore *rwsem) * but not when read_depth == 0 which means that the rwsem is * write locked. */ - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { ret = rt_mutex_trylock(rwsem-lock); - else if (!rwsem-read_depth) + if (ret) + rwsem_acquire(rwsem-dep_map, 0, 1, _RET_IP_); + } else if (!rwsem-read_depth) { ret = 0; + } - if (ret) { + if (ret) rwsem-read_depth++; - rwsem_acquire(rwsem-dep_map, 0, 1, _RET_IP_); - } return ret; } EXPORT_SYMBOL(rt_down_read_trylock); @@ -383,10 +387,10 @@ static void __rt_down_read(struct rw_semaphore *rwsem, int subclass) { struct rt_mutex *lock = rwsem-lock; - rwsem_acquire_read(rwsem-dep_map, subclass, 0, _RET_IP_); - - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { + rwsem_acquire(rwsem-dep_map, subclass, 0, _RET_IP_); rt_mutex_lock(rwsem-lock); + } rwsem-read_depth++; } -- 1.7.10.4 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH RT 5/8] rt: rwsem/rwlock: lockdep annotations
From: Thomas Gleixner rwlocks and rwsems on RT do not allow multiple readers. Annotate the lockdep acquire functions accordingly. Signed-off-by: Thomas Gleixner Cc: stable...@vger.kernel.org Signed-off-by: Steven Rostedt --- kernel/rt.c | 46 +- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/kernel/rt.c b/kernel/rt.c index 092d6b3..aa10504 100644 --- a/kernel/rt.c +++ b/kernel/rt.c @@ -216,15 +216,17 @@ int __lockfunc rt_read_trylock(rwlock_t *rwlock) * write locked. */ migrate_disable(); - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { ret = rt_mutex_trylock(lock); - else if (!rwlock->read_depth) + if (ret) + rwlock_acquire(>dep_map, 0, 1, _RET_IP_); + } else if (!rwlock->read_depth) { ret = 0; + } - if (ret) { + if (ret) rwlock->read_depth++; - rwlock_acquire_read(>dep_map, 0, 1, _RET_IP_); - } else + else migrate_enable(); return ret; @@ -242,13 +244,13 @@ void __lockfunc rt_read_lock(rwlock_t *rwlock) { struct rt_mutex *lock = >lock; - rwlock_acquire_read(>dep_map, 0, 0, _RET_IP_); - /* * recursive read locks succeed when current owns the lock */ - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { + rwlock_acquire(>dep_map, 0, 0, _RET_IP_); __rt_spin_lock(lock); + } rwlock->read_depth++; } @@ -264,11 +266,11 @@ EXPORT_SYMBOL(rt_write_unlock); void __lockfunc rt_read_unlock(rwlock_t *rwlock) { - rwlock_release(>dep_map, 1, _RET_IP_); - /* Release the lock only when read_depth is down to 0 */ - if (--rwlock->read_depth == 0) + if (--rwlock->read_depth == 0) { + rwlock_release(>dep_map, 1, _RET_IP_); __rt_spin_unlock(>lock); + } } EXPORT_SYMBOL(rt_read_unlock); @@ -315,9 +317,10 @@ EXPORT_SYMBOL(rt_up_write); void rt_up_read(struct rw_semaphore *rwsem) { - rwsem_release(>dep_map, 1, _RET_IP_); - if (--rwsem->read_depth == 0) + if (--rwsem->read_depth == 0) { + rwsem_release(>dep_map, 1, _RET_IP_); rt_mutex_unlock(>lock); + } } EXPORT_SYMBOL(rt_up_read); @@ -366,15 +369,16 @@ int rt_down_read_trylock(struct rw_semaphore *rwsem) * but not when read_depth == 0 which means that the rwsem is * write locked. */ - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { ret = rt_mutex_trylock(>lock); - else if (!rwsem->read_depth) + if (ret) + rwsem_acquire(>dep_map, 0, 1, _RET_IP_); + } else if (!rwsem->read_depth) { ret = 0; + } - if (ret) { + if (ret) rwsem->read_depth++; - rwsem_acquire(>dep_map, 0, 1, _RET_IP_); - } return ret; } EXPORT_SYMBOL(rt_down_read_trylock); @@ -383,10 +387,10 @@ static void __rt_down_read(struct rw_semaphore *rwsem, int subclass) { struct rt_mutex *lock = >lock; - rwsem_acquire_read(>dep_map, subclass, 0, _RET_IP_); - - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { + rwsem_acquire(>dep_map, subclass, 0, _RET_IP_); rt_mutex_lock(>lock); + } rwsem->read_depth++; } -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH RT 5/8] rt: rwsem/rwlock: lockdep annotations
From: Thomas Gleixner t...@linutronix.de rwlocks and rwsems on RT do not allow multiple readers. Annotate the lockdep acquire functions accordingly. Signed-off-by: Thomas Gleixner t...@linutronix.de Cc: stable...@vger.kernel.org Signed-off-by: Steven Rostedt rost...@goodmis.org --- kernel/rt.c | 46 +- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/kernel/rt.c b/kernel/rt.c index 092d6b3..aa10504 100644 --- a/kernel/rt.c +++ b/kernel/rt.c @@ -216,15 +216,17 @@ int __lockfunc rt_read_trylock(rwlock_t *rwlock) * write locked. */ migrate_disable(); - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { ret = rt_mutex_trylock(lock); - else if (!rwlock-read_depth) + if (ret) + rwlock_acquire(rwlock-dep_map, 0, 1, _RET_IP_); + } else if (!rwlock-read_depth) { ret = 0; + } - if (ret) { + if (ret) rwlock-read_depth++; - rwlock_acquire_read(rwlock-dep_map, 0, 1, _RET_IP_); - } else + else migrate_enable(); return ret; @@ -242,13 +244,13 @@ void __lockfunc rt_read_lock(rwlock_t *rwlock) { struct rt_mutex *lock = rwlock-lock; - rwlock_acquire_read(rwlock-dep_map, 0, 0, _RET_IP_); - /* * recursive read locks succeed when current owns the lock */ - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { + rwlock_acquire(rwlock-dep_map, 0, 0, _RET_IP_); __rt_spin_lock(lock); + } rwlock-read_depth++; } @@ -264,11 +266,11 @@ EXPORT_SYMBOL(rt_write_unlock); void __lockfunc rt_read_unlock(rwlock_t *rwlock) { - rwlock_release(rwlock-dep_map, 1, _RET_IP_); - /* Release the lock only when read_depth is down to 0 */ - if (--rwlock-read_depth == 0) + if (--rwlock-read_depth == 0) { + rwlock_release(rwlock-dep_map, 1, _RET_IP_); __rt_spin_unlock(rwlock-lock); + } } EXPORT_SYMBOL(rt_read_unlock); @@ -315,9 +317,10 @@ EXPORT_SYMBOL(rt_up_write); void rt_up_read(struct rw_semaphore *rwsem) { - rwsem_release(rwsem-dep_map, 1, _RET_IP_); - if (--rwsem-read_depth == 0) + if (--rwsem-read_depth == 0) { + rwsem_release(rwsem-dep_map, 1, _RET_IP_); rt_mutex_unlock(rwsem-lock); + } } EXPORT_SYMBOL(rt_up_read); @@ -366,15 +369,16 @@ int rt_down_read_trylock(struct rw_semaphore *rwsem) * but not when read_depth == 0 which means that the rwsem is * write locked. */ - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { ret = rt_mutex_trylock(rwsem-lock); - else if (!rwsem-read_depth) + if (ret) + rwsem_acquire(rwsem-dep_map, 0, 1, _RET_IP_); + } else if (!rwsem-read_depth) { ret = 0; + } - if (ret) { + if (ret) rwsem-read_depth++; - rwsem_acquire(rwsem-dep_map, 0, 1, _RET_IP_); - } return ret; } EXPORT_SYMBOL(rt_down_read_trylock); @@ -383,10 +387,10 @@ static void __rt_down_read(struct rw_semaphore *rwsem, int subclass) { struct rt_mutex *lock = rwsem-lock; - rwsem_acquire_read(rwsem-dep_map, subclass, 0, _RET_IP_); - - if (rt_mutex_owner(lock) != current) + if (rt_mutex_owner(lock) != current) { + rwsem_acquire(rwsem-dep_map, subclass, 0, _RET_IP_); rt_mutex_lock(rwsem-lock); + } rwsem-read_depth++; } -- 1.7.10.4 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/