hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
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,6 +30,7 @@
2930 struct rb_node pi_tree_entry;
3031 struct task_struct *task;
3132 struct rt_mutex *lock;
33
+ bool savestate;
3234 #ifdef CONFIG_DEBUG_RT_MUTEXES
3335 unsigned long ip;
3436 struct pid *deadlock_task_pid;
....@@ -130,11 +132,14 @@
130132 /*
131133 * PI-futex support (proxy locking functions, etc.):
132134 */
135
+#define PI_WAKEUP_INPROGRESS ((struct rt_mutex_waiter *) 1)
136
+#define PI_REQUEUE_INPROGRESS ((struct rt_mutex_waiter *) 2)
137
+
133138 extern struct task_struct *rt_mutex_next_owner(struct rt_mutex *lock);
134139 extern void rt_mutex_init_proxy_locked(struct rt_mutex *lock,
135140 struct task_struct *proxy_owner);
136141 extern void rt_mutex_proxy_unlock(struct rt_mutex *lock);
137
-extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter);
142
+extern void rt_mutex_init_waiter(struct rt_mutex_waiter *waiter, bool savetate);
138143 extern int __rt_mutex_start_proxy_lock(struct rt_mutex *lock,
139144 struct rt_mutex_waiter *waiter,
140145 struct task_struct *task);
....@@ -152,9 +157,27 @@
152157
153158 extern void rt_mutex_futex_unlock(struct rt_mutex *lock);
154159 extern bool __rt_mutex_futex_unlock(struct rt_mutex *lock,
155
- struct wake_q_head *wqh);
160
+ struct wake_q_head *wqh,
161
+ struct wake_q_head *wq_sleeper);
156162
157
-extern void rt_mutex_postunlock(struct wake_q_head *wake_q);
163
+extern void rt_mutex_postunlock(struct wake_q_head *wake_q,
164
+ struct wake_q_head *wake_sleeper_q);
165
+
166
+/* RW semaphore special interface */
167
+struct ww_acquire_ctx;
168
+
169
+extern int __rt_mutex_lock_state(struct rt_mutex *lock, int state);
170
+extern int __rt_mutex_trylock(struct rt_mutex *lock);
171
+extern void __rt_mutex_unlock(struct rt_mutex *lock);
172
+int __sched rt_mutex_slowlock_locked(struct rt_mutex *lock, int state,
173
+ struct hrtimer_sleeper *timeout,
174
+ enum rtmutex_chainwalk chwalk,
175
+ struct ww_acquire_ctx *ww_ctx,
176
+ struct rt_mutex_waiter *waiter);
177
+void __sched rt_spin_lock_slowlock_locked(struct rt_mutex *lock,
178
+ struct rt_mutex_waiter *waiter,
179
+ unsigned long flags);
180
+void __sched rt_spin_lock_slowunlock(struct rt_mutex *lock);
158181
159182 #ifdef CONFIG_DEBUG_RT_MUTEXES
160183 # include "rtmutex-debug.h"