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