2018-08-27 14:32:32 +00:00
|
|
|
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
|
|
Date: Thu, 16 Nov 2017 16:48:48 +0100
|
2019-11-25 00:04:39 +00:00
|
|
|
Subject: [PATCH 153/290] locking/rtmutex: re-init the wait_lock in
|
2018-08-27 14:32:32 +00:00
|
|
|
rt_mutex_init_proxy_locked()
|
2019-11-25 00:04:39 +00:00
|
|
|
Origin: https://git.kernel.org/cgit/linux/kernel/git/rt/linux-stable-rt.git/commit?id=361d72a145de18a02d4072fead2642a386755146
|
2018-08-27 14:32:32 +00:00
|
|
|
|
|
|
|
We could provide a key-class for the lockdep (and fixup all callers) or
|
|
|
|
move the init to all callers (like it was) in order to avoid lockdep
|
|
|
|
seeing a double-lock of the wait_lock.
|
|
|
|
|
|
|
|
Reported-by: Fernando Lopez-Lezcano <nando@ccrma.Stanford.EDU>
|
|
|
|
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
|
|
---
|
2019-04-08 23:49:20 +00:00
|
|
|
kernel/locking/rtmutex.c | 8 ++++++++
|
2018-08-27 14:32:32 +00:00
|
|
|
1 file changed, 8 insertions(+)
|
|
|
|
|
2019-04-08 23:49:20 +00:00
|
|
|
diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c
|
|
|
|
index b38c3a92dce8..94788662b2f2 100644
|
2018-08-27 14:32:32 +00:00
|
|
|
--- a/kernel/locking/rtmutex.c
|
|
|
|
+++ b/kernel/locking/rtmutex.c
|
2019-04-08 23:49:20 +00:00
|
|
|
@@ -2281,6 +2281,14 @@ void rt_mutex_init_proxy_locked(struct rt_mutex *lock,
|
2018-08-27 14:32:32 +00:00
|
|
|
struct task_struct *proxy_owner)
|
|
|
|
{
|
|
|
|
__rt_mutex_init(lock, NULL, NULL);
|
|
|
|
+#ifdef CONFIG_DEBUG_SPINLOCK
|
|
|
|
+ /*
|
|
|
|
+ * get another key class for the wait_lock. LOCK_PI and UNLOCK_PI is
|
|
|
|
+ * holding the ->wait_lock of the proxy_lock while unlocking a sleeping
|
|
|
|
+ * lock.
|
|
|
|
+ */
|
|
|
|
+ raw_spin_lock_init(&lock->wait_lock);
|
|
|
|
+#endif
|
|
|
|
debug_rt_mutex_proxy_lock(lock, proxy_owner);
|
|
|
|
rt_mutex_set_owner(lock, proxy_owner);
|
|
|
|
}
|