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