GNU Linux-libre 4.19.242-gnu1
[releases.git] / kernel / locking / mutex.c
1 /*
2  * kernel/locking/mutex.c
3  *
4  * Mutexes: blocking mutual exclusion locks
5  *
6  * Started by Ingo Molnar:
7  *
8  *  Copyright (C) 2004, 2005, 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
9  *
10  * Many thanks to Arjan van de Ven, Thomas Gleixner, Steven Rostedt and
11  * David Howells for suggestions and improvements.
12  *
13  *  - Adaptive spinning for mutexes by Peter Zijlstra. (Ported to mainline
14  *    from the -rt tree, where it was originally implemented for rtmutexes
15  *    by Steven Rostedt, based on work by Gregory Haskins, Peter Morreale
16  *    and Sven Dietrich.
17  *
18  * Also see Documentation/locking/mutex-design.txt.
19  */
20 #include <linux/mutex.h>
21 #include <linux/ww_mutex.h>
22 #include <linux/sched/signal.h>
23 #include <linux/sched/rt.h>
24 #include <linux/sched/wake_q.h>
25 #include <linux/sched/debug.h>
26 #include <linux/export.h>
27 #include <linux/spinlock.h>
28 #include <linux/interrupt.h>
29 #include <linux/debug_locks.h>
30 #include <linux/osq_lock.h>
31
32 #ifdef CONFIG_DEBUG_MUTEXES
33 # include "mutex-debug.h"
34 #else
35 # include "mutex.h"
36 #endif
37
38 void
39 __mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key)
40 {
41         atomic_long_set(&lock->owner, 0);
42         spin_lock_init(&lock->wait_lock);
43         INIT_LIST_HEAD(&lock->wait_list);
44 #ifdef CONFIG_MUTEX_SPIN_ON_OWNER
45         osq_lock_init(&lock->osq);
46 #endif
47
48         debug_mutex_init(lock, name, key);
49 }
50 EXPORT_SYMBOL(__mutex_init);
51
52 /*
53  * @owner: contains: 'struct task_struct *' to the current lock owner,
54  * NULL means not owned. Since task_struct pointers are aligned at
55  * at least L1_CACHE_BYTES, we have low bits to store extra state.
56  *
57  * Bit0 indicates a non-empty waiter list; unlock must issue a wakeup.
58  * Bit1 indicates unlock needs to hand the lock to the top-waiter
59  * Bit2 indicates handoff has been done and we're waiting for pickup.
60  */
61 #define MUTEX_FLAG_WAITERS      0x01
62 #define MUTEX_FLAG_HANDOFF      0x02
63 #define MUTEX_FLAG_PICKUP       0x04
64
65 #define MUTEX_FLAGS             0x07
66
67 static inline struct task_struct *__owner_task(unsigned long owner)
68 {
69         return (struct task_struct *)(owner & ~MUTEX_FLAGS);
70 }
71
72 static inline unsigned long __owner_flags(unsigned long owner)
73 {
74         return owner & MUTEX_FLAGS;
75 }
76
77 /*
78  * Trylock variant that retuns the owning task on failure.
79  */
80 static inline struct task_struct *__mutex_trylock_or_owner(struct mutex *lock)
81 {
82         unsigned long owner, curr = (unsigned long)current;
83
84         owner = atomic_long_read(&lock->owner);
85         for (;;) { /* must loop, can race against a flag */
86                 unsigned long old, flags = __owner_flags(owner);
87                 unsigned long task = owner & ~MUTEX_FLAGS;
88
89                 if (task) {
90                         if (likely(task != curr))
91                                 break;
92
93                         if (likely(!(flags & MUTEX_FLAG_PICKUP)))
94                                 break;
95
96                         flags &= ~MUTEX_FLAG_PICKUP;
97                 } else {
98 #ifdef CONFIG_DEBUG_MUTEXES
99                         DEBUG_LOCKS_WARN_ON(flags & MUTEX_FLAG_PICKUP);
100 #endif
101                 }
102
103                 /*
104                  * We set the HANDOFF bit, we must make sure it doesn't live
105                  * past the point where we acquire it. This would be possible
106                  * if we (accidentally) set the bit on an unlocked mutex.
107                  */
108                 flags &= ~MUTEX_FLAG_HANDOFF;
109
110                 old = atomic_long_cmpxchg_acquire(&lock->owner, owner, curr | flags);
111                 if (old == owner)
112                         return NULL;
113
114                 owner = old;
115         }
116
117         return __owner_task(owner);
118 }
119
120 /*
121  * Actual trylock that will work on any unlocked state.
122  */
123 static inline bool __mutex_trylock(struct mutex *lock)
124 {
125         return !__mutex_trylock_or_owner(lock);
126 }
127
128 #ifndef CONFIG_DEBUG_LOCK_ALLOC
129 /*
130  * Lockdep annotations are contained to the slow paths for simplicity.
131  * There is nothing that would stop spreading the lockdep annotations outwards
132  * except more code.
133  */
134
135 /*
136  * Optimistic trylock that only works in the uncontended case. Make sure to
137  * follow with a __mutex_trylock() before failing.
138  */
139 static __always_inline bool __mutex_trylock_fast(struct mutex *lock)
140 {
141         unsigned long curr = (unsigned long)current;
142         unsigned long zero = 0UL;
143
144         if (atomic_long_try_cmpxchg_acquire(&lock->owner, &zero, curr))
145                 return true;
146
147         return false;
148 }
149
150 static __always_inline bool __mutex_unlock_fast(struct mutex *lock)
151 {
152         unsigned long curr = (unsigned long)current;
153
154         if (atomic_long_cmpxchg_release(&lock->owner, curr, 0UL) == curr)
155                 return true;
156
157         return false;
158 }
159 #endif
160
161 static inline void __mutex_set_flag(struct mutex *lock, unsigned long flag)
162 {
163         atomic_long_or(flag, &lock->owner);
164 }
165
166 static inline void __mutex_clear_flag(struct mutex *lock, unsigned long flag)
167 {
168         atomic_long_andnot(flag, &lock->owner);
169 }
170
171 static inline bool __mutex_waiter_is_first(struct mutex *lock, struct mutex_waiter *waiter)
172 {
173         return list_first_entry(&lock->wait_list, struct mutex_waiter, list) == waiter;
174 }
175
176 /*
177  * Add @waiter to a given location in the lock wait_list and set the
178  * FLAG_WAITERS flag if it's the first waiter.
179  */
180 static void
181 __mutex_add_waiter(struct mutex *lock, struct mutex_waiter *waiter,
182                    struct list_head *list)
183 {
184         debug_mutex_add_waiter(lock, waiter, current);
185
186         list_add_tail(&waiter->list, list);
187         if (__mutex_waiter_is_first(lock, waiter))
188                 __mutex_set_flag(lock, MUTEX_FLAG_WAITERS);
189 }
190
191 static void
192 __mutex_remove_waiter(struct mutex *lock, struct mutex_waiter *waiter)
193 {
194         list_del(&waiter->list);
195         if (likely(list_empty(&lock->wait_list)))
196                 __mutex_clear_flag(lock, MUTEX_FLAGS);
197
198         debug_mutex_remove_waiter(lock, waiter, current);
199 }
200
201 /*
202  * Give up ownership to a specific task, when @task = NULL, this is equivalent
203  * to a regular unlock. Sets PICKUP on a handoff, clears HANDOF, preserves
204  * WAITERS. Provides RELEASE semantics like a regular unlock, the
205  * __mutex_trylock() provides a matching ACQUIRE semantics for the handoff.
206  */
207 static void __mutex_handoff(struct mutex *lock, struct task_struct *task)
208 {
209         unsigned long owner = atomic_long_read(&lock->owner);
210
211         for (;;) {
212                 unsigned long old, new;
213
214 #ifdef CONFIG_DEBUG_MUTEXES
215                 DEBUG_LOCKS_WARN_ON(__owner_task(owner) != current);
216                 DEBUG_LOCKS_WARN_ON(owner & MUTEX_FLAG_PICKUP);
217 #endif
218
219                 new = (owner & MUTEX_FLAG_WAITERS);
220                 new |= (unsigned long)task;
221                 if (task)
222                         new |= MUTEX_FLAG_PICKUP;
223
224                 old = atomic_long_cmpxchg_release(&lock->owner, owner, new);
225                 if (old == owner)
226                         break;
227
228                 owner = old;
229         }
230 }
231
232 #ifndef CONFIG_DEBUG_LOCK_ALLOC
233 /*
234  * We split the mutex lock/unlock logic into separate fastpath and
235  * slowpath functions, to reduce the register pressure on the fastpath.
236  * We also put the fastpath first in the kernel image, to make sure the
237  * branch is predicted by the CPU as default-untaken.
238  */
239 static void __sched __mutex_lock_slowpath(struct mutex *lock);
240
241 /**
242  * mutex_lock - acquire the mutex
243  * @lock: the mutex to be acquired
244  *
245  * Lock the mutex exclusively for this task. If the mutex is not
246  * available right now, it will sleep until it can get it.
247  *
248  * The mutex must later on be released by the same task that
249  * acquired it. Recursive locking is not allowed. The task
250  * may not exit without first unlocking the mutex. Also, kernel
251  * memory where the mutex resides must not be freed with
252  * the mutex still locked. The mutex must first be initialized
253  * (or statically defined) before it can be locked. memset()-ing
254  * the mutex to 0 is not allowed.
255  *
256  * (The CONFIG_DEBUG_MUTEXES .config option turns on debugging
257  * checks that will enforce the restrictions and will also do
258  * deadlock debugging)
259  *
260  * This function is similar to (but not equivalent to) down().
261  */
262 void __sched mutex_lock(struct mutex *lock)
263 {
264         might_sleep();
265
266         if (!__mutex_trylock_fast(lock))
267                 __mutex_lock_slowpath(lock);
268 }
269 EXPORT_SYMBOL(mutex_lock);
270 #endif
271
272 /*
273  * Wait-Die:
274  *   The newer transactions are killed when:
275  *     It (the new transaction) makes a request for a lock being held
276  *     by an older transaction.
277  *
278  * Wound-Wait:
279  *   The newer transactions are wounded when:
280  *     An older transaction makes a request for a lock being held by
281  *     the newer transaction.
282  */
283
284 /*
285  * Associate the ww_mutex @ww with the context @ww_ctx under which we acquired
286  * it.
287  */
288 static __always_inline void
289 ww_mutex_lock_acquired(struct ww_mutex *ww, struct ww_acquire_ctx *ww_ctx)
290 {
291 #ifdef CONFIG_DEBUG_MUTEXES
292         /*
293          * If this WARN_ON triggers, you used ww_mutex_lock to acquire,
294          * but released with a normal mutex_unlock in this call.
295          *
296          * This should never happen, always use ww_mutex_unlock.
297          */
298         DEBUG_LOCKS_WARN_ON(ww->ctx);
299
300         /*
301          * Not quite done after calling ww_acquire_done() ?
302          */
303         DEBUG_LOCKS_WARN_ON(ww_ctx->done_acquire);
304
305         if (ww_ctx->contending_lock) {
306                 /*
307                  * After -EDEADLK you tried to
308                  * acquire a different ww_mutex? Bad!
309                  */
310                 DEBUG_LOCKS_WARN_ON(ww_ctx->contending_lock != ww);
311
312                 /*
313                  * You called ww_mutex_lock after receiving -EDEADLK,
314                  * but 'forgot' to unlock everything else first?
315                  */
316                 DEBUG_LOCKS_WARN_ON(ww_ctx->acquired > 0);
317                 ww_ctx->contending_lock = NULL;
318         }
319
320         /*
321          * Naughty, using a different class will lead to undefined behavior!
322          */
323         DEBUG_LOCKS_WARN_ON(ww_ctx->ww_class != ww->ww_class);
324 #endif
325         ww_ctx->acquired++;
326         ww->ctx = ww_ctx;
327 }
328
329 /*
330  * Determine if context @a is 'after' context @b. IOW, @a is a younger
331  * transaction than @b and depending on algorithm either needs to wait for
332  * @b or die.
333  */
334 static inline bool __sched
335 __ww_ctx_stamp_after(struct ww_acquire_ctx *a, struct ww_acquire_ctx *b)
336 {
337
338         return (signed long)(a->stamp - b->stamp) > 0;
339 }
340
341 /*
342  * Wait-Die; wake a younger waiter context (when locks held) such that it can
343  * die.
344  *
345  * Among waiters with context, only the first one can have other locks acquired
346  * already (ctx->acquired > 0), because __ww_mutex_add_waiter() and
347  * __ww_mutex_check_kill() wake any but the earliest context.
348  */
349 static bool __sched
350 __ww_mutex_die(struct mutex *lock, struct mutex_waiter *waiter,
351                struct ww_acquire_ctx *ww_ctx)
352 {
353         if (!ww_ctx->is_wait_die)
354                 return false;
355
356         if (waiter->ww_ctx->acquired > 0 &&
357                         __ww_ctx_stamp_after(waiter->ww_ctx, ww_ctx)) {
358                 debug_mutex_wake_waiter(lock, waiter);
359                 wake_up_process(waiter->task);
360         }
361
362         return true;
363 }
364
365 /*
366  * Wound-Wait; wound a younger @hold_ctx if it holds the lock.
367  *
368  * Wound the lock holder if there are waiters with older transactions than
369  * the lock holders. Even if multiple waiters may wound the lock holder,
370  * it's sufficient that only one does.
371  */
372 static bool __ww_mutex_wound(struct mutex *lock,
373                              struct ww_acquire_ctx *ww_ctx,
374                              struct ww_acquire_ctx *hold_ctx)
375 {
376         struct task_struct *owner = __mutex_owner(lock);
377
378         lockdep_assert_held(&lock->wait_lock);
379
380         /*
381          * Possible through __ww_mutex_add_waiter() when we race with
382          * ww_mutex_set_context_fastpath(). In that case we'll get here again
383          * through __ww_mutex_check_waiters().
384          */
385         if (!hold_ctx)
386                 return false;
387
388         /*
389          * Can have !owner because of __mutex_unlock_slowpath(), but if owner,
390          * it cannot go away because we'll have FLAG_WAITERS set and hold
391          * wait_lock.
392          */
393         if (!owner)
394                 return false;
395
396         if (ww_ctx->acquired > 0 && __ww_ctx_stamp_after(hold_ctx, ww_ctx)) {
397                 hold_ctx->wounded = 1;
398
399                 /*
400                  * wake_up_process() paired with set_current_state()
401                  * inserts sufficient barriers to make sure @owner either sees
402                  * it's wounded in __ww_mutex_check_kill() or has a
403                  * wakeup pending to re-read the wounded state.
404                  */
405                 if (owner != current)
406                         wake_up_process(owner);
407
408                 return true;
409         }
410
411         return false;
412 }
413
414 /*
415  * We just acquired @lock under @ww_ctx, if there are later contexts waiting
416  * behind us on the wait-list, check if they need to die, or wound us.
417  *
418  * See __ww_mutex_add_waiter() for the list-order construction; basically the
419  * list is ordered by stamp, smallest (oldest) first.
420  *
421  * This relies on never mixing wait-die/wound-wait on the same wait-list;
422  * which is currently ensured by that being a ww_class property.
423  *
424  * The current task must not be on the wait list.
425  */
426 static void __sched
427 __ww_mutex_check_waiters(struct mutex *lock, struct ww_acquire_ctx *ww_ctx)
428 {
429         struct mutex_waiter *cur;
430
431         lockdep_assert_held(&lock->wait_lock);
432
433         list_for_each_entry(cur, &lock->wait_list, list) {
434                 if (!cur->ww_ctx)
435                         continue;
436
437                 if (__ww_mutex_die(lock, cur, ww_ctx) ||
438                     __ww_mutex_wound(lock, cur->ww_ctx, ww_ctx))
439                         break;
440         }
441 }
442
443 /*
444  * After acquiring lock with fastpath, where we do not hold wait_lock, set ctx
445  * and wake up any waiters so they can recheck.
446  */
447 static __always_inline void
448 ww_mutex_set_context_fastpath(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
449 {
450         ww_mutex_lock_acquired(lock, ctx);
451
452         /*
453          * The lock->ctx update should be visible on all cores before
454          * the WAITERS check is done, otherwise contended waiters might be
455          * missed. The contended waiters will either see ww_ctx == NULL
456          * and keep spinning, or it will acquire wait_lock, add itself
457          * to waiter list and sleep.
458          */
459         smp_mb(); /* See comments above and below. */
460
461         /*
462          * [W] ww->ctx = ctx        [W] MUTEX_FLAG_WAITERS
463          *     MB                       MB
464          * [R] MUTEX_FLAG_WAITERS   [R] ww->ctx
465          *
466          * The memory barrier above pairs with the memory barrier in
467          * __ww_mutex_add_waiter() and makes sure we either observe ww->ctx
468          * and/or !empty list.
469          */
470         if (likely(!(atomic_long_read(&lock->base.owner) & MUTEX_FLAG_WAITERS)))
471                 return;
472
473         /*
474          * Uh oh, we raced in fastpath, check if any of the waiters need to
475          * die or wound us.
476          */
477         spin_lock(&lock->base.wait_lock);
478         __ww_mutex_check_waiters(&lock->base, ctx);
479         spin_unlock(&lock->base.wait_lock);
480 }
481
482 #ifdef CONFIG_MUTEX_SPIN_ON_OWNER
483
484 static inline
485 bool ww_mutex_spin_on_owner(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
486                             struct mutex_waiter *waiter)
487 {
488         struct ww_mutex *ww;
489
490         ww = container_of(lock, struct ww_mutex, base);
491
492         /*
493          * If ww->ctx is set the contents are undefined, only
494          * by acquiring wait_lock there is a guarantee that
495          * they are not invalid when reading.
496          *
497          * As such, when deadlock detection needs to be
498          * performed the optimistic spinning cannot be done.
499          *
500          * Check this in every inner iteration because we may
501          * be racing against another thread's ww_mutex_lock.
502          */
503         if (ww_ctx->acquired > 0 && READ_ONCE(ww->ctx))
504                 return false;
505
506         /*
507          * If we aren't on the wait list yet, cancel the spin
508          * if there are waiters. We want  to avoid stealing the
509          * lock from a waiter with an earlier stamp, since the
510          * other thread may already own a lock that we also
511          * need.
512          */
513         if (!waiter && (atomic_long_read(&lock->owner) & MUTEX_FLAG_WAITERS))
514                 return false;
515
516         /*
517          * Similarly, stop spinning if we are no longer the
518          * first waiter.
519          */
520         if (waiter && !__mutex_waiter_is_first(lock, waiter))
521                 return false;
522
523         return true;
524 }
525
526 /*
527  * Look out! "owner" is an entirely speculative pointer access and not
528  * reliable.
529  *
530  * "noinline" so that this function shows up on perf profiles.
531  */
532 static noinline
533 bool mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner,
534                          struct ww_acquire_ctx *ww_ctx, struct mutex_waiter *waiter)
535 {
536         bool ret = true;
537
538         rcu_read_lock();
539         while (__mutex_owner(lock) == owner) {
540                 /*
541                  * Ensure we emit the owner->on_cpu, dereference _after_
542                  * checking lock->owner still matches owner. If that fails,
543                  * owner might point to freed memory. If it still matches,
544                  * the rcu_read_lock() ensures the memory stays valid.
545                  */
546                 barrier();
547
548                 /*
549                  * Use vcpu_is_preempted to detect lock holder preemption issue.
550                  */
551                 if (!owner->on_cpu || need_resched() ||
552                                 vcpu_is_preempted(task_cpu(owner))) {
553                         ret = false;
554                         break;
555                 }
556
557                 if (ww_ctx && !ww_mutex_spin_on_owner(lock, ww_ctx, waiter)) {
558                         ret = false;
559                         break;
560                 }
561
562                 cpu_relax();
563         }
564         rcu_read_unlock();
565
566         return ret;
567 }
568
569 /*
570  * Initial check for entering the mutex spinning loop
571  */
572 static inline int mutex_can_spin_on_owner(struct mutex *lock)
573 {
574         struct task_struct *owner;
575         int retval = 1;
576
577         if (need_resched())
578                 return 0;
579
580         rcu_read_lock();
581         owner = __mutex_owner(lock);
582
583         /*
584          * As lock holder preemption issue, we both skip spinning if task is not
585          * on cpu or its cpu is preempted
586          */
587         if (owner)
588                 retval = owner->on_cpu && !vcpu_is_preempted(task_cpu(owner));
589         rcu_read_unlock();
590
591         /*
592          * If lock->owner is not set, the mutex has been released. Return true
593          * such that we'll trylock in the spin path, which is a faster option
594          * than the blocking slow path.
595          */
596         return retval;
597 }
598
599 /*
600  * Optimistic spinning.
601  *
602  * We try to spin for acquisition when we find that the lock owner
603  * is currently running on a (different) CPU and while we don't
604  * need to reschedule. The rationale is that if the lock owner is
605  * running, it is likely to release the lock soon.
606  *
607  * The mutex spinners are queued up using MCS lock so that only one
608  * spinner can compete for the mutex. However, if mutex spinning isn't
609  * going to happen, there is no point in going through the lock/unlock
610  * overhead.
611  *
612  * Returns true when the lock was taken, otherwise false, indicating
613  * that we need to jump to the slowpath and sleep.
614  *
615  * The waiter flag is set to true if the spinner is a waiter in the wait
616  * queue. The waiter-spinner will spin on the lock directly and concurrently
617  * with the spinner at the head of the OSQ, if present, until the owner is
618  * changed to itself.
619  */
620 static __always_inline bool
621 mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
622                       struct mutex_waiter *waiter)
623 {
624         if (!waiter) {
625                 /*
626                  * The purpose of the mutex_can_spin_on_owner() function is
627                  * to eliminate the overhead of osq_lock() and osq_unlock()
628                  * in case spinning isn't possible. As a waiter-spinner
629                  * is not going to take OSQ lock anyway, there is no need
630                  * to call mutex_can_spin_on_owner().
631                  */
632                 if (!mutex_can_spin_on_owner(lock))
633                         goto fail;
634
635                 /*
636                  * In order to avoid a stampede of mutex spinners trying to
637                  * acquire the mutex all at once, the spinners need to take a
638                  * MCS (queued) lock first before spinning on the owner field.
639                  */
640                 if (!osq_lock(&lock->osq))
641                         goto fail;
642         }
643
644         for (;;) {
645                 struct task_struct *owner;
646
647                 /* Try to acquire the mutex... */
648                 owner = __mutex_trylock_or_owner(lock);
649                 if (!owner)
650                         break;
651
652                 /*
653                  * There's an owner, wait for it to either
654                  * release the lock or go to sleep.
655                  */
656                 if (!mutex_spin_on_owner(lock, owner, ww_ctx, waiter))
657                         goto fail_unlock;
658
659                 /*
660                  * The cpu_relax() call is a compiler barrier which forces
661                  * everything in this loop to be re-loaded. We don't need
662                  * memory barriers as we'll eventually observe the right
663                  * values at the cost of a few extra spins.
664                  */
665                 cpu_relax();
666         }
667
668         if (!waiter)
669                 osq_unlock(&lock->osq);
670
671         return true;
672
673
674 fail_unlock:
675         if (!waiter)
676                 osq_unlock(&lock->osq);
677
678 fail:
679         /*
680          * If we fell out of the spin path because of need_resched(),
681          * reschedule now, before we try-lock the mutex. This avoids getting
682          * scheduled out right after we obtained the mutex.
683          */
684         if (need_resched()) {
685                 /*
686                  * We _should_ have TASK_RUNNING here, but just in case
687                  * we do not, make it so, otherwise we might get stuck.
688                  */
689                 __set_current_state(TASK_RUNNING);
690                 schedule_preempt_disabled();
691         }
692
693         return false;
694 }
695 #else
696 static __always_inline bool
697 mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
698                       struct mutex_waiter *waiter)
699 {
700         return false;
701 }
702 #endif
703
704 static noinline void __sched __mutex_unlock_slowpath(struct mutex *lock, unsigned long ip);
705
706 /**
707  * mutex_unlock - release the mutex
708  * @lock: the mutex to be released
709  *
710  * Unlock a mutex that has been locked by this task previously.
711  *
712  * This function must not be used in interrupt context. Unlocking
713  * of a not locked mutex is not allowed.
714  *
715  * This function is similar to (but not equivalent to) up().
716  */
717 void __sched mutex_unlock(struct mutex *lock)
718 {
719 #ifndef CONFIG_DEBUG_LOCK_ALLOC
720         if (__mutex_unlock_fast(lock))
721                 return;
722 #endif
723         __mutex_unlock_slowpath(lock, _RET_IP_);
724 }
725 EXPORT_SYMBOL(mutex_unlock);
726
727 /**
728  * ww_mutex_unlock - release the w/w mutex
729  * @lock: the mutex to be released
730  *
731  * Unlock a mutex that has been locked by this task previously with any of the
732  * ww_mutex_lock* functions (with or without an acquire context). It is
733  * forbidden to release the locks after releasing the acquire context.
734  *
735  * This function must not be used in interrupt context. Unlocking
736  * of a unlocked mutex is not allowed.
737  */
738 void __sched ww_mutex_unlock(struct ww_mutex *lock)
739 {
740         /*
741          * The unlocking fastpath is the 0->1 transition from 'locked'
742          * into 'unlocked' state:
743          */
744         if (lock->ctx) {
745 #ifdef CONFIG_DEBUG_MUTEXES
746                 DEBUG_LOCKS_WARN_ON(!lock->ctx->acquired);
747 #endif
748                 if (lock->ctx->acquired > 0)
749                         lock->ctx->acquired--;
750                 lock->ctx = NULL;
751         }
752
753         mutex_unlock(&lock->base);
754 }
755 EXPORT_SYMBOL(ww_mutex_unlock);
756
757
758 static __always_inline int __sched
759 __ww_mutex_kill(struct mutex *lock, struct ww_acquire_ctx *ww_ctx)
760 {
761         if (ww_ctx->acquired > 0) {
762 #ifdef CONFIG_DEBUG_MUTEXES
763                 struct ww_mutex *ww;
764
765                 ww = container_of(lock, struct ww_mutex, base);
766                 DEBUG_LOCKS_WARN_ON(ww_ctx->contending_lock);
767                 ww_ctx->contending_lock = ww;
768 #endif
769                 return -EDEADLK;
770         }
771
772         return 0;
773 }
774
775
776 /*
777  * Check the wound condition for the current lock acquire.
778  *
779  * Wound-Wait: If we're wounded, kill ourself.
780  *
781  * Wait-Die: If we're trying to acquire a lock already held by an older
782  *           context, kill ourselves.
783  *
784  * Since __ww_mutex_add_waiter() orders the wait-list on stamp, we only have to
785  * look at waiters before us in the wait-list.
786  */
787 static inline int __sched
788 __ww_mutex_check_kill(struct mutex *lock, struct mutex_waiter *waiter,
789                       struct ww_acquire_ctx *ctx)
790 {
791         struct ww_mutex *ww = container_of(lock, struct ww_mutex, base);
792         struct ww_acquire_ctx *hold_ctx = READ_ONCE(ww->ctx);
793         struct mutex_waiter *cur;
794
795         if (ctx->acquired == 0)
796                 return 0;
797
798         if (!ctx->is_wait_die) {
799                 if (ctx->wounded)
800                         return __ww_mutex_kill(lock, ctx);
801
802                 return 0;
803         }
804
805         if (hold_ctx && __ww_ctx_stamp_after(ctx, hold_ctx))
806                 return __ww_mutex_kill(lock, ctx);
807
808         /*
809          * If there is a waiter in front of us that has a context, then its
810          * stamp is earlier than ours and we must kill ourself.
811          */
812         cur = waiter;
813         list_for_each_entry_continue_reverse(cur, &lock->wait_list, list) {
814                 if (!cur->ww_ctx)
815                         continue;
816
817                 return __ww_mutex_kill(lock, ctx);
818         }
819
820         return 0;
821 }
822
823 /*
824  * Add @waiter to the wait-list, keep the wait-list ordered by stamp, smallest
825  * first. Such that older contexts are preferred to acquire the lock over
826  * younger contexts.
827  *
828  * Waiters without context are interspersed in FIFO order.
829  *
830  * Furthermore, for Wait-Die kill ourself immediately when possible (there are
831  * older contexts already waiting) to avoid unnecessary waiting and for
832  * Wound-Wait ensure we wound the owning context when it is younger.
833  */
834 static inline int __sched
835 __ww_mutex_add_waiter(struct mutex_waiter *waiter,
836                       struct mutex *lock,
837                       struct ww_acquire_ctx *ww_ctx)
838 {
839         struct mutex_waiter *cur;
840         struct list_head *pos;
841         bool is_wait_die;
842
843         if (!ww_ctx) {
844                 __mutex_add_waiter(lock, waiter, &lock->wait_list);
845                 return 0;
846         }
847
848         is_wait_die = ww_ctx->is_wait_die;
849
850         /*
851          * Add the waiter before the first waiter with a higher stamp.
852          * Waiters without a context are skipped to avoid starving
853          * them. Wait-Die waiters may die here. Wound-Wait waiters
854          * never die here, but they are sorted in stamp order and
855          * may wound the lock holder.
856          */
857         pos = &lock->wait_list;
858         list_for_each_entry_reverse(cur, &lock->wait_list, list) {
859                 if (!cur->ww_ctx)
860                         continue;
861
862                 if (__ww_ctx_stamp_after(ww_ctx, cur->ww_ctx)) {
863                         /*
864                          * Wait-Die: if we find an older context waiting, there
865                          * is no point in queueing behind it, as we'd have to
866                          * die the moment it would acquire the lock.
867                          */
868                         if (is_wait_die) {
869                                 int ret = __ww_mutex_kill(lock, ww_ctx);
870
871                                 if (ret)
872                                         return ret;
873                         }
874
875                         break;
876                 }
877
878                 pos = &cur->list;
879
880                 /* Wait-Die: ensure younger waiters die. */
881                 __ww_mutex_die(lock, cur, ww_ctx);
882         }
883
884         __mutex_add_waiter(lock, waiter, pos);
885
886         /*
887          * Wound-Wait: if we're blocking on a mutex owned by a younger context,
888          * wound that such that we might proceed.
889          */
890         if (!is_wait_die) {
891                 struct ww_mutex *ww = container_of(lock, struct ww_mutex, base);
892
893                 /*
894                  * See ww_mutex_set_context_fastpath(). Orders setting
895                  * MUTEX_FLAG_WAITERS vs the ww->ctx load,
896                  * such that either we or the fastpath will wound @ww->ctx.
897                  */
898                 smp_mb();
899                 __ww_mutex_wound(lock, ww_ctx, ww->ctx);
900         }
901
902         return 0;
903 }
904
905 /*
906  * Lock a mutex (possibly interruptible), slowpath:
907  */
908 static __always_inline int __sched
909 __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
910                     struct lockdep_map *nest_lock, unsigned long ip,
911                     struct ww_acquire_ctx *ww_ctx, const bool use_ww_ctx)
912 {
913         struct mutex_waiter waiter;
914         struct ww_mutex *ww;
915         int ret;
916
917         if (!use_ww_ctx)
918                 ww_ctx = NULL;
919
920         might_sleep();
921
922         ww = container_of(lock, struct ww_mutex, base);
923         if (ww_ctx) {
924                 if (unlikely(ww_ctx == READ_ONCE(ww->ctx)))
925                         return -EALREADY;
926
927                 /*
928                  * Reset the wounded flag after a kill. No other process can
929                  * race and wound us here since they can't have a valid owner
930                  * pointer if we don't have any locks held.
931                  */
932                 if (ww_ctx->acquired == 0)
933                         ww_ctx->wounded = 0;
934         }
935
936         preempt_disable();
937         mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, ip);
938
939         if (__mutex_trylock(lock) ||
940             mutex_optimistic_spin(lock, ww_ctx, NULL)) {
941                 /* got the lock, yay! */
942                 lock_acquired(&lock->dep_map, ip);
943                 if (ww_ctx)
944                         ww_mutex_set_context_fastpath(ww, ww_ctx);
945                 preempt_enable();
946                 return 0;
947         }
948
949         spin_lock(&lock->wait_lock);
950         /*
951          * After waiting to acquire the wait_lock, try again.
952          */
953         if (__mutex_trylock(lock)) {
954                 if (ww_ctx)
955                         __ww_mutex_check_waiters(lock, ww_ctx);
956
957                 goto skip_wait;
958         }
959
960         debug_mutex_lock_common(lock, &waiter);
961
962         lock_contended(&lock->dep_map, ip);
963
964         if (!use_ww_ctx) {
965                 /* add waiting tasks to the end of the waitqueue (FIFO): */
966                 __mutex_add_waiter(lock, &waiter, &lock->wait_list);
967
968
969 #ifdef CONFIG_DEBUG_MUTEXES
970                 waiter.ww_ctx = MUTEX_POISON_WW_CTX;
971 #endif
972         } else {
973                 /*
974                  * Add in stamp order, waking up waiters that must kill
975                  * themselves.
976                  */
977                 ret = __ww_mutex_add_waiter(&waiter, lock, ww_ctx);
978                 if (ret)
979                         goto err_early_kill;
980
981                 waiter.ww_ctx = ww_ctx;
982         }
983
984         waiter.task = current;
985
986         set_current_state(state);
987         for (;;) {
988                 bool first;
989
990                 /*
991                  * Once we hold wait_lock, we're serialized against
992                  * mutex_unlock() handing the lock off to us, do a trylock
993                  * before testing the error conditions to make sure we pick up
994                  * the handoff.
995                  */
996                 if (__mutex_trylock(lock))
997                         goto acquired;
998
999                 /*
1000                  * Check for signals and kill conditions while holding
1001                  * wait_lock. This ensures the lock cancellation is ordered
1002                  * against mutex_unlock() and wake-ups do not go missing.
1003                  */
1004                 if (unlikely(signal_pending_state(state, current))) {
1005                         ret = -EINTR;
1006                         goto err;
1007                 }
1008
1009                 if (ww_ctx) {
1010                         ret = __ww_mutex_check_kill(lock, &waiter, ww_ctx);
1011                         if (ret)
1012                                 goto err;
1013                 }
1014
1015                 spin_unlock(&lock->wait_lock);
1016                 schedule_preempt_disabled();
1017
1018                 first = __mutex_waiter_is_first(lock, &waiter);
1019                 if (first)
1020                         __mutex_set_flag(lock, MUTEX_FLAG_HANDOFF);
1021
1022                 set_current_state(state);
1023                 /*
1024                  * Here we order against unlock; we must either see it change
1025                  * state back to RUNNING and fall through the next schedule(),
1026                  * or we must see its unlock and acquire.
1027                  */
1028                 if (__mutex_trylock(lock) ||
1029                     (first && mutex_optimistic_spin(lock, ww_ctx, &waiter)))
1030                         break;
1031
1032                 spin_lock(&lock->wait_lock);
1033         }
1034         spin_lock(&lock->wait_lock);
1035 acquired:
1036         __set_current_state(TASK_RUNNING);
1037
1038         if (ww_ctx) {
1039                 /*
1040                  * Wound-Wait; we stole the lock (!first_waiter), check the
1041                  * waiters as anyone might want to wound us.
1042                  */
1043                 if (!ww_ctx->is_wait_die &&
1044                     !__mutex_waiter_is_first(lock, &waiter))
1045                         __ww_mutex_check_waiters(lock, ww_ctx);
1046         }
1047
1048         __mutex_remove_waiter(lock, &waiter);
1049
1050         debug_mutex_free_waiter(&waiter);
1051
1052 skip_wait:
1053         /* got the lock - cleanup and rejoice! */
1054         lock_acquired(&lock->dep_map, ip);
1055
1056         if (ww_ctx)
1057                 ww_mutex_lock_acquired(ww, ww_ctx);
1058
1059         spin_unlock(&lock->wait_lock);
1060         preempt_enable();
1061         return 0;
1062
1063 err:
1064         __set_current_state(TASK_RUNNING);
1065         __mutex_remove_waiter(lock, &waiter);
1066 err_early_kill:
1067         spin_unlock(&lock->wait_lock);
1068         debug_mutex_free_waiter(&waiter);
1069         mutex_release(&lock->dep_map, 1, ip);
1070         preempt_enable();
1071         return ret;
1072 }
1073
1074 static int __sched
1075 __mutex_lock(struct mutex *lock, long state, unsigned int subclass,
1076              struct lockdep_map *nest_lock, unsigned long ip)
1077 {
1078         return __mutex_lock_common(lock, state, subclass, nest_lock, ip, NULL, false);
1079 }
1080
1081 static int __sched
1082 __ww_mutex_lock(struct mutex *lock, long state, unsigned int subclass,
1083                 struct lockdep_map *nest_lock, unsigned long ip,
1084                 struct ww_acquire_ctx *ww_ctx)
1085 {
1086         return __mutex_lock_common(lock, state, subclass, nest_lock, ip, ww_ctx, true);
1087 }
1088
1089 #ifdef CONFIG_DEBUG_LOCK_ALLOC
1090 void __sched
1091 mutex_lock_nested(struct mutex *lock, unsigned int subclass)
1092 {
1093         __mutex_lock(lock, TASK_UNINTERRUPTIBLE, subclass, NULL, _RET_IP_);
1094 }
1095
1096 EXPORT_SYMBOL_GPL(mutex_lock_nested);
1097
1098 void __sched
1099 _mutex_lock_nest_lock(struct mutex *lock, struct lockdep_map *nest)
1100 {
1101         __mutex_lock(lock, TASK_UNINTERRUPTIBLE, 0, nest, _RET_IP_);
1102 }
1103 EXPORT_SYMBOL_GPL(_mutex_lock_nest_lock);
1104
1105 int __sched
1106 mutex_lock_killable_nested(struct mutex *lock, unsigned int subclass)
1107 {
1108         return __mutex_lock(lock, TASK_KILLABLE, subclass, NULL, _RET_IP_);
1109 }
1110 EXPORT_SYMBOL_GPL(mutex_lock_killable_nested);
1111
1112 int __sched
1113 mutex_lock_interruptible_nested(struct mutex *lock, unsigned int subclass)
1114 {
1115         return __mutex_lock(lock, TASK_INTERRUPTIBLE, subclass, NULL, _RET_IP_);
1116 }
1117 EXPORT_SYMBOL_GPL(mutex_lock_interruptible_nested);
1118
1119 void __sched
1120 mutex_lock_io_nested(struct mutex *lock, unsigned int subclass)
1121 {
1122         int token;
1123
1124         might_sleep();
1125
1126         token = io_schedule_prepare();
1127         __mutex_lock_common(lock, TASK_UNINTERRUPTIBLE,
1128                             subclass, NULL, _RET_IP_, NULL, 0);
1129         io_schedule_finish(token);
1130 }
1131 EXPORT_SYMBOL_GPL(mutex_lock_io_nested);
1132
1133 static inline int
1134 ww_mutex_deadlock_injection(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
1135 {
1136 #ifdef CONFIG_DEBUG_WW_MUTEX_SLOWPATH
1137         unsigned tmp;
1138
1139         if (ctx->deadlock_inject_countdown-- == 0) {
1140                 tmp = ctx->deadlock_inject_interval;
1141                 if (tmp > UINT_MAX/4)
1142                         tmp = UINT_MAX;
1143                 else
1144                         tmp = tmp*2 + tmp + tmp/2;
1145
1146                 ctx->deadlock_inject_interval = tmp;
1147                 ctx->deadlock_inject_countdown = tmp;
1148                 ctx->contending_lock = lock;
1149
1150                 ww_mutex_unlock(lock);
1151
1152                 return -EDEADLK;
1153         }
1154 #endif
1155
1156         return 0;
1157 }
1158
1159 int __sched
1160 ww_mutex_lock(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
1161 {
1162         int ret;
1163
1164         might_sleep();
1165         ret =  __ww_mutex_lock(&lock->base, TASK_UNINTERRUPTIBLE,
1166                                0, ctx ? &ctx->dep_map : NULL, _RET_IP_,
1167                                ctx);
1168         if (!ret && ctx && ctx->acquired > 1)
1169                 return ww_mutex_deadlock_injection(lock, ctx);
1170
1171         return ret;
1172 }
1173 EXPORT_SYMBOL_GPL(ww_mutex_lock);
1174
1175 int __sched
1176 ww_mutex_lock_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
1177 {
1178         int ret;
1179
1180         might_sleep();
1181         ret = __ww_mutex_lock(&lock->base, TASK_INTERRUPTIBLE,
1182                               0, ctx ? &ctx->dep_map : NULL, _RET_IP_,
1183                               ctx);
1184
1185         if (!ret && ctx && ctx->acquired > 1)
1186                 return ww_mutex_deadlock_injection(lock, ctx);
1187
1188         return ret;
1189 }
1190 EXPORT_SYMBOL_GPL(ww_mutex_lock_interruptible);
1191
1192 #endif
1193
1194 /*
1195  * Release the lock, slowpath:
1196  */
1197 static noinline void __sched __mutex_unlock_slowpath(struct mutex *lock, unsigned long ip)
1198 {
1199         struct task_struct *next = NULL;
1200         DEFINE_WAKE_Q(wake_q);
1201         unsigned long owner;
1202
1203         mutex_release(&lock->dep_map, 1, ip);
1204
1205         /*
1206          * Release the lock before (potentially) taking the spinlock such that
1207          * other contenders can get on with things ASAP.
1208          *
1209          * Except when HANDOFF, in that case we must not clear the owner field,
1210          * but instead set it to the top waiter.
1211          */
1212         owner = atomic_long_read(&lock->owner);
1213         for (;;) {
1214                 unsigned long old;
1215
1216 #ifdef CONFIG_DEBUG_MUTEXES
1217                 DEBUG_LOCKS_WARN_ON(__owner_task(owner) != current);
1218                 DEBUG_LOCKS_WARN_ON(owner & MUTEX_FLAG_PICKUP);
1219 #endif
1220
1221                 if (owner & MUTEX_FLAG_HANDOFF)
1222                         break;
1223
1224                 old = atomic_long_cmpxchg_release(&lock->owner, owner,
1225                                                   __owner_flags(owner));
1226                 if (old == owner) {
1227                         if (owner & MUTEX_FLAG_WAITERS)
1228                                 break;
1229
1230                         return;
1231                 }
1232
1233                 owner = old;
1234         }
1235
1236         spin_lock(&lock->wait_lock);
1237         debug_mutex_unlock(lock);
1238         if (!list_empty(&lock->wait_list)) {
1239                 /* get the first entry from the wait-list: */
1240                 struct mutex_waiter *waiter =
1241                         list_first_entry(&lock->wait_list,
1242                                          struct mutex_waiter, list);
1243
1244                 next = waiter->task;
1245
1246                 debug_mutex_wake_waiter(lock, waiter);
1247                 wake_q_add(&wake_q, next);
1248         }
1249
1250         if (owner & MUTEX_FLAG_HANDOFF)
1251                 __mutex_handoff(lock, next);
1252
1253         spin_unlock(&lock->wait_lock);
1254
1255         wake_up_q(&wake_q);
1256 }
1257
1258 #ifndef CONFIG_DEBUG_LOCK_ALLOC
1259 /*
1260  * Here come the less common (and hence less performance-critical) APIs:
1261  * mutex_lock_interruptible() and mutex_trylock().
1262  */
1263 static noinline int __sched
1264 __mutex_lock_killable_slowpath(struct mutex *lock);
1265
1266 static noinline int __sched
1267 __mutex_lock_interruptible_slowpath(struct mutex *lock);
1268
1269 /**
1270  * mutex_lock_interruptible() - Acquire the mutex, interruptible by signals.
1271  * @lock: The mutex to be acquired.
1272  *
1273  * Lock the mutex like mutex_lock().  If a signal is delivered while the
1274  * process is sleeping, this function will return without acquiring the
1275  * mutex.
1276  *
1277  * Context: Process context.
1278  * Return: 0 if the lock was successfully acquired or %-EINTR if a
1279  * signal arrived.
1280  */
1281 int __sched mutex_lock_interruptible(struct mutex *lock)
1282 {
1283         might_sleep();
1284
1285         if (__mutex_trylock_fast(lock))
1286                 return 0;
1287
1288         return __mutex_lock_interruptible_slowpath(lock);
1289 }
1290
1291 EXPORT_SYMBOL(mutex_lock_interruptible);
1292
1293 /**
1294  * mutex_lock_killable() - Acquire the mutex, interruptible by fatal signals.
1295  * @lock: The mutex to be acquired.
1296  *
1297  * Lock the mutex like mutex_lock().  If a signal which will be fatal to
1298  * the current process is delivered while the process is sleeping, this
1299  * function will return without acquiring the mutex.
1300  *
1301  * Context: Process context.
1302  * Return: 0 if the lock was successfully acquired or %-EINTR if a
1303  * fatal signal arrived.
1304  */
1305 int __sched mutex_lock_killable(struct mutex *lock)
1306 {
1307         might_sleep();
1308
1309         if (__mutex_trylock_fast(lock))
1310                 return 0;
1311
1312         return __mutex_lock_killable_slowpath(lock);
1313 }
1314 EXPORT_SYMBOL(mutex_lock_killable);
1315
1316 /**
1317  * mutex_lock_io() - Acquire the mutex and mark the process as waiting for I/O
1318  * @lock: The mutex to be acquired.
1319  *
1320  * Lock the mutex like mutex_lock().  While the task is waiting for this
1321  * mutex, it will be accounted as being in the IO wait state by the
1322  * scheduler.
1323  *
1324  * Context: Process context.
1325  */
1326 void __sched mutex_lock_io(struct mutex *lock)
1327 {
1328         int token;
1329
1330         token = io_schedule_prepare();
1331         mutex_lock(lock);
1332         io_schedule_finish(token);
1333 }
1334 EXPORT_SYMBOL_GPL(mutex_lock_io);
1335
1336 static noinline void __sched
1337 __mutex_lock_slowpath(struct mutex *lock)
1338 {
1339         __mutex_lock(lock, TASK_UNINTERRUPTIBLE, 0, NULL, _RET_IP_);
1340 }
1341
1342 static noinline int __sched
1343 __mutex_lock_killable_slowpath(struct mutex *lock)
1344 {
1345         return __mutex_lock(lock, TASK_KILLABLE, 0, NULL, _RET_IP_);
1346 }
1347
1348 static noinline int __sched
1349 __mutex_lock_interruptible_slowpath(struct mutex *lock)
1350 {
1351         return __mutex_lock(lock, TASK_INTERRUPTIBLE, 0, NULL, _RET_IP_);
1352 }
1353
1354 static noinline int __sched
1355 __ww_mutex_lock_slowpath(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
1356 {
1357         return __ww_mutex_lock(&lock->base, TASK_UNINTERRUPTIBLE, 0, NULL,
1358                                _RET_IP_, ctx);
1359 }
1360
1361 static noinline int __sched
1362 __ww_mutex_lock_interruptible_slowpath(struct ww_mutex *lock,
1363                                             struct ww_acquire_ctx *ctx)
1364 {
1365         return __ww_mutex_lock(&lock->base, TASK_INTERRUPTIBLE, 0, NULL,
1366                                _RET_IP_, ctx);
1367 }
1368
1369 #endif
1370
1371 /**
1372  * mutex_trylock - try to acquire the mutex, without waiting
1373  * @lock: the mutex to be acquired
1374  *
1375  * Try to acquire the mutex atomically. Returns 1 if the mutex
1376  * has been acquired successfully, and 0 on contention.
1377  *
1378  * NOTE: this function follows the spin_trylock() convention, so
1379  * it is negated from the down_trylock() return values! Be careful
1380  * about this when converting semaphore users to mutexes.
1381  *
1382  * This function must not be used in interrupt context. The
1383  * mutex must be released by the same task that acquired it.
1384  */
1385 int __sched mutex_trylock(struct mutex *lock)
1386 {
1387         bool locked = __mutex_trylock(lock);
1388
1389         if (locked)
1390                 mutex_acquire(&lock->dep_map, 0, 1, _RET_IP_);
1391
1392         return locked;
1393 }
1394 EXPORT_SYMBOL(mutex_trylock);
1395
1396 #ifndef CONFIG_DEBUG_LOCK_ALLOC
1397 int __sched
1398 ww_mutex_lock(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
1399 {
1400         might_sleep();
1401
1402         if (__mutex_trylock_fast(&lock->base)) {
1403                 if (ctx)
1404                         ww_mutex_set_context_fastpath(lock, ctx);
1405                 return 0;
1406         }
1407
1408         return __ww_mutex_lock_slowpath(lock, ctx);
1409 }
1410 EXPORT_SYMBOL(ww_mutex_lock);
1411
1412 int __sched
1413 ww_mutex_lock_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
1414 {
1415         might_sleep();
1416
1417         if (__mutex_trylock_fast(&lock->base)) {
1418                 if (ctx)
1419                         ww_mutex_set_context_fastpath(lock, ctx);
1420                 return 0;
1421         }
1422
1423         return __ww_mutex_lock_interruptible_slowpath(lock, ctx);
1424 }
1425 EXPORT_SYMBOL(ww_mutex_lock_interruptible);
1426
1427 #endif
1428
1429 /**
1430  * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0
1431  * @cnt: the atomic which we are to dec
1432  * @lock: the mutex to return holding if we dec to 0
1433  *
1434  * return true and hold lock if we dec to 0, return false otherwise
1435  */
1436 int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock)
1437 {
1438         /* dec if we can't possibly hit 0 */
1439         if (atomic_add_unless(cnt, -1, 1))
1440                 return 0;
1441         /* we might hit 0, so take the lock */
1442         mutex_lock(lock);
1443         if (!atomic_dec_and_test(cnt)) {
1444                 /* when we actually did the dec, we didn't hit 0 */
1445                 mutex_unlock(lock);
1446                 return 0;
1447         }
1448         /* we hit 0, and we hold the lock */
1449         return 1;
1450 }
1451 EXPORT_SYMBOL(atomic_dec_and_mutex_lock);