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