| Subject: rt/locking: Simplify rt rwlock |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Fri, 28 Jul 2017 15:05:51 +0200 |
| |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| --- |
| include/linux/rwlock_rt.h | 21 +++++++++++++-------- |
| kernel/locking/rt.c | 23 ++--------------------- |
| 2 files changed, 15 insertions(+), 29 deletions(-) |
| |
| --- a/include/linux/rwlock_rt.h |
| +++ b/include/linux/rwlock_rt.h |
| @@ -9,37 +9,42 @@ |
| do { \ |
| static struct lock_class_key __key; \ |
| \ |
| - rt_mutex_init(&(rwl)->lock); \ |
| __rt_rwlock_init(rwl, #rwl, &__key); \ |
| } while (0) |
| |
| extern void __lockfunc rt_write_lock(rwlock_t *rwlock); |
| extern void __lockfunc rt_read_lock(rwlock_t *rwlock); |
| extern int __lockfunc rt_write_trylock(rwlock_t *rwlock); |
| -extern int __lockfunc rt_write_trylock_irqsave(rwlock_t *trylock, unsigned long *flags); |
| extern int __lockfunc rt_read_trylock(rwlock_t *rwlock); |
| extern void __lockfunc rt_write_unlock(rwlock_t *rwlock); |
| extern void __lockfunc rt_read_unlock(rwlock_t *rwlock); |
| -extern unsigned long __lockfunc rt_write_lock_irqsave(rwlock_t *rwlock); |
| -extern unsigned long __lockfunc rt_read_lock_irqsave(rwlock_t *rwlock); |
| extern void __rt_rwlock_init(rwlock_t *rwlock, char *name, struct lock_class_key *key); |
| |
| #define read_trylock(lock) __cond_lock(lock, rt_read_trylock(lock)) |
| #define write_trylock(lock) __cond_lock(lock, rt_write_trylock(lock)) |
| |
| -#define write_trylock_irqsave(lock, flags) \ |
| - __cond_lock(lock, rt_write_trylock_irqsave(lock, &flags)) |
| +static inline int __write_trylock_rt_irqsave(rwlock_t *lock, unsigned long *flags) |
| +{ |
| + /* XXX ARCH_IRQ_ENABLED */ |
| + *flags = 0; |
| + return rt_write_trylock(lock); |
| +} |
| + |
| +#define write_trylock_irqsave(lock, flags) \ |
| + __cond_lock(lock, __write_trylock_rt_irqsave(lock, &(flags))) |
| |
| #define read_lock_irqsave(lock, flags) \ |
| do { \ |
| typecheck(unsigned long, flags); \ |
| - flags = rt_read_lock_irqsave(lock); \ |
| + rt_read_lock(lock); \ |
| + flags = 0; \ |
| } while (0) |
| |
| #define write_lock_irqsave(lock, flags) \ |
| do { \ |
| typecheck(unsigned long, flags); \ |
| - flags = rt_write_lock_irqsave(lock); \ |
| + rt_write_lock(lock); \ |
| + flags = 0; \ |
| } while (0) |
| |
| #define read_lock(lock) rt_read_lock(lock) |
| --- a/kernel/locking/rt.c |
| +++ b/kernel/locking/rt.c |
| @@ -215,13 +215,6 @@ int __lockfunc rt_write_trylock(rwlock_t |
| } |
| EXPORT_SYMBOL(rt_write_trylock); |
| |
| -int __lockfunc rt_write_trylock_irqsave(rwlock_t *rwlock, unsigned long *flags) |
| -{ |
| - *flags = 0; |
| - return rt_write_trylock(rwlock); |
| -} |
| -EXPORT_SYMBOL(rt_write_trylock_irqsave); |
| - |
| int __lockfunc rt_read_trylock(rwlock_t *rwlock) |
| { |
| struct rt_mutex *lock = &rwlock->lock; |
| @@ -273,22 +266,10 @@ void __lockfunc rt_read_unlock(rwlock_t |
| } |
| EXPORT_SYMBOL(rt_read_unlock); |
| |
| -unsigned long __lockfunc rt_write_lock_irqsave(rwlock_t *rwlock) |
| -{ |
| - rt_write_lock(rwlock); |
| - return 0; |
| -} |
| -EXPORT_SYMBOL(rt_write_lock_irqsave); |
| - |
| -unsigned long __lockfunc rt_read_lock_irqsave(rwlock_t *rwlock) |
| -{ |
| - rt_read_lock(rwlock); |
| - return 0; |
| -} |
| -EXPORT_SYMBOL(rt_read_lock_irqsave); |
| - |
| void __rt_rwlock_init(rwlock_t *rwlock, char *name, struct lock_class_key *key) |
| { |
| + rt_mutex_init(&rwlock->lock); |
| + |
| #ifdef CONFIG_DEBUG_LOCK_ALLOC |
| /* |
| * Make sure we are not reinitializing a held lock: |