blob: 9e9de5eb40ce42859aa05000c146187357481c59 [file] [log] [blame]
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: