]> asedeno.scripts.mit.edu Git - linux.git/blob - kernel/locking/mutex.c
locking/mutex: Improve inlining
[linux.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.h>
23 #include <linux/sched/rt.h>
24 #include <linux/export.h>
25 #include <linux/spinlock.h>
26 #include <linux/interrupt.h>
27 #include <linux/debug_locks.h>
28 #include <linux/osq_lock.h>
29
30 #ifdef CONFIG_DEBUG_MUTEXES
31 # include "mutex-debug.h"
32 #else
33 # include "mutex.h"
34 #endif
35
36 void
37 __mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key)
38 {
39         atomic_long_set(&lock->owner, 0);
40         spin_lock_init(&lock->wait_lock);
41         INIT_LIST_HEAD(&lock->wait_list);
42 #ifdef CONFIG_MUTEX_SPIN_ON_OWNER
43         osq_lock_init(&lock->osq);
44 #endif
45
46         debug_mutex_init(lock, name, key);
47 }
48 EXPORT_SYMBOL(__mutex_init);
49
50 /*
51  * @owner: contains: 'struct task_struct *' to the current lock owner,
52  * NULL means not owned. Since task_struct pointers are aligned at
53  * at least L1_CACHE_BYTES, we have low bits to store extra state.
54  *
55  * Bit0 indicates a non-empty waiter list; unlock must issue a wakeup.
56  * Bit1 indicates unlock needs to hand the lock to the top-waiter
57  * Bit2 indicates handoff has been done and we're waiting for pickup.
58  */
59 #define MUTEX_FLAG_WAITERS      0x01
60 #define MUTEX_FLAG_HANDOFF      0x02
61 #define MUTEX_FLAG_PICKUP       0x04
62
63 #define MUTEX_FLAGS             0x07
64
65 static inline struct task_struct *__owner_task(unsigned long owner)
66 {
67         return (struct task_struct *)(owner & ~MUTEX_FLAGS);
68 }
69
70 static inline unsigned long __owner_flags(unsigned long owner)
71 {
72         return owner & MUTEX_FLAGS;
73 }
74
75 /*
76  * Trylock variant that retuns the owning task on failure.
77  */
78 static inline struct task_struct *__mutex_trylock_or_owner(struct mutex *lock)
79 {
80         unsigned long owner, curr = (unsigned long)current;
81
82         owner = atomic_long_read(&lock->owner);
83         for (;;) { /* must loop, can race against a flag */
84                 unsigned long old, flags = __owner_flags(owner);
85                 unsigned long task = owner & ~MUTEX_FLAGS;
86
87                 if (task) {
88                         if (likely(task != curr))
89                                 break;
90
91                         if (likely(!(flags & MUTEX_FLAG_PICKUP)))
92                                 break;
93
94                         flags &= ~MUTEX_FLAG_PICKUP;
95                 } else {
96 #ifdef CONFIG_DEBUG_MUTEXES
97                         DEBUG_LOCKS_WARN_ON(flags & MUTEX_FLAG_PICKUP);
98 #endif
99                 }
100
101                 /*
102                  * We set the HANDOFF bit, we must make sure it doesn't live
103                  * past the point where we acquire it. This would be possible
104                  * if we (accidentally) set the bit on an unlocked mutex.
105                  */
106                 flags &= ~MUTEX_FLAG_HANDOFF;
107
108                 old = atomic_long_cmpxchg_acquire(&lock->owner, owner, curr | flags);
109                 if (old == owner)
110                         return NULL;
111
112                 owner = old;
113         }
114
115         return __owner_task(owner);
116 }
117
118 /*
119  * Actual trylock that will work on any unlocked state.
120  */
121 static inline bool __mutex_trylock(struct mutex *lock)
122 {
123         return !__mutex_trylock_or_owner(lock);
124 }
125
126 #ifndef CONFIG_DEBUG_LOCK_ALLOC
127 /*
128  * Lockdep annotations are contained to the slow paths for simplicity.
129  * There is nothing that would stop spreading the lockdep annotations outwards
130  * except more code.
131  */
132
133 /*
134  * Optimistic trylock that only works in the uncontended case. Make sure to
135  * follow with a __mutex_trylock() before failing.
136  */
137 static __always_inline bool __mutex_trylock_fast(struct mutex *lock)
138 {
139         unsigned long curr = (unsigned long)current;
140
141         if (!atomic_long_cmpxchg_acquire(&lock->owner, 0UL, curr))
142                 return true;
143
144         return false;
145 }
146
147 static __always_inline bool __mutex_unlock_fast(struct mutex *lock)
148 {
149         unsigned long curr = (unsigned long)current;
150
151         if (atomic_long_cmpxchg_release(&lock->owner, curr, 0UL) == curr)
152                 return true;
153
154         return false;
155 }
156 #endif
157
158 static inline void __mutex_set_flag(struct mutex *lock, unsigned long flag)
159 {
160         atomic_long_or(flag, &lock->owner);
161 }
162
163 static inline void __mutex_clear_flag(struct mutex *lock, unsigned long flag)
164 {
165         atomic_long_andnot(flag, &lock->owner);
166 }
167
168 static inline bool __mutex_waiter_is_first(struct mutex *lock, struct mutex_waiter *waiter)
169 {
170         return list_first_entry(&lock->wait_list, struct mutex_waiter, list) == waiter;
171 }
172
173 /*
174  * Give up ownership to a specific task, when @task = NULL, this is equivalent
175  * to a regular unlock. Sets PICKUP on a handoff, clears HANDOF, preserves
176  * WAITERS. Provides RELEASE semantics like a regular unlock, the
177  * __mutex_trylock() provides a matching ACQUIRE semantics for the handoff.
178  */
179 static void __mutex_handoff(struct mutex *lock, struct task_struct *task)
180 {
181         unsigned long owner = atomic_long_read(&lock->owner);
182
183         for (;;) {
184                 unsigned long old, new;
185
186 #ifdef CONFIG_DEBUG_MUTEXES
187                 DEBUG_LOCKS_WARN_ON(__owner_task(owner) != current);
188                 DEBUG_LOCKS_WARN_ON(owner & MUTEX_FLAG_PICKUP);
189 #endif
190
191                 new = (owner & MUTEX_FLAG_WAITERS);
192                 new |= (unsigned long)task;
193                 if (task)
194                         new |= MUTEX_FLAG_PICKUP;
195
196                 old = atomic_long_cmpxchg_release(&lock->owner, owner, new);
197                 if (old == owner)
198                         break;
199
200                 owner = old;
201         }
202 }
203
204 #ifndef CONFIG_DEBUG_LOCK_ALLOC
205 /*
206  * We split the mutex lock/unlock logic into separate fastpath and
207  * slowpath functions, to reduce the register pressure on the fastpath.
208  * We also put the fastpath first in the kernel image, to make sure the
209  * branch is predicted by the CPU as default-untaken.
210  */
211 static void __sched __mutex_lock_slowpath(struct mutex *lock);
212
213 /**
214  * mutex_lock - acquire the mutex
215  * @lock: the mutex to be acquired
216  *
217  * Lock the mutex exclusively for this task. If the mutex is not
218  * available right now, it will sleep until it can get it.
219  *
220  * The mutex must later on be released by the same task that
221  * acquired it. Recursive locking is not allowed. The task
222  * may not exit without first unlocking the mutex. Also, kernel
223  * memory where the mutex resides must not be freed with
224  * the mutex still locked. The mutex must first be initialized
225  * (or statically defined) before it can be locked. memset()-ing
226  * the mutex to 0 is not allowed.
227  *
228  * ( The CONFIG_DEBUG_MUTEXES .config option turns on debugging
229  *   checks that will enforce the restrictions and will also do
230  *   deadlock debugging. )
231  *
232  * This function is similar to (but not equivalent to) down().
233  */
234 void __sched mutex_lock(struct mutex *lock)
235 {
236         might_sleep();
237
238         if (!__mutex_trylock_fast(lock))
239                 __mutex_lock_slowpath(lock);
240 }
241 EXPORT_SYMBOL(mutex_lock);
242 #endif
243
244 static __always_inline void
245 ww_mutex_lock_acquired(struct ww_mutex *ww, struct ww_acquire_ctx *ww_ctx)
246 {
247 #ifdef CONFIG_DEBUG_MUTEXES
248         /*
249          * If this WARN_ON triggers, you used ww_mutex_lock to acquire,
250          * but released with a normal mutex_unlock in this call.
251          *
252          * This should never happen, always use ww_mutex_unlock.
253          */
254         DEBUG_LOCKS_WARN_ON(ww->ctx);
255
256         /*
257          * Not quite done after calling ww_acquire_done() ?
258          */
259         DEBUG_LOCKS_WARN_ON(ww_ctx->done_acquire);
260
261         if (ww_ctx->contending_lock) {
262                 /*
263                  * After -EDEADLK you tried to
264                  * acquire a different ww_mutex? Bad!
265                  */
266                 DEBUG_LOCKS_WARN_ON(ww_ctx->contending_lock != ww);
267
268                 /*
269                  * You called ww_mutex_lock after receiving -EDEADLK,
270                  * but 'forgot' to unlock everything else first?
271                  */
272                 DEBUG_LOCKS_WARN_ON(ww_ctx->acquired > 0);
273                 ww_ctx->contending_lock = NULL;
274         }
275
276         /*
277          * Naughty, using a different class will lead to undefined behavior!
278          */
279         DEBUG_LOCKS_WARN_ON(ww_ctx->ww_class != ww->ww_class);
280 #endif
281         ww_ctx->acquired++;
282 }
283
284 static inline bool __sched
285 __ww_ctx_stamp_after(struct ww_acquire_ctx *a, struct ww_acquire_ctx *b)
286 {
287         return a->stamp - b->stamp <= LONG_MAX &&
288                (a->stamp != b->stamp || a > b);
289 }
290
291 /*
292  * Wake up any waiters that may have to back off when the lock is held by the
293  * given context.
294  *
295  * Due to the invariants on the wait list, this can only affect the first
296  * waiter with a context.
297  *
298  * The current task must not be on the wait list.
299  */
300 static void __sched
301 __ww_mutex_wakeup_for_backoff(struct mutex *lock, struct ww_acquire_ctx *ww_ctx)
302 {
303         struct mutex_waiter *cur;
304
305         lockdep_assert_held(&lock->wait_lock);
306
307         list_for_each_entry(cur, &lock->wait_list, list) {
308                 if (!cur->ww_ctx)
309                         continue;
310
311                 if (cur->ww_ctx->acquired > 0 &&
312                     __ww_ctx_stamp_after(cur->ww_ctx, ww_ctx)) {
313                         debug_mutex_wake_waiter(lock, cur);
314                         wake_up_process(cur->task);
315                 }
316
317                 break;
318         }
319 }
320
321 /*
322  * After acquiring lock with fastpath or when we lost out in contested
323  * slowpath, set ctx and wake up any waiters so they can recheck.
324  */
325 static __always_inline void
326 ww_mutex_set_context_fastpath(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
327 {
328         unsigned long flags;
329
330         ww_mutex_lock_acquired(lock, ctx);
331
332         lock->ctx = ctx;
333
334         /*
335          * The lock->ctx update should be visible on all cores before
336          * the atomic read is done, otherwise contended waiters might be
337          * missed. The contended waiters will either see ww_ctx == NULL
338          * and keep spinning, or it will acquire wait_lock, add itself
339          * to waiter list and sleep.
340          */
341         smp_mb(); /* ^^^ */
342
343         /*
344          * Check if lock is contended, if not there is nobody to wake up
345          */
346         if (likely(!(atomic_long_read(&lock->base.owner) & MUTEX_FLAG_WAITERS)))
347                 return;
348
349         /*
350          * Uh oh, we raced in fastpath, wake up everyone in this case,
351          * so they can see the new lock->ctx.
352          */
353         spin_lock_mutex(&lock->base.wait_lock, flags);
354         __ww_mutex_wakeup_for_backoff(&lock->base, ctx);
355         spin_unlock_mutex(&lock->base.wait_lock, flags);
356 }
357
358 /*
359  * After acquiring lock in the slowpath set ctx.
360  *
361  * Unlike for the fast path, the caller ensures that waiters are woken up where
362  * necessary.
363  *
364  * Callers must hold the mutex wait_lock.
365  */
366 static __always_inline void
367 ww_mutex_set_context_slowpath(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
368 {
369         ww_mutex_lock_acquired(lock, ctx);
370         lock->ctx = ctx;
371 }
372
373 #ifdef CONFIG_MUTEX_SPIN_ON_OWNER
374 /*
375  * Look out! "owner" is an entirely speculative pointer
376  * access and not reliable.
377  */
378 static noinline
379 bool mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner)
380 {
381         bool ret = true;
382
383         rcu_read_lock();
384         while (__mutex_owner(lock) == owner) {
385                 /*
386                  * Ensure we emit the owner->on_cpu, dereference _after_
387                  * checking lock->owner still matches owner. If that fails,
388                  * owner might point to freed memory. If it still matches,
389                  * the rcu_read_lock() ensures the memory stays valid.
390                  */
391                 barrier();
392
393                 /*
394                  * Use vcpu_is_preempted to detect lock holder preemption issue.
395                  */
396                 if (!owner->on_cpu || need_resched() ||
397                                 vcpu_is_preempted(task_cpu(owner))) {
398                         ret = false;
399                         break;
400                 }
401
402                 cpu_relax();
403         }
404         rcu_read_unlock();
405
406         return ret;
407 }
408
409 /*
410  * Initial check for entering the mutex spinning loop
411  */
412 static inline int mutex_can_spin_on_owner(struct mutex *lock)
413 {
414         struct task_struct *owner;
415         int retval = 1;
416
417         if (need_resched())
418                 return 0;
419
420         rcu_read_lock();
421         owner = __mutex_owner(lock);
422
423         /*
424          * As lock holder preemption issue, we both skip spinning if task is not
425          * on cpu or its cpu is preempted
426          */
427         if (owner)
428                 retval = owner->on_cpu && !vcpu_is_preempted(task_cpu(owner));
429         rcu_read_unlock();
430
431         /*
432          * If lock->owner is not set, the mutex has been released. Return true
433          * such that we'll trylock in the spin path, which is a faster option
434          * than the blocking slow path.
435          */
436         return retval;
437 }
438
439 /*
440  * Optimistic spinning.
441  *
442  * We try to spin for acquisition when we find that the lock owner
443  * is currently running on a (different) CPU and while we don't
444  * need to reschedule. The rationale is that if the lock owner is
445  * running, it is likely to release the lock soon.
446  *
447  * The mutex spinners are queued up using MCS lock so that only one
448  * spinner can compete for the mutex. However, if mutex spinning isn't
449  * going to happen, there is no point in going through the lock/unlock
450  * overhead.
451  *
452  * Returns true when the lock was taken, otherwise false, indicating
453  * that we need to jump to the slowpath and sleep.
454  *
455  * The waiter flag is set to true if the spinner is a waiter in the wait
456  * queue. The waiter-spinner will spin on the lock directly and concurrently
457  * with the spinner at the head of the OSQ, if present, until the owner is
458  * changed to itself.
459  */
460 static __always_inline bool
461 mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
462                       const bool use_ww_ctx, const bool waiter)
463 {
464         if (!waiter) {
465                 /*
466                  * The purpose of the mutex_can_spin_on_owner() function is
467                  * to eliminate the overhead of osq_lock() and osq_unlock()
468                  * in case spinning isn't possible. As a waiter-spinner
469                  * is not going to take OSQ lock anyway, there is no need
470                  * to call mutex_can_spin_on_owner().
471                  */
472                 if (!mutex_can_spin_on_owner(lock))
473                         goto fail;
474
475                 /*
476                  * In order to avoid a stampede of mutex spinners trying to
477                  * acquire the mutex all at once, the spinners need to take a
478                  * MCS (queued) lock first before spinning on the owner field.
479                  */
480                 if (!osq_lock(&lock->osq))
481                         goto fail;
482         }
483
484         for (;;) {
485                 struct task_struct *owner;
486
487                 if (use_ww_ctx && ww_ctx && ww_ctx->acquired > 0) {
488                         struct ww_mutex *ww;
489
490                         ww = container_of(lock, struct ww_mutex, base);
491                         /*
492                          * If ww->ctx is set the contents are undefined, only
493                          * by acquiring wait_lock there is a guarantee that
494                          * they are not invalid when reading.
495                          *
496                          * As such, when deadlock detection needs to be
497                          * performed the optimistic spinning cannot be done.
498                          */
499                         if (READ_ONCE(ww->ctx))
500                                 goto fail_unlock;
501                 }
502
503                 /* Try to acquire the mutex... */
504                 owner = __mutex_trylock_or_owner(lock);
505                 if (!owner)
506                         break;
507
508                 /*
509                  * There's an owner, wait for it to either
510                  * release the lock or go to sleep.
511                  */
512                 if (!mutex_spin_on_owner(lock, owner))
513                         goto fail_unlock;
514
515                 /*
516                  * The cpu_relax() call is a compiler barrier which forces
517                  * everything in this loop to be re-loaded. We don't need
518                  * memory barriers as we'll eventually observe the right
519                  * values at the cost of a few extra spins.
520                  */
521                 cpu_relax();
522         }
523
524         if (!waiter)
525                 osq_unlock(&lock->osq);
526
527         return true;
528
529
530 fail_unlock:
531         if (!waiter)
532                 osq_unlock(&lock->osq);
533
534 fail:
535         /*
536          * If we fell out of the spin path because of need_resched(),
537          * reschedule now, before we try-lock the mutex. This avoids getting
538          * scheduled out right after we obtained the mutex.
539          */
540         if (need_resched()) {
541                 /*
542                  * We _should_ have TASK_RUNNING here, but just in case
543                  * we do not, make it so, otherwise we might get stuck.
544                  */
545                 __set_current_state(TASK_RUNNING);
546                 schedule_preempt_disabled();
547         }
548
549         return false;
550 }
551 #else
552 static __always_inline bool
553 mutex_optimistic_spin(struct mutex *lock, struct ww_acquire_ctx *ww_ctx,
554                       const bool use_ww_ctx, const bool waiter)
555 {
556         return false;
557 }
558 #endif
559
560 static noinline void __sched __mutex_unlock_slowpath(struct mutex *lock, unsigned long ip);
561
562 /**
563  * mutex_unlock - release the mutex
564  * @lock: the mutex to be released
565  *
566  * Unlock a mutex that has been locked by this task previously.
567  *
568  * This function must not be used in interrupt context. Unlocking
569  * of a not locked mutex is not allowed.
570  *
571  * This function is similar to (but not equivalent to) up().
572  */
573 void __sched mutex_unlock(struct mutex *lock)
574 {
575 #ifndef CONFIG_DEBUG_LOCK_ALLOC
576         if (__mutex_unlock_fast(lock))
577                 return;
578 #endif
579         __mutex_unlock_slowpath(lock, _RET_IP_);
580 }
581 EXPORT_SYMBOL(mutex_unlock);
582
583 /**
584  * ww_mutex_unlock - release the w/w mutex
585  * @lock: the mutex to be released
586  *
587  * Unlock a mutex that has been locked by this task previously with any of the
588  * ww_mutex_lock* functions (with or without an acquire context). It is
589  * forbidden to release the locks after releasing the acquire context.
590  *
591  * This function must not be used in interrupt context. Unlocking
592  * of a unlocked mutex is not allowed.
593  */
594 void __sched ww_mutex_unlock(struct ww_mutex *lock)
595 {
596         /*
597          * The unlocking fastpath is the 0->1 transition from 'locked'
598          * into 'unlocked' state:
599          */
600         if (lock->ctx) {
601 #ifdef CONFIG_DEBUG_MUTEXES
602                 DEBUG_LOCKS_WARN_ON(!lock->ctx->acquired);
603 #endif
604                 if (lock->ctx->acquired > 0)
605                         lock->ctx->acquired--;
606                 lock->ctx = NULL;
607         }
608
609         mutex_unlock(&lock->base);
610 }
611 EXPORT_SYMBOL(ww_mutex_unlock);
612
613 static inline int __sched
614 __ww_mutex_lock_check_stamp(struct mutex *lock, struct mutex_waiter *waiter,
615                             struct ww_acquire_ctx *ctx)
616 {
617         struct ww_mutex *ww = container_of(lock, struct ww_mutex, base);
618         struct ww_acquire_ctx *hold_ctx = READ_ONCE(ww->ctx);
619         struct mutex_waiter *cur;
620
621         if (hold_ctx && __ww_ctx_stamp_after(ctx, hold_ctx))
622                 goto deadlock;
623
624         /*
625          * If there is a waiter in front of us that has a context, then its
626          * stamp is earlier than ours and we must back off.
627          */
628         cur = waiter;
629         list_for_each_entry_continue_reverse(cur, &lock->wait_list, list) {
630                 if (cur->ww_ctx)
631                         goto deadlock;
632         }
633
634         return 0;
635
636 deadlock:
637 #ifdef CONFIG_DEBUG_MUTEXES
638         DEBUG_LOCKS_WARN_ON(ctx->contending_lock);
639         ctx->contending_lock = ww;
640 #endif
641         return -EDEADLK;
642 }
643
644 static inline int __sched
645 __ww_mutex_add_waiter(struct mutex_waiter *waiter,
646                       struct mutex *lock,
647                       struct ww_acquire_ctx *ww_ctx)
648 {
649         struct mutex_waiter *cur;
650         struct list_head *pos;
651
652         if (!ww_ctx) {
653                 list_add_tail(&waiter->list, &lock->wait_list);
654                 return 0;
655         }
656
657         /*
658          * Add the waiter before the first waiter with a higher stamp.
659          * Waiters without a context are skipped to avoid starving
660          * them.
661          */
662         pos = &lock->wait_list;
663         list_for_each_entry_reverse(cur, &lock->wait_list, list) {
664                 if (!cur->ww_ctx)
665                         continue;
666
667                 if (__ww_ctx_stamp_after(ww_ctx, cur->ww_ctx)) {
668                         /* Back off immediately if necessary. */
669                         if (ww_ctx->acquired > 0) {
670 #ifdef CONFIG_DEBUG_MUTEXES
671                                 struct ww_mutex *ww;
672
673                                 ww = container_of(lock, struct ww_mutex, base);
674                                 DEBUG_LOCKS_WARN_ON(ww_ctx->contending_lock);
675                                 ww_ctx->contending_lock = ww;
676 #endif
677                                 return -EDEADLK;
678                         }
679
680                         break;
681                 }
682
683                 pos = &cur->list;
684
685                 /*
686                  * Wake up the waiter so that it gets a chance to back
687                  * off.
688                  */
689                 if (cur->ww_ctx->acquired > 0) {
690                         debug_mutex_wake_waiter(lock, cur);
691                         wake_up_process(cur->task);
692                 }
693         }
694
695         list_add_tail(&waiter->list, pos);
696         return 0;
697 }
698
699 /*
700  * Lock a mutex (possibly interruptible), slowpath:
701  */
702 static __always_inline int __sched
703 __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
704                     struct lockdep_map *nest_lock, unsigned long ip,
705                     struct ww_acquire_ctx *ww_ctx, const bool use_ww_ctx)
706 {
707         struct mutex_waiter waiter;
708         unsigned long flags;
709         bool first = false;
710         struct ww_mutex *ww;
711         int ret;
712
713         might_sleep();
714
715         ww = container_of(lock, struct ww_mutex, base);
716         if (use_ww_ctx && ww_ctx) {
717                 if (unlikely(ww_ctx == READ_ONCE(ww->ctx)))
718                         return -EALREADY;
719         }
720
721         preempt_disable();
722         mutex_acquire_nest(&lock->dep_map, subclass, 0, nest_lock, ip);
723
724         if (__mutex_trylock(lock) ||
725             mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, false)) {
726                 /* got the lock, yay! */
727                 lock_acquired(&lock->dep_map, ip);
728                 if (use_ww_ctx && ww_ctx)
729                         ww_mutex_set_context_fastpath(ww, ww_ctx);
730                 preempt_enable();
731                 return 0;
732         }
733
734         spin_lock_mutex(&lock->wait_lock, flags);
735         /*
736          * After waiting to acquire the wait_lock, try again.
737          */
738         if (__mutex_trylock(lock)) {
739                 if (use_ww_ctx && ww_ctx)
740                         __ww_mutex_wakeup_for_backoff(lock, ww_ctx);
741
742                 goto skip_wait;
743         }
744
745         debug_mutex_lock_common(lock, &waiter);
746         debug_mutex_add_waiter(lock, &waiter, current);
747
748         lock_contended(&lock->dep_map, ip);
749
750         if (!use_ww_ctx) {
751                 /* add waiting tasks to the end of the waitqueue (FIFO): */
752                 list_add_tail(&waiter.list, &lock->wait_list);
753         } else {
754                 /* Add in stamp order, waking up waiters that must back off. */
755                 ret = __ww_mutex_add_waiter(&waiter, lock, ww_ctx);
756                 if (ret)
757                         goto err_early_backoff;
758
759                 waiter.ww_ctx = ww_ctx;
760         }
761
762         waiter.task = current;
763
764         if (__mutex_waiter_is_first(lock, &waiter))
765                 __mutex_set_flag(lock, MUTEX_FLAG_WAITERS);
766
767         set_current_state(state);
768         for (;;) {
769                 /*
770                  * Once we hold wait_lock, we're serialized against
771                  * mutex_unlock() handing the lock off to us, do a trylock
772                  * before testing the error conditions to make sure we pick up
773                  * the handoff.
774                  */
775                 if (__mutex_trylock(lock))
776                         goto acquired;
777
778                 /*
779                  * Check for signals and wound conditions while holding
780                  * wait_lock. This ensures the lock cancellation is ordered
781                  * against mutex_unlock() and wake-ups do not go missing.
782                  */
783                 if (unlikely(signal_pending_state(state, current))) {
784                         ret = -EINTR;
785                         goto err;
786                 }
787
788                 if (use_ww_ctx && ww_ctx && ww_ctx->acquired > 0) {
789                         ret = __ww_mutex_lock_check_stamp(lock, &waiter, ww_ctx);
790                         if (ret)
791                                 goto err;
792                 }
793
794                 spin_unlock_mutex(&lock->wait_lock, flags);
795                 schedule_preempt_disabled();
796
797                 /*
798                  * ww_mutex needs to always recheck its position since its waiter
799                  * list is not FIFO ordered.
800                  */
801                 if ((use_ww_ctx && ww_ctx) || !first) {
802                         first = __mutex_waiter_is_first(lock, &waiter);
803                         if (first)
804                                 __mutex_set_flag(lock, MUTEX_FLAG_HANDOFF);
805                 }
806
807                 set_current_state(state);
808                 /*
809                  * Here we order against unlock; we must either see it change
810                  * state back to RUNNING and fall through the next schedule(),
811                  * or we must see its unlock and acquire.
812                  */
813                 if (__mutex_trylock(lock) ||
814                     (first && mutex_optimistic_spin(lock, ww_ctx, use_ww_ctx, true)))
815                         break;
816
817                 spin_lock_mutex(&lock->wait_lock, flags);
818         }
819         spin_lock_mutex(&lock->wait_lock, flags);
820 acquired:
821         __set_current_state(TASK_RUNNING);
822
823         mutex_remove_waiter(lock, &waiter, current);
824         if (likely(list_empty(&lock->wait_list)))
825                 __mutex_clear_flag(lock, MUTEX_FLAGS);
826
827         debug_mutex_free_waiter(&waiter);
828
829 skip_wait:
830         /* got the lock - cleanup and rejoice! */
831         lock_acquired(&lock->dep_map, ip);
832
833         if (use_ww_ctx && ww_ctx)
834                 ww_mutex_set_context_slowpath(ww, ww_ctx);
835
836         spin_unlock_mutex(&lock->wait_lock, flags);
837         preempt_enable();
838         return 0;
839
840 err:
841         __set_current_state(TASK_RUNNING);
842         mutex_remove_waiter(lock, &waiter, current);
843 err_early_backoff:
844         spin_unlock_mutex(&lock->wait_lock, flags);
845         debug_mutex_free_waiter(&waiter);
846         mutex_release(&lock->dep_map, 1, ip);
847         preempt_enable();
848         return ret;
849 }
850
851 static int __sched
852 __mutex_lock(struct mutex *lock, long state, unsigned int subclass,
853              struct lockdep_map *nest_lock, unsigned long ip)
854 {
855         return __mutex_lock_common(lock, state, subclass, nest_lock, ip, NULL, false);
856 }
857
858 static int __sched
859 __ww_mutex_lock(struct mutex *lock, long state, unsigned int subclass,
860                 struct lockdep_map *nest_lock, unsigned long ip,
861                 struct ww_acquire_ctx *ww_ctx)
862 {
863         return __mutex_lock_common(lock, state, subclass, nest_lock, ip, ww_ctx, true);
864 }
865
866 #ifdef CONFIG_DEBUG_LOCK_ALLOC
867 void __sched
868 mutex_lock_nested(struct mutex *lock, unsigned int subclass)
869 {
870         __mutex_lock(lock, TASK_UNINTERRUPTIBLE, subclass, NULL, _RET_IP_);
871 }
872
873 EXPORT_SYMBOL_GPL(mutex_lock_nested);
874
875 void __sched
876 _mutex_lock_nest_lock(struct mutex *lock, struct lockdep_map *nest)
877 {
878         __mutex_lock(lock, TASK_UNINTERRUPTIBLE, 0, nest, _RET_IP_);
879 }
880 EXPORT_SYMBOL_GPL(_mutex_lock_nest_lock);
881
882 int __sched
883 mutex_lock_killable_nested(struct mutex *lock, unsigned int subclass)
884 {
885         return __mutex_lock(lock, TASK_KILLABLE, subclass, NULL, _RET_IP_);
886 }
887 EXPORT_SYMBOL_GPL(mutex_lock_killable_nested);
888
889 int __sched
890 mutex_lock_interruptible_nested(struct mutex *lock, unsigned int subclass)
891 {
892         return __mutex_lock(lock, TASK_INTERRUPTIBLE, subclass, NULL, _RET_IP_);
893 }
894 EXPORT_SYMBOL_GPL(mutex_lock_interruptible_nested);
895
896 static inline int
897 ww_mutex_deadlock_injection(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
898 {
899 #ifdef CONFIG_DEBUG_WW_MUTEX_SLOWPATH
900         unsigned tmp;
901
902         if (ctx->deadlock_inject_countdown-- == 0) {
903                 tmp = ctx->deadlock_inject_interval;
904                 if (tmp > UINT_MAX/4)
905                         tmp = UINT_MAX;
906                 else
907                         tmp = tmp*2 + tmp + tmp/2;
908
909                 ctx->deadlock_inject_interval = tmp;
910                 ctx->deadlock_inject_countdown = tmp;
911                 ctx->contending_lock = lock;
912
913                 ww_mutex_unlock(lock);
914
915                 return -EDEADLK;
916         }
917 #endif
918
919         return 0;
920 }
921
922 int __sched
923 ww_mutex_lock(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
924 {
925         int ret;
926
927         might_sleep();
928         ret =  __ww_mutex_lock(&lock->base, TASK_UNINTERRUPTIBLE,
929                                0, ctx ? &ctx->dep_map : NULL, _RET_IP_,
930                                ctx);
931         if (!ret && ctx && ctx->acquired > 1)
932                 return ww_mutex_deadlock_injection(lock, ctx);
933
934         return ret;
935 }
936 EXPORT_SYMBOL_GPL(ww_mutex_lock);
937
938 int __sched
939 ww_mutex_lock_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
940 {
941         int ret;
942
943         might_sleep();
944         ret = __ww_mutex_lock(&lock->base, TASK_INTERRUPTIBLE,
945                               0, ctx ? &ctx->dep_map : NULL, _RET_IP_,
946                               ctx);
947
948         if (!ret && ctx && ctx->acquired > 1)
949                 return ww_mutex_deadlock_injection(lock, ctx);
950
951         return ret;
952 }
953 EXPORT_SYMBOL_GPL(ww_mutex_lock_interruptible);
954
955 #endif
956
957 /*
958  * Release the lock, slowpath:
959  */
960 static noinline void __sched __mutex_unlock_slowpath(struct mutex *lock, unsigned long ip)
961 {
962         struct task_struct *next = NULL;
963         unsigned long owner, flags;
964         DEFINE_WAKE_Q(wake_q);
965
966         mutex_release(&lock->dep_map, 1, ip);
967
968         /*
969          * Release the lock before (potentially) taking the spinlock such that
970          * other contenders can get on with things ASAP.
971          *
972          * Except when HANDOFF, in that case we must not clear the owner field,
973          * but instead set it to the top waiter.
974          */
975         owner = atomic_long_read(&lock->owner);
976         for (;;) {
977                 unsigned long old;
978
979 #ifdef CONFIG_DEBUG_MUTEXES
980                 DEBUG_LOCKS_WARN_ON(__owner_task(owner) != current);
981                 DEBUG_LOCKS_WARN_ON(owner & MUTEX_FLAG_PICKUP);
982 #endif
983
984                 if (owner & MUTEX_FLAG_HANDOFF)
985                         break;
986
987                 old = atomic_long_cmpxchg_release(&lock->owner, owner,
988                                                   __owner_flags(owner));
989                 if (old == owner) {
990                         if (owner & MUTEX_FLAG_WAITERS)
991                                 break;
992
993                         return;
994                 }
995
996                 owner = old;
997         }
998
999         spin_lock_mutex(&lock->wait_lock, flags);
1000         debug_mutex_unlock(lock);
1001         if (!list_empty(&lock->wait_list)) {
1002                 /* get the first entry from the wait-list: */
1003                 struct mutex_waiter *waiter =
1004                         list_first_entry(&lock->wait_list,
1005                                          struct mutex_waiter, list);
1006
1007                 next = waiter->task;
1008
1009                 debug_mutex_wake_waiter(lock, waiter);
1010                 wake_q_add(&wake_q, next);
1011         }
1012
1013         if (owner & MUTEX_FLAG_HANDOFF)
1014                 __mutex_handoff(lock, next);
1015
1016         spin_unlock_mutex(&lock->wait_lock, flags);
1017
1018         wake_up_q(&wake_q);
1019 }
1020
1021 #ifndef CONFIG_DEBUG_LOCK_ALLOC
1022 /*
1023  * Here come the less common (and hence less performance-critical) APIs:
1024  * mutex_lock_interruptible() and mutex_trylock().
1025  */
1026 static noinline int __sched
1027 __mutex_lock_killable_slowpath(struct mutex *lock);
1028
1029 static noinline int __sched
1030 __mutex_lock_interruptible_slowpath(struct mutex *lock);
1031
1032 /**
1033  * mutex_lock_interruptible - acquire the mutex, interruptible
1034  * @lock: the mutex to be acquired
1035  *
1036  * Lock the mutex like mutex_lock(), and return 0 if the mutex has
1037  * been acquired or sleep until the mutex becomes available. If a
1038  * signal arrives while waiting for the lock then this function
1039  * returns -EINTR.
1040  *
1041  * This function is similar to (but not equivalent to) down_interruptible().
1042  */
1043 int __sched mutex_lock_interruptible(struct mutex *lock)
1044 {
1045         might_sleep();
1046
1047         if (__mutex_trylock_fast(lock))
1048                 return 0;
1049
1050         return __mutex_lock_interruptible_slowpath(lock);
1051 }
1052
1053 EXPORT_SYMBOL(mutex_lock_interruptible);
1054
1055 int __sched mutex_lock_killable(struct mutex *lock)
1056 {
1057         might_sleep();
1058
1059         if (__mutex_trylock_fast(lock))
1060                 return 0;
1061
1062         return __mutex_lock_killable_slowpath(lock);
1063 }
1064 EXPORT_SYMBOL(mutex_lock_killable);
1065
1066 static noinline void __sched
1067 __mutex_lock_slowpath(struct mutex *lock)
1068 {
1069         __mutex_lock(lock, TASK_UNINTERRUPTIBLE, 0, NULL, _RET_IP_);
1070 }
1071
1072 static noinline int __sched
1073 __mutex_lock_killable_slowpath(struct mutex *lock)
1074 {
1075         return __mutex_lock(lock, TASK_KILLABLE, 0, NULL, _RET_IP_);
1076 }
1077
1078 static noinline int __sched
1079 __mutex_lock_interruptible_slowpath(struct mutex *lock)
1080 {
1081         return __mutex_lock(lock, TASK_INTERRUPTIBLE, 0, NULL, _RET_IP_);
1082 }
1083
1084 static noinline int __sched
1085 __ww_mutex_lock_slowpath(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
1086 {
1087         return __ww_mutex_lock(&lock->base, TASK_UNINTERRUPTIBLE, 0, NULL,
1088                                _RET_IP_, ctx);
1089 }
1090
1091 static noinline int __sched
1092 __ww_mutex_lock_interruptible_slowpath(struct ww_mutex *lock,
1093                                             struct ww_acquire_ctx *ctx)
1094 {
1095         return __ww_mutex_lock(&lock->base, TASK_INTERRUPTIBLE, 0, NULL,
1096                                _RET_IP_, ctx);
1097 }
1098
1099 #endif
1100
1101 /**
1102  * mutex_trylock - try to acquire the mutex, without waiting
1103  * @lock: the mutex to be acquired
1104  *
1105  * Try to acquire the mutex atomically. Returns 1 if the mutex
1106  * has been acquired successfully, and 0 on contention.
1107  *
1108  * NOTE: this function follows the spin_trylock() convention, so
1109  * it is negated from the down_trylock() return values! Be careful
1110  * about this when converting semaphore users to mutexes.
1111  *
1112  * This function must not be used in interrupt context. The
1113  * mutex must be released by the same task that acquired it.
1114  */
1115 int __sched mutex_trylock(struct mutex *lock)
1116 {
1117         bool locked = __mutex_trylock(lock);
1118
1119         if (locked)
1120                 mutex_acquire(&lock->dep_map, 0, 1, _RET_IP_);
1121
1122         return locked;
1123 }
1124 EXPORT_SYMBOL(mutex_trylock);
1125
1126 #ifndef CONFIG_DEBUG_LOCK_ALLOC
1127 int __sched
1128 ww_mutex_lock(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
1129 {
1130         might_sleep();
1131
1132         if (__mutex_trylock_fast(&lock->base)) {
1133                 if (ctx)
1134                         ww_mutex_set_context_fastpath(lock, ctx);
1135                 return 0;
1136         }
1137
1138         return __ww_mutex_lock_slowpath(lock, ctx);
1139 }
1140 EXPORT_SYMBOL(ww_mutex_lock);
1141
1142 int __sched
1143 ww_mutex_lock_interruptible(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
1144 {
1145         might_sleep();
1146
1147         if (__mutex_trylock_fast(&lock->base)) {
1148                 if (ctx)
1149                         ww_mutex_set_context_fastpath(lock, ctx);
1150                 return 0;
1151         }
1152
1153         return __ww_mutex_lock_interruptible_slowpath(lock, ctx);
1154 }
1155 EXPORT_SYMBOL(ww_mutex_lock_interruptible);
1156
1157 #endif
1158
1159 /**
1160  * atomic_dec_and_mutex_lock - return holding mutex if we dec to 0
1161  * @cnt: the atomic which we are to dec
1162  * @lock: the mutex to return holding if we dec to 0
1163  *
1164  * return true and hold lock if we dec to 0, return false otherwise
1165  */
1166 int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock)
1167 {
1168         /* dec if we can't possibly hit 0 */
1169         if (atomic_add_unless(cnt, -1, 1))
1170                 return 0;
1171         /* we might hit 0, so take the lock */
1172         mutex_lock(lock);
1173         if (!atomic_dec_and_test(cnt)) {
1174                 /* when we actually did the dec, we didn't hit 0 */
1175                 mutex_unlock(lock);
1176                 return 0;
1177         }
1178         /* we hit 0, and we hold the lock */
1179         return 1;
1180 }
1181 EXPORT_SYMBOL(atomic_dec_and_mutex_lock);