hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/kernel/locking/rtmutex_common.h
....@@ -15,6 +15,7 @@
1515
1616 #include <linux/rtmutex.h>
1717 #include <linux/sched/wake_q.h>
18
+#include <linux/sched/debug.h>
1819
1920 /*
2021 * This is the control structure for tasks blocked on a rt_mutex,
....@@ -29,12 +30,8 @@
2930 struct rb_node pi_tree_entry;
3031 struct task_struct *task;
3132 struct rt_mutex *lock;
32
-#ifdef CONFIG_DEBUG_RT_MUTEXES
33
- unsigned long ip;
34
- struct pid *deadlock_task_pid;
35
- struct rt_mutex *deadlock_lock;
36
-#endif
3733 int prio;
34
+ bool savestate;
3835 u64 deadline;
3936 };
4037
....@@ -130,11 +127,14 @@
130127 /*
131128 * PI-futex support (proxy locking functions, etc.):
132129 */
130
+#define PI_WAKEUP_INPROGRESS ((struct rt_mutex_waiter *) 1)
131
+#define PI_REQUEUE_INPROGRESS ((struct rt_mutex_waiter *) 2)
132
+
133133 extern struct task_struct *rt_mutex_next_owner(struct rt_mutex *lock);
134134 extern void rt_mutex_init_proxy_locked(struct rt_mutex *lock,
135135 struct task_struct *proxy_owner);
136136 extern void rt_mutex_proxy_unlock(struct rt_mutex *lock);
137
-extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter);
137
+extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter, bool savetate);
138138 extern int __rt_mutex_start_proxy_lock(struct rt_mutex *lock,
139139 struct rt_mutex_waiter *waiter,
140140 struct task_struct *task);
....@@ -152,9 +152,27 @@
152152
153153 extern void rt_mutex_futex_unlock(struct rt_mutex *lock);
154154 extern bool __rt_mutex_futex_unlock(struct rt_mutex *lock,
155
- struct wake_q_head *wqh);
155
+ struct wake_q_head *wqh,
156
+ struct wake_q_head *wq_sleeper);
156157
157
-extern void rt_mutex_postunlock(struct wake_q_head *wake_q);
158
+extern void rt_mutex_postunlock(struct wake_q_head *wake_q,
159
+ struct wake_q_head *wake_sleeper_q);
160
+
161
+/* RW semaphore special interface */
162
+struct ww_acquire_ctx;
163
+
164
+extern int __rt_mutex_lock_state(struct rt_mutex *lock, int state);
165
+extern int __rt_mutex_trylock(struct rt_mutex *lock);
166
+extern void __rt_mutex_unlock(struct rt_mutex *lock);
167
+int __sched rt_mutex_slowlock_locked(struct rt_mutex *lock, int state,
168
+ struct hrtimer_sleeper *timeout,
169
+ enum rtmutex_chainwalk chwalk,
170
+ struct ww_acquire_ctx *ww_ctx,
171
+ struct rt_mutex_waiter *waiter);
172
+void __sched rt_spin_lock_slowlock_locked(struct rt_mutex *lock,
173
+ struct rt_mutex_waiter *waiter,
174
+ unsigned long flags);
175
+void __sched rt_spin_lock_slowunlock(struct rt_mutex *lock);
158176
159177 #ifdef CONFIG_DEBUG_RT_MUTEXES
160178 # include "rtmutex-debug.h"