~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/kernel/locking/rtmutex.c

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-only
  2 /*
  3  * RT-Mutexes: simple blocking mutual exclusion locks with PI support
  4  *
  5  * started by Ingo Molnar and Thomas Gleixner.
  6  *
  7  *  Copyright (C) 2004-2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
  8  *  Copyright (C) 2005-2006 Timesys Corp., Thomas Gleixner <tglx@timesys.com>
  9  *  Copyright (C) 2005 Kihon Technologies Inc., Steven Rostedt
 10  *  Copyright (C) 2006 Esben Nielsen
 11  * Adaptive Spinlocks:
 12  *  Copyright (C) 2008 Novell, Inc., Gregory Haskins, Sven Dietrich,
 13  *                                   and Peter Morreale,
 14  * Adaptive Spinlocks simplification:
 15  *  Copyright (C) 2008 Red Hat, Inc., Steven Rostedt <srostedt@redhat.com>
 16  *
 17  *  See Documentation/locking/rt-mutex-design.rst for details.
 18  */
 19 #include <linux/sched.h>
 20 #include <linux/sched/debug.h>
 21 #include <linux/sched/deadline.h>
 22 #include <linux/sched/signal.h>
 23 #include <linux/sched/rt.h>
 24 #include <linux/sched/wake_q.h>
 25 #include <linux/ww_mutex.h>
 26 
 27 #include <trace/events/lock.h>
 28 
 29 #include "rtmutex_common.h"
 30 
 31 #ifndef WW_RT
 32 # define build_ww_mutex()       (false)
 33 # define ww_container_of(rtm)   NULL
 34 
 35 static inline int __ww_mutex_add_waiter(struct rt_mutex_waiter *waiter,
 36                                         struct rt_mutex *lock,
 37                                         struct ww_acquire_ctx *ww_ctx)
 38 {
 39         return 0;
 40 }
 41 
 42 static inline void __ww_mutex_check_waiters(struct rt_mutex *lock,
 43                                             struct ww_acquire_ctx *ww_ctx)
 44 {
 45 }
 46 
 47 static inline void ww_mutex_lock_acquired(struct ww_mutex *lock,
 48                                           struct ww_acquire_ctx *ww_ctx)
 49 {
 50 }
 51 
 52 static inline int __ww_mutex_check_kill(struct rt_mutex *lock,
 53                                         struct rt_mutex_waiter *waiter,
 54                                         struct ww_acquire_ctx *ww_ctx)
 55 {
 56         return 0;
 57 }
 58 
 59 #else
 60 # define build_ww_mutex()       (true)
 61 # define ww_container_of(rtm)   container_of(rtm, struct ww_mutex, base)
 62 # include "ww_mutex.h"
 63 #endif
 64 
 65 /*
 66  * lock->owner state tracking:
 67  *
 68  * lock->owner holds the task_struct pointer of the owner. Bit 0
 69  * is used to keep track of the "lock has waiters" state.
 70  *
 71  * owner        bit0
 72  * NULL         0       lock is free (fast acquire possible)
 73  * NULL         1       lock is free and has waiters and the top waiter
 74  *                              is going to take the lock*
 75  * taskpointer  0       lock is held (fast release possible)
 76  * taskpointer  1       lock is held and has waiters**
 77  *
 78  * The fast atomic compare exchange based acquire and release is only
 79  * possible when bit 0 of lock->owner is 0.
 80  *
 81  * (*) It also can be a transitional state when grabbing the lock
 82  * with ->wait_lock is held. To prevent any fast path cmpxchg to the lock,
 83  * we need to set the bit0 before looking at the lock, and the owner may be
 84  * NULL in this small time, hence this can be a transitional state.
 85  *
 86  * (**) There is a small time when bit 0 is set but there are no
 87  * waiters. This can happen when grabbing the lock in the slow path.
 88  * To prevent a cmpxchg of the owner releasing the lock, we need to
 89  * set this bit before looking at the lock.
 90  */
 91 
 92 static __always_inline struct task_struct *
 93 rt_mutex_owner_encode(struct rt_mutex_base *lock, struct task_struct *owner)
 94 {
 95         unsigned long val = (unsigned long)owner;
 96 
 97         if (rt_mutex_has_waiters(lock))
 98                 val |= RT_MUTEX_HAS_WAITERS;
 99 
100         return (struct task_struct *)val;
101 }
102 
103 static __always_inline void
104 rt_mutex_set_owner(struct rt_mutex_base *lock, struct task_struct *owner)
105 {
106         /*
107          * lock->wait_lock is held but explicit acquire semantics are needed
108          * for a new lock owner so WRITE_ONCE is insufficient.
109          */
110         xchg_acquire(&lock->owner, rt_mutex_owner_encode(lock, owner));
111 }
112 
113 static __always_inline void rt_mutex_clear_owner(struct rt_mutex_base *lock)
114 {
115         /* lock->wait_lock is held so the unlock provides release semantics. */
116         WRITE_ONCE(lock->owner, rt_mutex_owner_encode(lock, NULL));
117 }
118 
119 static __always_inline void clear_rt_mutex_waiters(struct rt_mutex_base *lock)
120 {
121         lock->owner = (struct task_struct *)
122                         ((unsigned long)lock->owner & ~RT_MUTEX_HAS_WAITERS);
123 }
124 
125 static __always_inline void
126 fixup_rt_mutex_waiters(struct rt_mutex_base *lock, bool acquire_lock)
127 {
128         unsigned long owner, *p = (unsigned long *) &lock->owner;
129 
130         if (rt_mutex_has_waiters(lock))
131                 return;
132 
133         /*
134          * The rbtree has no waiters enqueued, now make sure that the
135          * lock->owner still has the waiters bit set, otherwise the
136          * following can happen:
137          *
138          * CPU 0        CPU 1           CPU2
139          * l->owner=T1
140          *              rt_mutex_lock(l)
141          *              lock(l->lock)
142          *              l->owner = T1 | HAS_WAITERS;
143          *              enqueue(T2)
144          *              boost()
145          *                unlock(l->lock)
146          *              block()
147          *
148          *                              rt_mutex_lock(l)
149          *                              lock(l->lock)
150          *                              l->owner = T1 | HAS_WAITERS;
151          *                              enqueue(T3)
152          *                              boost()
153          *                                unlock(l->lock)
154          *                              block()
155          *              signal(->T2)    signal(->T3)
156          *              lock(l->lock)
157          *              dequeue(T2)
158          *              deboost()
159          *                unlock(l->lock)
160          *                              lock(l->lock)
161          *                              dequeue(T3)
162          *                               ==> wait list is empty
163          *                              deboost()
164          *                               unlock(l->lock)
165          *              lock(l->lock)
166          *              fixup_rt_mutex_waiters()
167          *                if (wait_list_empty(l) {
168          *                  l->owner = owner
169          *                  owner = l->owner & ~HAS_WAITERS;
170          *                    ==> l->owner = T1
171          *                }
172          *                              lock(l->lock)
173          * rt_mutex_unlock(l)           fixup_rt_mutex_waiters()
174          *                                if (wait_list_empty(l) {
175          *                                  owner = l->owner & ~HAS_WAITERS;
176          * cmpxchg(l->owner, T1, NULL)
177          *  ===> Success (l->owner = NULL)
178          *
179          *                                  l->owner = owner
180          *                                    ==> l->owner = T1
181          *                                }
182          *
183          * With the check for the waiter bit in place T3 on CPU2 will not
184          * overwrite. All tasks fiddling with the waiters bit are
185          * serialized by l->lock, so nothing else can modify the waiters
186          * bit. If the bit is set then nothing can change l->owner either
187          * so the simple RMW is safe. The cmpxchg() will simply fail if it
188          * happens in the middle of the RMW because the waiters bit is
189          * still set.
190          */
191         owner = READ_ONCE(*p);
192         if (owner & RT_MUTEX_HAS_WAITERS) {
193                 /*
194                  * See rt_mutex_set_owner() and rt_mutex_clear_owner() on
195                  * why xchg_acquire() is used for updating owner for
196                  * locking and WRITE_ONCE() for unlocking.
197                  *
198                  * WRITE_ONCE() would work for the acquire case too, but
199                  * in case that the lock acquisition failed it might
200                  * force other lockers into the slow path unnecessarily.
201                  */
202                 if (acquire_lock)
203                         xchg_acquire(p, owner & ~RT_MUTEX_HAS_WAITERS);
204                 else
205                         WRITE_ONCE(*p, owner & ~RT_MUTEX_HAS_WAITERS);
206         }
207 }
208 
209 /*
210  * We can speed up the acquire/release, if there's no debugging state to be
211  * set up.
212  */
213 #ifndef CONFIG_DEBUG_RT_MUTEXES
214 static __always_inline bool rt_mutex_cmpxchg_acquire(struct rt_mutex_base *lock,
215                                                      struct task_struct *old,
216                                                      struct task_struct *new)
217 {
218         return try_cmpxchg_acquire(&lock->owner, &old, new);
219 }
220 
221 static __always_inline bool rt_mutex_try_acquire(struct rt_mutex_base *lock)
222 {
223         return rt_mutex_cmpxchg_acquire(lock, NULL, current);
224 }
225 
226 static __always_inline bool rt_mutex_cmpxchg_release(struct rt_mutex_base *lock,
227                                                      struct task_struct *old,
228                                                      struct task_struct *new)
229 {
230         return try_cmpxchg_release(&lock->owner, &old, new);
231 }
232 
233 /*
234  * Callers must hold the ->wait_lock -- which is the whole purpose as we force
235  * all future threads that attempt to [Rmw] the lock to the slowpath. As such
236  * relaxed semantics suffice.
237  */
238 static __always_inline void mark_rt_mutex_waiters(struct rt_mutex_base *lock)
239 {
240         unsigned long *p = (unsigned long *) &lock->owner;
241         unsigned long owner, new;
242 
243         owner = READ_ONCE(*p);
244         do {
245                 new = owner | RT_MUTEX_HAS_WAITERS;
246         } while (!try_cmpxchg_relaxed(p, &owner, new));
247 
248         /*
249          * The cmpxchg loop above is relaxed to avoid back-to-back ACQUIRE
250          * operations in the event of contention. Ensure the successful
251          * cmpxchg is visible.
252          */
253         smp_mb__after_atomic();
254 }
255 
256 /*
257  * Safe fastpath aware unlock:
258  * 1) Clear the waiters bit
259  * 2) Drop lock->wait_lock
260  * 3) Try to unlock the lock with cmpxchg
261  */
262 static __always_inline bool unlock_rt_mutex_safe(struct rt_mutex_base *lock,
263                                                  unsigned long flags)
264         __releases(lock->wait_lock)
265 {
266         struct task_struct *owner = rt_mutex_owner(lock);
267 
268         clear_rt_mutex_waiters(lock);
269         raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
270         /*
271          * If a new waiter comes in between the unlock and the cmpxchg
272          * we have two situations:
273          *
274          * unlock(wait_lock);
275          *                                      lock(wait_lock);
276          * cmpxchg(p, owner, 0) == owner
277          *                                      mark_rt_mutex_waiters(lock);
278          *                                      acquire(lock);
279          * or:
280          *
281          * unlock(wait_lock);
282          *                                      lock(wait_lock);
283          *                                      mark_rt_mutex_waiters(lock);
284          *
285          * cmpxchg(p, owner, 0) != owner
286          *                                      enqueue_waiter();
287          *                                      unlock(wait_lock);
288          * lock(wait_lock);
289          * wake waiter();
290          * unlock(wait_lock);
291          *                                      lock(wait_lock);
292          *                                      acquire(lock);
293          */
294         return rt_mutex_cmpxchg_release(lock, owner, NULL);
295 }
296 
297 #else
298 static __always_inline bool rt_mutex_cmpxchg_acquire(struct rt_mutex_base *lock,
299                                                      struct task_struct *old,
300                                                      struct task_struct *new)
301 {
302         return false;
303 
304 }
305 
306 static int __sched rt_mutex_slowtrylock(struct rt_mutex_base *lock);
307 
308 static __always_inline bool rt_mutex_try_acquire(struct rt_mutex_base *lock)
309 {
310         /*
311          * With debug enabled rt_mutex_cmpxchg trylock() will always fail.
312          *
313          * Avoid unconditionally taking the slow path by using
314          * rt_mutex_slow_trylock() which is covered by the debug code and can
315          * acquire a non-contended rtmutex.
316          */
317         return rt_mutex_slowtrylock(lock);
318 }
319 
320 static __always_inline bool rt_mutex_cmpxchg_release(struct rt_mutex_base *lock,
321                                                      struct task_struct *old,
322                                                      struct task_struct *new)
323 {
324         return false;
325 }
326 
327 static __always_inline void mark_rt_mutex_waiters(struct rt_mutex_base *lock)
328 {
329         lock->owner = (struct task_struct *)
330                         ((unsigned long)lock->owner | RT_MUTEX_HAS_WAITERS);
331 }
332 
333 /*
334  * Simple slow path only version: lock->owner is protected by lock->wait_lock.
335  */
336 static __always_inline bool unlock_rt_mutex_safe(struct rt_mutex_base *lock,
337                                                  unsigned long flags)
338         __releases(lock->wait_lock)
339 {
340         lock->owner = NULL;
341         raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
342         return true;
343 }
344 #endif
345 
346 static __always_inline int __waiter_prio(struct task_struct *task)
347 {
348         int prio = task->prio;
349 
350         if (!rt_prio(prio))
351                 return DEFAULT_PRIO;
352 
353         return prio;
354 }
355 
356 /*
357  * Update the waiter->tree copy of the sort keys.
358  */
359 static __always_inline void
360 waiter_update_prio(struct rt_mutex_waiter *waiter, struct task_struct *task)
361 {
362         lockdep_assert_held(&waiter->lock->wait_lock);
363         lockdep_assert(RB_EMPTY_NODE(&waiter->tree.entry));
364 
365         waiter->tree.prio = __waiter_prio(task);
366         waiter->tree.deadline = task->dl.deadline;
367 }
368 
369 /*
370  * Update the waiter->pi_tree copy of the sort keys (from the tree copy).
371  */
372 static __always_inline void
373 waiter_clone_prio(struct rt_mutex_waiter *waiter, struct task_struct *task)
374 {
375         lockdep_assert_held(&waiter->lock->wait_lock);
376         lockdep_assert_held(&task->pi_lock);
377         lockdep_assert(RB_EMPTY_NODE(&waiter->pi_tree.entry));
378 
379         waiter->pi_tree.prio = waiter->tree.prio;
380         waiter->pi_tree.deadline = waiter->tree.deadline;
381 }
382 
383 /*
384  * Only use with rt_waiter_node_{less,equal}()
385  */
386 #define task_to_waiter_node(p)  \
387         &(struct rt_waiter_node){ .prio = __waiter_prio(p), .deadline = (p)->dl.deadline }
388 #define task_to_waiter(p)       \
389         &(struct rt_mutex_waiter){ .tree = *task_to_waiter_node(p) }
390 
391 static __always_inline int rt_waiter_node_less(struct rt_waiter_node *left,
392                                                struct rt_waiter_node *right)
393 {
394         if (left->prio < right->prio)
395                 return 1;
396 
397         /*
398          * If both waiters have dl_prio(), we check the deadlines of the
399          * associated tasks.
400          * If left waiter has a dl_prio(), and we didn't return 1 above,
401          * then right waiter has a dl_prio() too.
402          */
403         if (dl_prio(left->prio))
404                 return dl_time_before(left->deadline, right->deadline);
405 
406         return 0;
407 }
408 
409 static __always_inline int rt_waiter_node_equal(struct rt_waiter_node *left,
410                                                  struct rt_waiter_node *right)
411 {
412         if (left->prio != right->prio)
413                 return 0;
414 
415         /*
416          * If both waiters have dl_prio(), we check the deadlines of the
417          * associated tasks.
418          * If left waiter has a dl_prio(), and we didn't return 0 above,
419          * then right waiter has a dl_prio() too.
420          */
421         if (dl_prio(left->prio))
422                 return left->deadline == right->deadline;
423 
424         return 1;
425 }
426 
427 static inline bool rt_mutex_steal(struct rt_mutex_waiter *waiter,
428                                   struct rt_mutex_waiter *top_waiter)
429 {
430         if (rt_waiter_node_less(&waiter->tree, &top_waiter->tree))
431                 return true;
432 
433 #ifdef RT_MUTEX_BUILD_SPINLOCKS
434         /*
435          * Note that RT tasks are excluded from same priority (lateral)
436          * steals to prevent the introduction of an unbounded latency.
437          */
438         if (rt_prio(waiter->tree.prio) || dl_prio(waiter->tree.prio))
439                 return false;
440 
441         return rt_waiter_node_equal(&waiter->tree, &top_waiter->tree);
442 #else
443         return false;
444 #endif
445 }
446 
447 #define __node_2_waiter(node) \
448         rb_entry((node), struct rt_mutex_waiter, tree.entry)
449 
450 static __always_inline bool __waiter_less(struct rb_node *a, const struct rb_node *b)
451 {
452         struct rt_mutex_waiter *aw = __node_2_waiter(a);
453         struct rt_mutex_waiter *bw = __node_2_waiter(b);
454 
455         if (rt_waiter_node_less(&aw->tree, &bw->tree))
456                 return 1;
457 
458         if (!build_ww_mutex())
459                 return 0;
460 
461         if (rt_waiter_node_less(&bw->tree, &aw->tree))
462                 return 0;
463 
464         /* NOTE: relies on waiter->ww_ctx being set before insertion */
465         if (aw->ww_ctx) {
466                 if (!bw->ww_ctx)
467                         return 1;
468 
469                 return (signed long)(aw->ww_ctx->stamp -
470                                      bw->ww_ctx->stamp) < 0;
471         }
472 
473         return 0;
474 }
475 
476 static __always_inline void
477 rt_mutex_enqueue(struct rt_mutex_base *lock, struct rt_mutex_waiter *waiter)
478 {
479         lockdep_assert_held(&lock->wait_lock);
480 
481         rb_add_cached(&waiter->tree.entry, &lock->waiters, __waiter_less);
482 }
483 
484 static __always_inline void
485 rt_mutex_dequeue(struct rt_mutex_base *lock, struct rt_mutex_waiter *waiter)
486 {
487         lockdep_assert_held(&lock->wait_lock);
488 
489         if (RB_EMPTY_NODE(&waiter->tree.entry))
490                 return;
491 
492         rb_erase_cached(&waiter->tree.entry, &lock->waiters);
493         RB_CLEAR_NODE(&waiter->tree.entry);
494 }
495 
496 #define __node_2_rt_node(node) \
497         rb_entry((node), struct rt_waiter_node, entry)
498 
499 static __always_inline bool __pi_waiter_less(struct rb_node *a, const struct rb_node *b)
500 {
501         return rt_waiter_node_less(__node_2_rt_node(a), __node_2_rt_node(b));
502 }
503 
504 static __always_inline void
505 rt_mutex_enqueue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter)
506 {
507         lockdep_assert_held(&task->pi_lock);
508 
509         rb_add_cached(&waiter->pi_tree.entry, &task->pi_waiters, __pi_waiter_less);
510 }
511 
512 static __always_inline void
513 rt_mutex_dequeue_pi(struct task_struct *task, struct rt_mutex_waiter *waiter)
514 {
515         lockdep_assert_held(&task->pi_lock);
516 
517         if (RB_EMPTY_NODE(&waiter->pi_tree.entry))
518                 return;
519 
520         rb_erase_cached(&waiter->pi_tree.entry, &task->pi_waiters);
521         RB_CLEAR_NODE(&waiter->pi_tree.entry);
522 }
523 
524 static __always_inline void rt_mutex_adjust_prio(struct rt_mutex_base *lock,
525                                                  struct task_struct *p)
526 {
527         struct task_struct *pi_task = NULL;
528 
529         lockdep_assert_held(&lock->wait_lock);
530         lockdep_assert(rt_mutex_owner(lock) == p);
531         lockdep_assert_held(&p->pi_lock);
532 
533         if (task_has_pi_waiters(p))
534                 pi_task = task_top_pi_waiter(p)->task;
535 
536         rt_mutex_setprio(p, pi_task);
537 }
538 
539 /* RT mutex specific wake_q wrappers */
540 static __always_inline void rt_mutex_wake_q_add_task(struct rt_wake_q_head *wqh,
541                                                      struct task_struct *task,
542                                                      unsigned int wake_state)
543 {
544         if (IS_ENABLED(CONFIG_PREEMPT_RT) && wake_state == TASK_RTLOCK_WAIT) {
545                 if (IS_ENABLED(CONFIG_PROVE_LOCKING))
546                         WARN_ON_ONCE(wqh->rtlock_task);
547                 get_task_struct(task);
548                 wqh->rtlock_task = task;
549         } else {
550                 wake_q_add(&wqh->head, task);
551         }
552 }
553 
554 static __always_inline void rt_mutex_wake_q_add(struct rt_wake_q_head *wqh,
555                                                 struct rt_mutex_waiter *w)
556 {
557         rt_mutex_wake_q_add_task(wqh, w->task, w->wake_state);
558 }
559 
560 static __always_inline void rt_mutex_wake_up_q(struct rt_wake_q_head *wqh)
561 {
562         if (IS_ENABLED(CONFIG_PREEMPT_RT) && wqh->rtlock_task) {
563                 wake_up_state(wqh->rtlock_task, TASK_RTLOCK_WAIT);
564                 put_task_struct(wqh->rtlock_task);
565                 wqh->rtlock_task = NULL;
566         }
567 
568         if (!wake_q_empty(&wqh->head))
569                 wake_up_q(&wqh->head);
570 
571         /* Pairs with preempt_disable() in mark_wakeup_next_waiter() */
572         preempt_enable();
573 }
574 
575 /*
576  * Deadlock detection is conditional:
577  *
578  * If CONFIG_DEBUG_RT_MUTEXES=n, deadlock detection is only conducted
579  * if the detect argument is == RT_MUTEX_FULL_CHAINWALK.
580  *
581  * If CONFIG_DEBUG_RT_MUTEXES=y, deadlock detection is always
582  * conducted independent of the detect argument.
583  *
584  * If the waiter argument is NULL this indicates the deboost path and
585  * deadlock detection is disabled independent of the detect argument
586  * and the config settings.
587  */
588 static __always_inline bool
589 rt_mutex_cond_detect_deadlock(struct rt_mutex_waiter *waiter,
590                               enum rtmutex_chainwalk chwalk)
591 {
592         if (IS_ENABLED(CONFIG_DEBUG_RT_MUTEXES))
593                 return waiter != NULL;
594         return chwalk == RT_MUTEX_FULL_CHAINWALK;
595 }
596 
597 static __always_inline struct rt_mutex_base *task_blocked_on_lock(struct task_struct *p)
598 {
599         return p->pi_blocked_on ? p->pi_blocked_on->lock : NULL;
600 }
601 
602 /*
603  * Adjust the priority chain. Also used for deadlock detection.
604  * Decreases task's usage by one - may thus free the task.
605  *
606  * @task:       the task owning the mutex (owner) for which a chain walk is
607  *              probably needed
608  * @chwalk:     do we have to carry out deadlock detection?
609  * @orig_lock:  the mutex (can be NULL if we are walking the chain to recheck
610  *              things for a task that has just got its priority adjusted, and
611  *              is waiting on a mutex)
612  * @next_lock:  the mutex on which the owner of @orig_lock was blocked before
613  *              we dropped its pi_lock. Is never dereferenced, only used for
614  *              comparison to detect lock chain changes.
615  * @orig_waiter: rt_mutex_waiter struct for the task that has just donated
616  *              its priority to the mutex owner (can be NULL in the case
617  *              depicted above or if the top waiter is gone away and we are
618  *              actually deboosting the owner)
619  * @top_task:   the current top waiter
620  *
621  * Returns 0 or -EDEADLK.
622  *
623  * Chain walk basics and protection scope
624  *
625  * [R] refcount on task
626  * [Pn] task->pi_lock held
627  * [L] rtmutex->wait_lock held
628  *
629  * Normal locking order:
630  *
631  *   rtmutex->wait_lock
632  *     task->pi_lock
633  *
634  * Step Description                             Protected by
635  *      function arguments:
636  *      @task                                   [R]
637  *      @orig_lock if != NULL                   @top_task is blocked on it
638  *      @next_lock                              Unprotected. Cannot be
639  *                                              dereferenced. Only used for
640  *                                              comparison.
641  *      @orig_waiter if != NULL                 @top_task is blocked on it
642  *      @top_task                               current, or in case of proxy
643  *                                              locking protected by calling
644  *                                              code
645  *      again:
646  *        loop_sanity_check();
647  *      retry:
648  * [1]    lock(task->pi_lock);                  [R] acquire [P1]
649  * [2]    waiter = task->pi_blocked_on;         [P1]
650  * [3]    check_exit_conditions_1();            [P1]
651  * [4]    lock = waiter->lock;                  [P1]
652  * [5]    if (!try_lock(lock->wait_lock)) {     [P1] try to acquire [L]
653  *          unlock(task->pi_lock);              release [P1]
654  *          goto retry;
655  *        }
656  * [6]    check_exit_conditions_2();            [P1] + [L]
657  * [7]    requeue_lock_waiter(lock, waiter);    [P1] + [L]
658  * [8]    unlock(task->pi_lock);                release [P1]
659  *        put_task_struct(task);                release [R]
660  * [9]    check_exit_conditions_3();            [L]
661  * [10]   task = owner(lock);                   [L]
662  *        get_task_struct(task);                [L] acquire [R]
663  *        lock(task->pi_lock);                  [L] acquire [P2]
664  * [11]   requeue_pi_waiter(tsk, waiters(lock));[P2] + [L]
665  * [12]   check_exit_conditions_4();            [P2] + [L]
666  * [13]   unlock(task->pi_lock);                release [P2]
667  *        unlock(lock->wait_lock);              release [L]
668  *        goto again;
669  *
670  * Where P1 is the blocking task and P2 is the lock owner; going up one step
671  * the owner becomes the next blocked task etc..
672  *
673 *
674  */
675 static int __sched rt_mutex_adjust_prio_chain(struct task_struct *task,
676                                               enum rtmutex_chainwalk chwalk,
677                                               struct rt_mutex_base *orig_lock,
678                                               struct rt_mutex_base *next_lock,
679                                               struct rt_mutex_waiter *orig_waiter,
680                                               struct task_struct *top_task)
681 {
682         struct rt_mutex_waiter *waiter, *top_waiter = orig_waiter;
683         struct rt_mutex_waiter *prerequeue_top_waiter;
684         int ret = 0, depth = 0;
685         struct rt_mutex_base *lock;
686         bool detect_deadlock;
687         bool requeue = true;
688 
689         detect_deadlock = rt_mutex_cond_detect_deadlock(orig_waiter, chwalk);
690 
691         /*
692          * The (de)boosting is a step by step approach with a lot of
693          * pitfalls. We want this to be preemptible and we want hold a
694          * maximum of two locks per step. So we have to check
695          * carefully whether things change under us.
696          */
697  again:
698         /*
699          * We limit the lock chain length for each invocation.
700          */
701         if (++depth > max_lock_depth) {
702                 static int prev_max;
703 
704                 /*
705                  * Print this only once. If the admin changes the limit,
706                  * print a new message when reaching the limit again.
707                  */
708                 if (prev_max != max_lock_depth) {
709                         prev_max = max_lock_depth;
710                         printk(KERN_WARNING "Maximum lock depth %d reached "
711                                "task: %s (%d)\n", max_lock_depth,
712                                top_task->comm, task_pid_nr(top_task));
713                 }
714                 put_task_struct(task);
715 
716                 return -EDEADLK;
717         }
718 
719         /*
720          * We are fully preemptible here and only hold the refcount on
721          * @task. So everything can have changed under us since the
722          * caller or our own code below (goto retry/again) dropped all
723          * locks.
724          */
725  retry:
726         /*
727          * [1] Task cannot go away as we did a get_task() before !
728          */
729         raw_spin_lock_irq(&task->pi_lock);
730 
731         /*
732          * [2] Get the waiter on which @task is blocked on.
733          */
734         waiter = task->pi_blocked_on;
735 
736         /*
737          * [3] check_exit_conditions_1() protected by task->pi_lock.
738          */
739 
740         /*
741          * Check whether the end of the boosting chain has been
742          * reached or the state of the chain has changed while we
743          * dropped the locks.
744          */
745         if (!waiter)
746                 goto out_unlock_pi;
747 
748         /*
749          * Check the orig_waiter state. After we dropped the locks,
750          * the previous owner of the lock might have released the lock.
751          */
752         if (orig_waiter && !rt_mutex_owner(orig_lock))
753                 goto out_unlock_pi;
754 
755         /*
756          * We dropped all locks after taking a refcount on @task, so
757          * the task might have moved on in the lock chain or even left
758          * the chain completely and blocks now on an unrelated lock or
759          * on @orig_lock.
760          *
761          * We stored the lock on which @task was blocked in @next_lock,
762          * so we can detect the chain change.
763          */
764         if (next_lock != waiter->lock)
765                 goto out_unlock_pi;
766 
767         /*
768          * There could be 'spurious' loops in the lock graph due to ww_mutex,
769          * consider:
770          *
771          *   P1: A, ww_A, ww_B
772          *   P2: ww_B, ww_A
773          *   P3: A
774          *
775          * P3 should not return -EDEADLK because it gets trapped in the cycle
776          * created by P1 and P2 (which will resolve -- and runs into
777          * max_lock_depth above). Therefore disable detect_deadlock such that
778          * the below termination condition can trigger once all relevant tasks
779          * are boosted.
780          *
781          * Even when we start with ww_mutex we can disable deadlock detection,
782          * since we would supress a ww_mutex induced deadlock at [6] anyway.
783          * Supressing it here however is not sufficient since we might still
784          * hit [6] due to adjustment driven iteration.
785          *
786          * NOTE: if someone were to create a deadlock between 2 ww_classes we'd
787          * utterly fail to report it; lockdep should.
788          */
789         if (IS_ENABLED(CONFIG_PREEMPT_RT) && waiter->ww_ctx && detect_deadlock)
790                 detect_deadlock = false;
791 
792         /*
793          * Drop out, when the task has no waiters. Note,
794          * top_waiter can be NULL, when we are in the deboosting
795          * mode!
796          */
797         if (top_waiter) {
798                 if (!task_has_pi_waiters(task))
799                         goto out_unlock_pi;
800                 /*
801                  * If deadlock detection is off, we stop here if we
802                  * are not the top pi waiter of the task. If deadlock
803                  * detection is enabled we continue, but stop the
804                  * requeueing in the chain walk.
805                  */
806                 if (top_waiter != task_top_pi_waiter(task)) {
807                         if (!detect_deadlock)
808                                 goto out_unlock_pi;
809                         else
810                                 requeue = false;
811                 }
812         }
813 
814         /*
815          * If the waiter priority is the same as the task priority
816          * then there is no further priority adjustment necessary.  If
817          * deadlock detection is off, we stop the chain walk. If its
818          * enabled we continue, but stop the requeueing in the chain
819          * walk.
820          */
821         if (rt_waiter_node_equal(&waiter->tree, task_to_waiter_node(task))) {
822                 if (!detect_deadlock)
823                         goto out_unlock_pi;
824                 else
825                         requeue = false;
826         }
827 
828         /*
829          * [4] Get the next lock; per holding task->pi_lock we can't unblock
830          * and guarantee @lock's existence.
831          */
832         lock = waiter->lock;
833         /*
834          * [5] We need to trylock here as we are holding task->pi_lock,
835          * which is the reverse lock order versus the other rtmutex
836          * operations.
837          *
838          * Per the above, holding task->pi_lock guarantees lock exists, so
839          * inverting this lock order is infeasible from a life-time
840          * perspective.
841          */
842         if (!raw_spin_trylock(&lock->wait_lock)) {
843                 raw_spin_unlock_irq(&task->pi_lock);
844                 cpu_relax();
845                 goto retry;
846         }
847 
848         /*
849          * [6] check_exit_conditions_2() protected by task->pi_lock and
850          * lock->wait_lock.
851          *
852          * Deadlock detection. If the lock is the same as the original
853          * lock which caused us to walk the lock chain or if the
854          * current lock is owned by the task which initiated the chain
855          * walk, we detected a deadlock.
856          */
857         if (lock == orig_lock || rt_mutex_owner(lock) == top_task) {
858                 ret = -EDEADLK;
859 
860                 /*
861                  * When the deadlock is due to ww_mutex; also see above. Don't
862                  * report the deadlock and instead let the ww_mutex wound/die
863                  * logic pick which of the contending threads gets -EDEADLK.
864                  *
865                  * NOTE: assumes the cycle only contains a single ww_class; any
866                  * other configuration and we fail to report; also, see
867                  * lockdep.
868                  */
869                 if (IS_ENABLED(CONFIG_PREEMPT_RT) && orig_waiter && orig_waiter->ww_ctx)
870                         ret = 0;
871 
872                 raw_spin_unlock(&lock->wait_lock);
873                 goto out_unlock_pi;
874         }
875 
876         /*
877          * If we just follow the lock chain for deadlock detection, no
878          * need to do all the requeue operations. To avoid a truckload
879          * of conditionals around the various places below, just do the
880          * minimum chain walk checks.
881          */
882         if (!requeue) {
883                 /*
884                  * No requeue[7] here. Just release @task [8]
885                  */
886                 raw_spin_unlock(&task->pi_lock);
887                 put_task_struct(task);
888 
889                 /*
890                  * [9] check_exit_conditions_3 protected by lock->wait_lock.
891                  * If there is no owner of the lock, end of chain.
892                  */
893                 if (!rt_mutex_owner(lock)) {
894                         raw_spin_unlock_irq(&lock->wait_lock);
895                         return 0;
896                 }
897 
898                 /* [10] Grab the next task, i.e. owner of @lock */
899                 task = get_task_struct(rt_mutex_owner(lock));
900                 raw_spin_lock(&task->pi_lock);
901 
902                 /*
903                  * No requeue [11] here. We just do deadlock detection.
904                  *
905                  * [12] Store whether owner is blocked
906                  * itself. Decision is made after dropping the locks
907                  */
908                 next_lock = task_blocked_on_lock(task);
909                 /*
910                  * Get the top waiter for the next iteration
911                  */
912                 top_waiter = rt_mutex_top_waiter(lock);
913 
914                 /* [13] Drop locks */
915                 raw_spin_unlock(&task->pi_lock);
916                 raw_spin_unlock_irq(&lock->wait_lock);
917 
918                 /* If owner is not blocked, end of chain. */
919                 if (!next_lock)
920                         goto out_put_task;
921                 goto again;
922         }
923 
924         /*
925          * Store the current top waiter before doing the requeue
926          * operation on @lock. We need it for the boost/deboost
927          * decision below.
928          */
929         prerequeue_top_waiter = rt_mutex_top_waiter(lock);
930 
931         /* [7] Requeue the waiter in the lock waiter tree. */
932         rt_mutex_dequeue(lock, waiter);
933 
934         /*
935          * Update the waiter prio fields now that we're dequeued.
936          *
937          * These values can have changed through either:
938          *
939          *   sys_sched_set_scheduler() / sys_sched_setattr()
940          *
941          * or
942          *
943          *   DL CBS enforcement advancing the effective deadline.
944          */
945         waiter_update_prio(waiter, task);
946 
947         rt_mutex_enqueue(lock, waiter);
948 
949         /*
950          * [8] Release the (blocking) task in preparation for
951          * taking the owner task in [10].
952          *
953          * Since we hold lock->waiter_lock, task cannot unblock, even if we
954          * release task->pi_lock.
955          */
956         raw_spin_unlock(&task->pi_lock);
957         put_task_struct(task);
958 
959         /*
960          * [9] check_exit_conditions_3 protected by lock->wait_lock.
961          *
962          * We must abort the chain walk if there is no lock owner even
963          * in the dead lock detection case, as we have nothing to
964          * follow here. This is the end of the chain we are walking.
965          */
966         if (!rt_mutex_owner(lock)) {
967                 /*
968                  * If the requeue [7] above changed the top waiter,
969                  * then we need to wake the new top waiter up to try
970                  * to get the lock.
971                  */
972                 top_waiter = rt_mutex_top_waiter(lock);
973                 if (prerequeue_top_waiter != top_waiter)
974                         wake_up_state(top_waiter->task, top_waiter->wake_state);
975                 raw_spin_unlock_irq(&lock->wait_lock);
976                 return 0;
977         }
978 
979         /*
980          * [10] Grab the next task, i.e. the owner of @lock
981          *
982          * Per holding lock->wait_lock and checking for !owner above, there
983          * must be an owner and it cannot go away.
984          */
985         task = get_task_struct(rt_mutex_owner(lock));
986         raw_spin_lock(&task->pi_lock);
987 
988         /* [11] requeue the pi waiters if necessary */
989         if (waiter == rt_mutex_top_waiter(lock)) {
990                 /*
991                  * The waiter became the new top (highest priority)
992                  * waiter on the lock. Replace the previous top waiter
993                  * in the owner tasks pi waiters tree with this waiter
994                  * and adjust the priority of the owner.
995                  */
996                 rt_mutex_dequeue_pi(task, prerequeue_top_waiter);
997                 waiter_clone_prio(waiter, task);
998                 rt_mutex_enqueue_pi(task, waiter);
999                 rt_mutex_adjust_prio(lock, task);
1000 
1001         } else if (prerequeue_top_waiter == waiter) {
1002                 /*
1003                  * The waiter was the top waiter on the lock, but is
1004                  * no longer the top priority waiter. Replace waiter in
1005                  * the owner tasks pi waiters tree with the new top
1006                  * (highest priority) waiter and adjust the priority
1007                  * of the owner.
1008                  * The new top waiter is stored in @waiter so that
1009                  * @waiter == @top_waiter evaluates to true below and
1010                  * we continue to deboost the rest of the chain.
1011                  */
1012                 rt_mutex_dequeue_pi(task, waiter);
1013                 waiter = rt_mutex_top_waiter(lock);
1014                 waiter_clone_prio(waiter, task);
1015                 rt_mutex_enqueue_pi(task, waiter);
1016                 rt_mutex_adjust_prio(lock, task);
1017         } else {
1018                 /*
1019                  * Nothing changed. No need to do any priority
1020                  * adjustment.
1021                  */
1022         }
1023 
1024         /*
1025          * [12] check_exit_conditions_4() protected by task->pi_lock
1026          * and lock->wait_lock. The actual decisions are made after we
1027          * dropped the locks.
1028          *
1029          * Check whether the task which owns the current lock is pi
1030          * blocked itself. If yes we store a pointer to the lock for
1031          * the lock chain change detection above. After we dropped
1032          * task->pi_lock next_lock cannot be dereferenced anymore.
1033          */
1034         next_lock = task_blocked_on_lock(task);
1035         /*
1036          * Store the top waiter of @lock for the end of chain walk
1037          * decision below.
1038          */
1039         top_waiter = rt_mutex_top_waiter(lock);
1040 
1041         /* [13] Drop the locks */
1042         raw_spin_unlock(&task->pi_lock);
1043         raw_spin_unlock_irq(&lock->wait_lock);
1044 
1045         /*
1046          * Make the actual exit decisions [12], based on the stored
1047          * values.
1048          *
1049          * We reached the end of the lock chain. Stop right here. No
1050          * point to go back just to figure that out.
1051          */
1052         if (!next_lock)
1053                 goto out_put_task;
1054 
1055         /*
1056          * If the current waiter is not the top waiter on the lock,
1057          * then we can stop the chain walk here if we are not in full
1058          * deadlock detection mode.
1059          */
1060         if (!detect_deadlock && waiter != top_waiter)
1061                 goto out_put_task;
1062 
1063         goto again;
1064 
1065  out_unlock_pi:
1066         raw_spin_unlock_irq(&task->pi_lock);
1067  out_put_task:
1068         put_task_struct(task);
1069 
1070         return ret;
1071 }
1072 
1073 /*
1074  * Try to take an rt-mutex
1075  *
1076  * Must be called with lock->wait_lock held and interrupts disabled
1077  *
1078  * @lock:   The lock to be acquired.
1079  * @task:   The task which wants to acquire the lock
1080  * @waiter: The waiter that is queued to the lock's wait tree if the
1081  *          callsite called task_blocked_on_lock(), otherwise NULL
1082  */
1083 static int __sched
1084 try_to_take_rt_mutex(struct rt_mutex_base *lock, struct task_struct *task,
1085                      struct rt_mutex_waiter *waiter)
1086 {
1087         lockdep_assert_held(&lock->wait_lock);
1088 
1089         /*
1090          * Before testing whether we can acquire @lock, we set the
1091          * RT_MUTEX_HAS_WAITERS bit in @lock->owner. This forces all
1092          * other tasks which try to modify @lock into the slow path
1093          * and they serialize on @lock->wait_lock.
1094          *
1095          * The RT_MUTEX_HAS_WAITERS bit can have a transitional state
1096          * as explained at the top of this file if and only if:
1097          *
1098          * - There is a lock owner. The caller must fixup the
1099          *   transient state if it does a trylock or leaves the lock
1100          *   function due to a signal or timeout.
1101          *
1102          * - @task acquires the lock and there are no other
1103          *   waiters. This is undone in rt_mutex_set_owner(@task) at
1104          *   the end of this function.
1105          */
1106         mark_rt_mutex_waiters(lock);
1107 
1108         /*
1109          * If @lock has an owner, give up.
1110          */
1111         if (rt_mutex_owner(lock))
1112                 return 0;
1113 
1114         /*
1115          * If @waiter != NULL, @task has already enqueued the waiter
1116          * into @lock waiter tree. If @waiter == NULL then this is a
1117          * trylock attempt.
1118          */
1119         if (waiter) {
1120                 struct rt_mutex_waiter *top_waiter = rt_mutex_top_waiter(lock);
1121 
1122                 /*
1123                  * If waiter is the highest priority waiter of @lock,
1124                  * or allowed to steal it, take it over.
1125                  */
1126                 if (waiter == top_waiter || rt_mutex_steal(waiter, top_waiter)) {
1127                         /*
1128                          * We can acquire the lock. Remove the waiter from the
1129                          * lock waiters tree.
1130                          */
1131                         rt_mutex_dequeue(lock, waiter);
1132                 } else {
1133                         return 0;
1134                 }
1135         } else {
1136                 /*
1137                  * If the lock has waiters already we check whether @task is
1138                  * eligible to take over the lock.
1139                  *
1140                  * If there are no other waiters, @task can acquire
1141                  * the lock.  @task->pi_blocked_on is NULL, so it does
1142                  * not need to be dequeued.
1143                  */
1144                 if (rt_mutex_has_waiters(lock)) {
1145                         /* Check whether the trylock can steal it. */
1146                         if (!rt_mutex_steal(task_to_waiter(task),
1147                                             rt_mutex_top_waiter(lock)))
1148                                 return 0;
1149 
1150                         /*
1151                          * The current top waiter stays enqueued. We
1152                          * don't have to change anything in the lock
1153                          * waiters order.
1154                          */
1155                 } else {
1156                         /*
1157                          * No waiters. Take the lock without the
1158                          * pi_lock dance.@task->pi_blocked_on is NULL
1159                          * and we have no waiters to enqueue in @task
1160                          * pi waiters tree.
1161                          */
1162                         goto takeit;
1163                 }
1164         }
1165 
1166         /*
1167          * Clear @task->pi_blocked_on. Requires protection by
1168          * @task->pi_lock. Redundant operation for the @waiter == NULL
1169          * case, but conditionals are more expensive than a redundant
1170          * store.
1171          */
1172         raw_spin_lock(&task->pi_lock);
1173         task->pi_blocked_on = NULL;
1174         /*
1175          * Finish the lock acquisition. @task is the new owner. If
1176          * other waiters exist we have to insert the highest priority
1177          * waiter into @task->pi_waiters tree.
1178          */
1179         if (rt_mutex_has_waiters(lock))
1180                 rt_mutex_enqueue_pi(task, rt_mutex_top_waiter(lock));
1181         raw_spin_unlock(&task->pi_lock);
1182 
1183 takeit:
1184         /*
1185          * This either preserves the RT_MUTEX_HAS_WAITERS bit if there
1186          * are still waiters or clears it.
1187          */
1188         rt_mutex_set_owner(lock, task);
1189 
1190         return 1;
1191 }
1192 
1193 /*
1194  * Task blocks on lock.
1195  *
1196  * Prepare waiter and propagate pi chain
1197  *
1198  * This must be called with lock->wait_lock held and interrupts disabled
1199  */
1200 static int __sched task_blocks_on_rt_mutex(struct rt_mutex_base *lock,
1201                                            struct rt_mutex_waiter *waiter,
1202                                            struct task_struct *task,
1203                                            struct ww_acquire_ctx *ww_ctx,
1204                                            enum rtmutex_chainwalk chwalk)
1205 {
1206         struct task_struct *owner = rt_mutex_owner(lock);
1207         struct rt_mutex_waiter *top_waiter = waiter;
1208         struct rt_mutex_base *next_lock;
1209         int chain_walk = 0, res;
1210 
1211         lockdep_assert_held(&lock->wait_lock);
1212 
1213         /*
1214          * Early deadlock detection. We really don't want the task to
1215          * enqueue on itself just to untangle the mess later. It's not
1216          * only an optimization. We drop the locks, so another waiter
1217          * can come in before the chain walk detects the deadlock. So
1218          * the other will detect the deadlock and return -EDEADLOCK,
1219          * which is wrong, as the other waiter is not in a deadlock
1220          * situation.
1221          *
1222          * Except for ww_mutex, in that case the chain walk must already deal
1223          * with spurious cycles, see the comments at [3] and [6].
1224          */
1225         if (owner == task && !(build_ww_mutex() && ww_ctx))
1226                 return -EDEADLK;
1227 
1228         raw_spin_lock(&task->pi_lock);
1229         waiter->task = task;
1230         waiter->lock = lock;
1231         waiter_update_prio(waiter, task);
1232         waiter_clone_prio(waiter, task);
1233 
1234         /* Get the top priority waiter on the lock */
1235         if (rt_mutex_has_waiters(lock))
1236                 top_waiter = rt_mutex_top_waiter(lock);
1237         rt_mutex_enqueue(lock, waiter);
1238 
1239         task->pi_blocked_on = waiter;
1240 
1241         raw_spin_unlock(&task->pi_lock);
1242 
1243         if (build_ww_mutex() && ww_ctx) {
1244                 struct rt_mutex *rtm;
1245 
1246                 /* Check whether the waiter should back out immediately */
1247                 rtm = container_of(lock, struct rt_mutex, rtmutex);
1248                 res = __ww_mutex_add_waiter(waiter, rtm, ww_ctx);
1249                 if (res) {
1250                         raw_spin_lock(&task->pi_lock);
1251                         rt_mutex_dequeue(lock, waiter);
1252                         task->pi_blocked_on = NULL;
1253                         raw_spin_unlock(&task->pi_lock);
1254                         return res;
1255                 }
1256         }
1257 
1258         if (!owner)
1259                 return 0;
1260 
1261         raw_spin_lock(&owner->pi_lock);
1262         if (waiter == rt_mutex_top_waiter(lock)) {
1263                 rt_mutex_dequeue_pi(owner, top_waiter);
1264                 rt_mutex_enqueue_pi(owner, waiter);
1265 
1266                 rt_mutex_adjust_prio(lock, owner);
1267                 if (owner->pi_blocked_on)
1268                         chain_walk = 1;
1269         } else if (rt_mutex_cond_detect_deadlock(waiter, chwalk)) {
1270                 chain_walk = 1;
1271         }
1272 
1273         /* Store the lock on which owner is blocked or NULL */
1274         next_lock = task_blocked_on_lock(owner);
1275 
1276         raw_spin_unlock(&owner->pi_lock);
1277         /*
1278          * Even if full deadlock detection is on, if the owner is not
1279          * blocked itself, we can avoid finding this out in the chain
1280          * walk.
1281          */
1282         if (!chain_walk || !next_lock)
1283                 return 0;
1284 
1285         /*
1286          * The owner can't disappear while holding a lock,
1287          * so the owner struct is protected by wait_lock.
1288          * Gets dropped in rt_mutex_adjust_prio_chain()!
1289          */
1290         get_task_struct(owner);
1291 
1292         raw_spin_unlock_irq(&lock->wait_lock);
1293 
1294         res = rt_mutex_adjust_prio_chain(owner, chwalk, lock,
1295                                          next_lock, waiter, task);
1296 
1297         raw_spin_lock_irq(&lock->wait_lock);
1298 
1299         return res;
1300 }
1301 
1302 /*
1303  * Remove the top waiter from the current tasks pi waiter tree and
1304  * queue it up.
1305  *
1306  * Called with lock->wait_lock held and interrupts disabled.
1307  */
1308 static void __sched mark_wakeup_next_waiter(struct rt_wake_q_head *wqh,
1309                                             struct rt_mutex_base *lock)
1310 {
1311         struct rt_mutex_waiter *waiter;
1312 
1313         lockdep_assert_held(&lock->wait_lock);
1314 
1315         raw_spin_lock(&current->pi_lock);
1316 
1317         waiter = rt_mutex_top_waiter(lock);
1318 
1319         /*
1320          * Remove it from current->pi_waiters and deboost.
1321          *
1322          * We must in fact deboost here in order to ensure we call
1323          * rt_mutex_setprio() to update p->pi_top_task before the
1324          * task unblocks.
1325          */
1326         rt_mutex_dequeue_pi(current, waiter);
1327         rt_mutex_adjust_prio(lock, current);
1328 
1329         /*
1330          * As we are waking up the top waiter, and the waiter stays
1331          * queued on the lock until it gets the lock, this lock
1332          * obviously has waiters. Just set the bit here and this has
1333          * the added benefit of forcing all new tasks into the
1334          * slow path making sure no task of lower priority than
1335          * the top waiter can steal this lock.
1336          */
1337         lock->owner = (void *) RT_MUTEX_HAS_WAITERS;
1338 
1339         /*
1340          * We deboosted before waking the top waiter task such that we don't
1341          * run two tasks with the 'same' priority (and ensure the
1342          * p->pi_top_task pointer points to a blocked task). This however can
1343          * lead to priority inversion if we would get preempted after the
1344          * deboost but before waking our donor task, hence the preempt_disable()
1345          * before unlock.
1346          *
1347          * Pairs with preempt_enable() in rt_mutex_wake_up_q();
1348          */
1349         preempt_disable();
1350         rt_mutex_wake_q_add(wqh, waiter);
1351         raw_spin_unlock(&current->pi_lock);
1352 }
1353 
1354 static int __sched __rt_mutex_slowtrylock(struct rt_mutex_base *lock)
1355 {
1356         int ret = try_to_take_rt_mutex(lock, current, NULL);
1357 
1358         /*
1359          * try_to_take_rt_mutex() sets the lock waiters bit
1360          * unconditionally. Clean this up.
1361          */
1362         fixup_rt_mutex_waiters(lock, true);
1363 
1364         return ret;
1365 }
1366 
1367 /*
1368  * Slow path try-lock function:
1369  */
1370 static int __sched rt_mutex_slowtrylock(struct rt_mutex_base *lock)
1371 {
1372         unsigned long flags;
1373         int ret;
1374 
1375         /*
1376          * If the lock already has an owner we fail to get the lock.
1377          * This can be done without taking the @lock->wait_lock as
1378          * it is only being read, and this is a trylock anyway.
1379          */
1380         if (rt_mutex_owner(lock))
1381                 return 0;
1382 
1383         /*
1384          * The mutex has currently no owner. Lock the wait lock and try to
1385          * acquire the lock. We use irqsave here to support early boot calls.
1386          */
1387         raw_spin_lock_irqsave(&lock->wait_lock, flags);
1388 
1389         ret = __rt_mutex_slowtrylock(lock);
1390 
1391         raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
1392 
1393         return ret;
1394 }
1395 
1396 static __always_inline int __rt_mutex_trylock(struct rt_mutex_base *lock)
1397 {
1398         if (likely(rt_mutex_cmpxchg_acquire(lock, NULL, current)))
1399                 return 1;
1400 
1401         return rt_mutex_slowtrylock(lock);
1402 }
1403 
1404 /*
1405  * Slow path to release a rt-mutex.
1406  */
1407 static void __sched rt_mutex_slowunlock(struct rt_mutex_base *lock)
1408 {
1409         DEFINE_RT_WAKE_Q(wqh);
1410         unsigned long flags;
1411 
1412         /* irqsave required to support early boot calls */
1413         raw_spin_lock_irqsave(&lock->wait_lock, flags);
1414 
1415         debug_rt_mutex_unlock(lock);
1416 
1417         /*
1418          * We must be careful here if the fast path is enabled. If we
1419          * have no waiters queued we cannot set owner to NULL here
1420          * because of:
1421          *
1422          * foo->lock->owner = NULL;
1423          *                      rtmutex_lock(foo->lock);   <- fast path
1424          *                      free = atomic_dec_and_test(foo->refcnt);
1425          *                      rtmutex_unlock(foo->lock); <- fast path
1426          *                      if (free)
1427          *                              kfree(foo);
1428          * raw_spin_unlock(foo->lock->wait_lock);
1429          *
1430          * So for the fastpath enabled kernel:
1431          *
1432          * Nothing can set the waiters bit as long as we hold
1433          * lock->wait_lock. So we do the following sequence:
1434          *
1435          *      owner = rt_mutex_owner(lock);
1436          *      clear_rt_mutex_waiters(lock);
1437          *      raw_spin_unlock(&lock->wait_lock);
1438          *      if (cmpxchg(&lock->owner, owner, 0) == owner)
1439          *              return;
1440          *      goto retry;
1441          *
1442          * The fastpath disabled variant is simple as all access to
1443          * lock->owner is serialized by lock->wait_lock:
1444          *
1445          *      lock->owner = NULL;
1446          *      raw_spin_unlock(&lock->wait_lock);
1447          */
1448         while (!rt_mutex_has_waiters(lock)) {
1449                 /* Drops lock->wait_lock ! */
1450                 if (unlock_rt_mutex_safe(lock, flags) == true)
1451                         return;
1452                 /* Relock the rtmutex and try again */
1453                 raw_spin_lock_irqsave(&lock->wait_lock, flags);
1454         }
1455 
1456         /*
1457          * The wakeup next waiter path does not suffer from the above
1458          * race. See the comments there.
1459          *
1460          * Queue the next waiter for wakeup once we release the wait_lock.
1461          */
1462         mark_wakeup_next_waiter(&wqh, lock);
1463         raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
1464 
1465         rt_mutex_wake_up_q(&wqh);
1466 }
1467 
1468 static __always_inline void __rt_mutex_unlock(struct rt_mutex_base *lock)
1469 {
1470         if (likely(rt_mutex_cmpxchg_release(lock, current, NULL)))
1471                 return;
1472 
1473         rt_mutex_slowunlock(lock);
1474 }
1475 
1476 #ifdef CONFIG_SMP
1477 static bool rtmutex_spin_on_owner(struct rt_mutex_base *lock,
1478                                   struct rt_mutex_waiter *waiter,
1479                                   struct task_struct *owner)
1480 {
1481         bool res = true;
1482 
1483         rcu_read_lock();
1484         for (;;) {
1485                 /* If owner changed, trylock again. */
1486                 if (owner != rt_mutex_owner(lock))
1487                         break;
1488                 /*
1489                  * Ensure that @owner is dereferenced after checking that
1490                  * the lock owner still matches @owner. If that fails,
1491                  * @owner might point to freed memory. If it still matches,
1492                  * the rcu_read_lock() ensures the memory stays valid.
1493                  */
1494                 barrier();
1495                 /*
1496                  * Stop spinning when:
1497                  *  - the lock owner has been scheduled out
1498                  *  - current is not longer the top waiter
1499                  *  - current is requested to reschedule (redundant
1500                  *    for CONFIG_PREEMPT_RCU=y)
1501                  *  - the VCPU on which owner runs is preempted
1502                  */
1503                 if (!owner_on_cpu(owner) || need_resched() ||
1504                     !rt_mutex_waiter_is_top_waiter(lock, waiter)) {
1505                         res = false;
1506                         break;
1507                 }
1508                 cpu_relax();
1509         }
1510         rcu_read_unlock();
1511         return res;
1512 }
1513 #else
1514 static bool rtmutex_spin_on_owner(struct rt_mutex_base *lock,
1515                                   struct rt_mutex_waiter *waiter,
1516                                   struct task_struct *owner)
1517 {
1518         return false;
1519 }
1520 #endif
1521 
1522 #ifdef RT_MUTEX_BUILD_MUTEX
1523 /*
1524  * Functions required for:
1525  *      - rtmutex, futex on all kernels
1526  *      - mutex and rwsem substitutions on RT kernels
1527  */
1528 
1529 /*
1530  * Remove a waiter from a lock and give up
1531  *
1532  * Must be called with lock->wait_lock held and interrupts disabled. It must
1533  * have just failed to try_to_take_rt_mutex().
1534  */
1535 static void __sched remove_waiter(struct rt_mutex_base *lock,
1536                                   struct rt_mutex_waiter *waiter)
1537 {
1538         bool is_top_waiter = (waiter == rt_mutex_top_waiter(lock));
1539         struct task_struct *owner = rt_mutex_owner(lock);
1540         struct rt_mutex_base *next_lock;
1541 
1542         lockdep_assert_held(&lock->wait_lock);
1543 
1544         raw_spin_lock(&current->pi_lock);
1545         rt_mutex_dequeue(lock, waiter);
1546         current->pi_blocked_on = NULL;
1547         raw_spin_unlock(&current->pi_lock);
1548 
1549         /*
1550          * Only update priority if the waiter was the highest priority
1551          * waiter of the lock and there is an owner to update.
1552          */
1553         if (!owner || !is_top_waiter)
1554                 return;
1555 
1556         raw_spin_lock(&owner->pi_lock);
1557 
1558         rt_mutex_dequeue_pi(owner, waiter);
1559 
1560         if (rt_mutex_has_waiters(lock))
1561                 rt_mutex_enqueue_pi(owner, rt_mutex_top_waiter(lock));
1562 
1563         rt_mutex_adjust_prio(lock, owner);
1564 
1565         /* Store the lock on which owner is blocked or NULL */
1566         next_lock = task_blocked_on_lock(owner);
1567 
1568         raw_spin_unlock(&owner->pi_lock);
1569 
1570         /*
1571          * Don't walk the chain, if the owner task is not blocked
1572          * itself.
1573          */
1574         if (!next_lock)
1575                 return;
1576 
1577         /* gets dropped in rt_mutex_adjust_prio_chain()! */
1578         get_task_struct(owner);
1579 
1580         raw_spin_unlock_irq(&lock->wait_lock);
1581 
1582         rt_mutex_adjust_prio_chain(owner, RT_MUTEX_MIN_CHAINWALK, lock,
1583                                    next_lock, NULL, current);
1584 
1585         raw_spin_lock_irq(&lock->wait_lock);
1586 }
1587 
1588 /**
1589  * rt_mutex_slowlock_block() - Perform the wait-wake-try-to-take loop
1590  * @lock:                the rt_mutex to take
1591  * @ww_ctx:              WW mutex context pointer
1592  * @state:               the state the task should block in (TASK_INTERRUPTIBLE
1593  *                       or TASK_UNINTERRUPTIBLE)
1594  * @timeout:             the pre-initialized and started timer, or NULL for none
1595  * @waiter:              the pre-initialized rt_mutex_waiter
1596  *
1597  * Must be called with lock->wait_lock held and interrupts disabled
1598  */
1599 static int __sched rt_mutex_slowlock_block(struct rt_mutex_base *lock,
1600                                            struct ww_acquire_ctx *ww_ctx,
1601                                            unsigned int state,
1602                                            struct hrtimer_sleeper *timeout,
1603                                            struct rt_mutex_waiter *waiter)
1604 {
1605         struct rt_mutex *rtm = container_of(lock, struct rt_mutex, rtmutex);
1606         struct task_struct *owner;
1607         int ret = 0;
1608 
1609         for (;;) {
1610                 /* Try to acquire the lock: */
1611                 if (try_to_take_rt_mutex(lock, current, waiter))
1612                         break;
1613 
1614                 if (timeout && !timeout->task) {
1615                         ret = -ETIMEDOUT;
1616                         break;
1617                 }
1618                 if (signal_pending_state(state, current)) {
1619                         ret = -EINTR;
1620                         break;
1621                 }
1622 
1623                 if (build_ww_mutex() && ww_ctx) {
1624                         ret = __ww_mutex_check_kill(rtm, waiter, ww_ctx);
1625                         if (ret)
1626                                 break;
1627                 }
1628 
1629                 if (waiter == rt_mutex_top_waiter(lock))
1630                         owner = rt_mutex_owner(lock);
1631                 else
1632                         owner = NULL;
1633                 raw_spin_unlock_irq(&lock->wait_lock);
1634 
1635                 if (!owner || !rtmutex_spin_on_owner(lock, waiter, owner))
1636                         rt_mutex_schedule();
1637 
1638                 raw_spin_lock_irq(&lock->wait_lock);
1639                 set_current_state(state);
1640         }
1641 
1642         __set_current_state(TASK_RUNNING);
1643         return ret;
1644 }
1645 
1646 static void __sched rt_mutex_handle_deadlock(int res, int detect_deadlock,
1647                                              struct rt_mutex_waiter *w)
1648 {
1649         /*
1650          * If the result is not -EDEADLOCK or the caller requested
1651          * deadlock detection, nothing to do here.
1652          */
1653         if (res != -EDEADLOCK || detect_deadlock)
1654                 return;
1655 
1656         if (build_ww_mutex() && w->ww_ctx)
1657                 return;
1658 
1659         /*
1660          * Yell loudly and stop the task right here.
1661          */
1662         WARN(1, "rtmutex deadlock detected\n");
1663         while (1) {
1664                 set_current_state(TASK_INTERRUPTIBLE);
1665                 rt_mutex_schedule();
1666         }
1667 }
1668 
1669 /**
1670  * __rt_mutex_slowlock - Locking slowpath invoked with lock::wait_lock held
1671  * @lock:       The rtmutex to block lock
1672  * @ww_ctx:     WW mutex context pointer
1673  * @state:      The task state for sleeping
1674  * @chwalk:     Indicator whether full or partial chainwalk is requested
1675  * @waiter:     Initializer waiter for blocking
1676  */
1677 static int __sched __rt_mutex_slowlock(struct rt_mutex_base *lock,
1678                                        struct ww_acquire_ctx *ww_ctx,
1679                                        unsigned int state,
1680                                        enum rtmutex_chainwalk chwalk,
1681                                        struct rt_mutex_waiter *waiter)
1682 {
1683         struct rt_mutex *rtm = container_of(lock, struct rt_mutex, rtmutex);
1684         struct ww_mutex *ww = ww_container_of(rtm);
1685         int ret;
1686 
1687         lockdep_assert_held(&lock->wait_lock);
1688 
1689         /* Try to acquire the lock again: */
1690         if (try_to_take_rt_mutex(lock, current, NULL)) {
1691                 if (build_ww_mutex() && ww_ctx) {
1692                         __ww_mutex_check_waiters(rtm, ww_ctx);
1693                         ww_mutex_lock_acquired(ww, ww_ctx);
1694                 }
1695                 return 0;
1696         }
1697 
1698         set_current_state(state);
1699 
1700         trace_contention_begin(lock, LCB_F_RT);
1701 
1702         ret = task_blocks_on_rt_mutex(lock, waiter, current, ww_ctx, chwalk);
1703         if (likely(!ret))
1704                 ret = rt_mutex_slowlock_block(lock, ww_ctx, state, NULL, waiter);
1705 
1706         if (likely(!ret)) {
1707                 /* acquired the lock */
1708                 if (build_ww_mutex() && ww_ctx) {
1709                         if (!ww_ctx->is_wait_die)
1710                                 __ww_mutex_check_waiters(rtm, ww_ctx);
1711                         ww_mutex_lock_acquired(ww, ww_ctx);
1712                 }
1713         } else {
1714                 __set_current_state(TASK_RUNNING);
1715                 remove_waiter(lock, waiter);
1716                 rt_mutex_handle_deadlock(ret, chwalk, waiter);
1717         }
1718 
1719         /*
1720          * try_to_take_rt_mutex() sets the waiter bit
1721          * unconditionally. We might have to fix that up.
1722          */
1723         fixup_rt_mutex_waiters(lock, true);
1724 
1725         trace_contention_end(lock, ret);
1726 
1727         return ret;
1728 }
1729 
1730 static inline int __rt_mutex_slowlock_locked(struct rt_mutex_base *lock,
1731                                              struct ww_acquire_ctx *ww_ctx,
1732                                              unsigned int state)
1733 {
1734         struct rt_mutex_waiter waiter;
1735         int ret;
1736 
1737         rt_mutex_init_waiter(&waiter);
1738         waiter.ww_ctx = ww_ctx;
1739 
1740         ret = __rt_mutex_slowlock(lock, ww_ctx, state, RT_MUTEX_MIN_CHAINWALK,
1741                                   &waiter);
1742 
1743         debug_rt_mutex_free_waiter(&waiter);
1744         return ret;
1745 }
1746 
1747 /*
1748  * rt_mutex_slowlock - Locking slowpath invoked when fast path fails
1749  * @lock:       The rtmutex to block lock
1750  * @ww_ctx:     WW mutex context pointer
1751  * @state:      The task state for sleeping
1752  */
1753 static int __sched rt_mutex_slowlock(struct rt_mutex_base *lock,
1754                                      struct ww_acquire_ctx *ww_ctx,
1755                                      unsigned int state)
1756 {
1757         unsigned long flags;
1758         int ret;
1759 
1760         /*
1761          * Do all pre-schedule work here, before we queue a waiter and invoke
1762          * PI -- any such work that trips on rtlock (PREEMPT_RT spinlock) would
1763          * otherwise recurse back into task_blocks_on_rt_mutex() through
1764          * rtlock_slowlock() and will then enqueue a second waiter for this
1765          * same task and things get really confusing real fast.
1766          */
1767         rt_mutex_pre_schedule();
1768 
1769         /*
1770          * Technically we could use raw_spin_[un]lock_irq() here, but this can
1771          * be called in early boot if the cmpxchg() fast path is disabled
1772          * (debug, no architecture support). In this case we will acquire the
1773          * rtmutex with lock->wait_lock held. But we cannot unconditionally
1774          * enable interrupts in that early boot case. So we need to use the
1775          * irqsave/restore variants.
1776          */
1777         raw_spin_lock_irqsave(&lock->wait_lock, flags);
1778         ret = __rt_mutex_slowlock_locked(lock, ww_ctx, state);
1779         raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
1780         rt_mutex_post_schedule();
1781 
1782         return ret;
1783 }
1784 
1785 static __always_inline int __rt_mutex_lock(struct rt_mutex_base *lock,
1786                                            unsigned int state)
1787 {
1788         lockdep_assert(!current->pi_blocked_on);
1789 
1790         if (likely(rt_mutex_try_acquire(lock)))
1791                 return 0;
1792 
1793         return rt_mutex_slowlock(lock, NULL, state);
1794 }
1795 #endif /* RT_MUTEX_BUILD_MUTEX */
1796 
1797 #ifdef RT_MUTEX_BUILD_SPINLOCKS
1798 /*
1799  * Functions required for spin/rw_lock substitution on RT kernels
1800  */
1801 
1802 /**
1803  * rtlock_slowlock_locked - Slow path lock acquisition for RT locks
1804  * @lock:       The underlying RT mutex
1805  */
1806 static void __sched rtlock_slowlock_locked(struct rt_mutex_base *lock)
1807 {
1808         struct rt_mutex_waiter waiter;
1809         struct task_struct *owner;
1810 
1811         lockdep_assert_held(&lock->wait_lock);
1812 
1813         if (try_to_take_rt_mutex(lock, current, NULL))
1814                 return;
1815 
1816         rt_mutex_init_rtlock_waiter(&waiter);
1817 
1818         /* Save current state and set state to TASK_RTLOCK_WAIT */
1819         current_save_and_set_rtlock_wait_state();
1820 
1821         trace_contention_begin(lock, LCB_F_RT);
1822 
1823         task_blocks_on_rt_mutex(lock, &waiter, current, NULL, RT_MUTEX_MIN_CHAINWALK);
1824 
1825         for (;;) {
1826                 /* Try to acquire the lock again */
1827                 if (try_to_take_rt_mutex(lock, current, &waiter))
1828                         break;
1829 
1830                 if (&waiter == rt_mutex_top_waiter(lock))
1831                         owner = rt_mutex_owner(lock);
1832                 else
1833                         owner = NULL;
1834                 raw_spin_unlock_irq(&lock->wait_lock);
1835 
1836                 if (!owner || !rtmutex_spin_on_owner(lock, &waiter, owner))
1837                         schedule_rtlock();
1838 
1839                 raw_spin_lock_irq(&lock->wait_lock);
1840                 set_current_state(TASK_RTLOCK_WAIT);
1841         }
1842 
1843         /* Restore the task state */
1844         current_restore_rtlock_saved_state();
1845 
1846         /*
1847          * try_to_take_rt_mutex() sets the waiter bit unconditionally.
1848          * We might have to fix that up:
1849          */
1850         fixup_rt_mutex_waiters(lock, true);
1851         debug_rt_mutex_free_waiter(&waiter);
1852 
1853         trace_contention_end(lock, 0);
1854 }
1855 
1856 static __always_inline void __sched rtlock_slowlock(struct rt_mutex_base *lock)
1857 {
1858         unsigned long flags;
1859 
1860         raw_spin_lock_irqsave(&lock->wait_lock, flags);
1861         rtlock_slowlock_locked(lock);
1862         raw_spin_unlock_irqrestore(&lock->wait_lock, flags);
1863 }
1864 
1865 #endif /* RT_MUTEX_BUILD_SPINLOCKS */
1866 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php