summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0152-locking-rtmutex-re-init-the-wait_lock-in-rt_mutex_in.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0152-locking-rtmutex-re-init-the-wait_lock-in-rt_mutex_in.patch')
-rw-r--r--debian/patches-rt/0152-locking-rtmutex-re-init-the-wait_lock-in-rt_mutex_in.patch39
1 files changed, 39 insertions, 0 deletions
diff --git a/debian/patches-rt/0152-locking-rtmutex-re-init-the-wait_lock-in-rt_mutex_in.patch b/debian/patches-rt/0152-locking-rtmutex-re-init-the-wait_lock-in-rt_mutex_in.patch
new file mode 100644
index 000000000..d3b273dbb
--- /dev/null
+++ b/debian/patches-rt/0152-locking-rtmutex-re-init-the-wait_lock-in-rt_mutex_in.patch
@@ -0,0 +1,39 @@
+From b30a729eace6fa1b27e10316b55cfe2d0c7dbf9a Mon Sep 17 00:00:00 2001
+From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+Date: Thu, 16 Nov 2017 16:48:48 +0100
+Subject: [PATCH 152/347] locking/rtmutex: re-init the wait_lock in
+ rt_mutex_init_proxy_locked()
+Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.246-rt110.tar.xz
+
+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>
+---
+ kernel/locking/rtmutex.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c
+index 721e3a4916d9..11bcae2184c4 100644
+--- a/kernel/locking/rtmutex.c
++++ b/kernel/locking/rtmutex.c
+@@ -2281,6 +2281,14 @@ void rt_mutex_init_proxy_locked(struct rt_mutex *lock,
+ 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);
+ }
+--
+2.36.1
+