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