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 49static void 50rt_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 60static 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 66static 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) 78static 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 */ 93static 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) 129static 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 */ 138static 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 147static inline int 148rt_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 166static void 167rt_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 192static void 193rt_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 205static void 206rt_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 231static void 232rt_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 */ 250int 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 259struct 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 */ 271int 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 */ 284static 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 */ 301static 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 */ 323static 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 */ 339int max_lock_depth = 1024; 340 341static 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 * @deadlock_detect: 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 */ 409static 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 */ 751static 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 851takeit: 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 */ 873static 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 */ 963static 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 */ 1006static 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 */ 1063void 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 */ 1097static 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 return ret; 1134} 1135 1136static void rt_mutex_handle_deadlock(int res, int detect_deadlock, 1137 struct rt_mutex_waiter *w) 1138{ 1139 /* 1140 * If the result is not -EDEADLOCK or the caller requested 1141 * deadlock detection, nothing to do here. 1142 */ 1143 if (res != -EDEADLOCK || detect_deadlock) 1144 return; 1145 1146 /* 1147 * Yell lowdly and stop the task right here. 1148 */ 1149 rt_mutex_print_deadlock(w); 1150 while (1) { 1151 set_current_state(TASK_INTERRUPTIBLE); 1152 schedule(); 1153 } 1154} 1155 1156/* 1157 * Slow path lock function: 1158 */ 1159static int __sched 1160rt_mutex_slowlock(struct rt_mutex *lock, int state, 1161 struct hrtimer_sleeper *timeout, 1162 enum rtmutex_chainwalk chwalk) 1163{ 1164 struct rt_mutex_waiter waiter; 1165 int ret = 0; 1166 1167 debug_rt_mutex_init_waiter(&waiter); 1168 RB_CLEAR_NODE(&waiter.pi_tree_entry); 1169 RB_CLEAR_NODE(&waiter.tree_entry); 1170 1171 raw_spin_lock(&lock->wait_lock); 1172 1173 /* Try to acquire the lock again: */ 1174 if (try_to_take_rt_mutex(lock, current, NULL)) { 1175 raw_spin_unlock(&lock->wait_lock); 1176 return 0; 1177 } 1178 1179 set_current_state(state); 1180 1181 /* Setup the timer, when timeout != NULL */ 1182 if (unlikely(timeout)) { 1183 hrtimer_start_expires(&timeout->timer, HRTIMER_MODE_ABS); 1184 if (!hrtimer_active(&timeout->timer)) 1185 timeout->task = NULL; 1186 } 1187 1188 ret = task_blocks_on_rt_mutex(lock, &waiter, current, chwalk); 1189 1190 if (likely(!ret)) 1191 ret = __rt_mutex_slowlock(lock, state, timeout, &waiter); 1192 1193 set_current_state(TASK_RUNNING); 1194 1195 if (unlikely(ret)) { 1196 remove_waiter(lock, &waiter); 1197 rt_mutex_handle_deadlock(ret, chwalk, &waiter); 1198 } 1199 1200 /* 1201 * try_to_take_rt_mutex() sets the waiter bit 1202 * unconditionally. We might have to fix that up. 1203 */ 1204 fixup_rt_mutex_waiters(lock); 1205 1206 raw_spin_unlock(&lock->wait_lock); 1207 1208 /* Remove pending timer: */ 1209 if (unlikely(timeout)) 1210 hrtimer_cancel(&timeout->timer); 1211 1212 debug_rt_mutex_free_waiter(&waiter); 1213 1214 return ret; 1215} 1216 1217/* 1218 * Slow path try-lock function: 1219 */ 1220static inline int rt_mutex_slowtrylock(struct rt_mutex *lock) 1221{ 1222 int ret; 1223 1224 /* 1225 * If the lock already has an owner we fail to get the lock. 1226 * This can be done without taking the @lock->wait_lock as 1227 * it is only being read, and this is a trylock anyway. 1228 */ 1229 if (rt_mutex_owner(lock)) 1230 return 0; 1231 1232 /* 1233 * The mutex has currently no owner. Lock the wait lock and 1234 * try to acquire the lock. 1235 */ 1236 raw_spin_lock(&lock->wait_lock); 1237 1238 ret = try_to_take_rt_mutex(lock, current, NULL); 1239 1240 /* 1241 * try_to_take_rt_mutex() sets the lock waiters bit 1242 * unconditionally. Clean this up. 1243 */ 1244 fixup_rt_mutex_waiters(lock); 1245 1246 raw_spin_unlock(&lock->wait_lock); 1247 1248 return ret; 1249} 1250 1251/* 1252 * Slow path to release a rt-mutex: 1253 */ 1254static void __sched 1255rt_mutex_slowunlock(struct rt_mutex *lock) 1256{ 1257 raw_spin_lock(&lock->wait_lock); 1258 1259 debug_rt_mutex_unlock(lock); 1260 1261 rt_mutex_deadlock_account_unlock(current); 1262 1263 /* 1264 * We must be careful here if the fast path is enabled. If we 1265 * have no waiters queued we cannot set owner to NULL here 1266 * because of: 1267 * 1268 * foo->lock->owner = NULL; 1269 * rtmutex_lock(foo->lock); <- fast path 1270 * free = atomic_dec_and_test(foo->refcnt); 1271 * rtmutex_unlock(foo->lock); <- fast path 1272 * if (free) 1273 * kfree(foo); 1274 * raw_spin_unlock(foo->lock->wait_lock); 1275 * 1276 * So for the fastpath enabled kernel: 1277 * 1278 * Nothing can set the waiters bit as long as we hold 1279 * lock->wait_lock. So we do the following sequence: 1280 * 1281 * owner = rt_mutex_owner(lock); 1282 * clear_rt_mutex_waiters(lock); 1283 * raw_spin_unlock(&lock->wait_lock); 1284 * if (cmpxchg(&lock->owner, owner, 0) == owner) 1285 * return; 1286 * goto retry; 1287 * 1288 * The fastpath disabled variant is simple as all access to 1289 * lock->owner is serialized by lock->wait_lock: 1290 * 1291 * lock->owner = NULL; 1292 * raw_spin_unlock(&lock->wait_lock); 1293 */ 1294 while (!rt_mutex_has_waiters(lock)) { 1295 /* Drops lock->wait_lock ! */ 1296 if (unlock_rt_mutex_safe(lock) == true) 1297 return; 1298 /* Relock the rtmutex and try again */ 1299 raw_spin_lock(&lock->wait_lock); 1300 } 1301 1302 /* 1303 * The wakeup next waiter path does not suffer from the above 1304 * race. See the comments there. 1305 */ 1306 wakeup_next_waiter(lock); 1307 1308 raw_spin_unlock(&lock->wait_lock); 1309 1310 /* Undo pi boosting if necessary: */ 1311 rt_mutex_adjust_prio(current); 1312} 1313 1314/* 1315 * debug aware fast / slowpath lock,trylock,unlock 1316 * 1317 * The atomic acquire/release ops are compiled away, when either the 1318 * architecture does not support cmpxchg or when debugging is enabled. 1319 */ 1320static inline int 1321rt_mutex_fastlock(struct rt_mutex *lock, int state, 1322 int (*slowfn)(struct rt_mutex *lock, int state, 1323 struct hrtimer_sleeper *timeout, 1324 enum rtmutex_chainwalk chwalk)) 1325{ 1326 if (likely(rt_mutex_cmpxchg(lock, NULL, current))) { 1327 rt_mutex_deadlock_account_lock(lock, current); 1328 return 0; 1329 } else 1330 return slowfn(lock, state, NULL, RT_MUTEX_MIN_CHAINWALK); 1331} 1332 1333static inline int 1334rt_mutex_timed_fastlock(struct rt_mutex *lock, int state, 1335 struct hrtimer_sleeper *timeout, 1336 enum rtmutex_chainwalk chwalk, 1337 int (*slowfn)(struct rt_mutex *lock, int state, 1338 struct hrtimer_sleeper *timeout, 1339 enum rtmutex_chainwalk chwalk)) 1340{ 1341 if (chwalk == RT_MUTEX_MIN_CHAINWALK && 1342 likely(rt_mutex_cmpxchg(lock, NULL, current))) { 1343 rt_mutex_deadlock_account_lock(lock, current); 1344 return 0; 1345 } else 1346 return slowfn(lock, state, timeout, chwalk); 1347} 1348 1349static inline int 1350rt_mutex_fasttrylock(struct rt_mutex *lock, 1351 int (*slowfn)(struct rt_mutex *lock)) 1352{ 1353 if (likely(rt_mutex_cmpxchg(lock, NULL, current))) { 1354 rt_mutex_deadlock_account_lock(lock, current); 1355 return 1; 1356 } 1357 return slowfn(lock); 1358} 1359 1360static inline void 1361rt_mutex_fastunlock(struct rt_mutex *lock, 1362 void (*slowfn)(struct rt_mutex *lock)) 1363{ 1364 if (likely(rt_mutex_cmpxchg(lock, current, NULL))) 1365 rt_mutex_deadlock_account_unlock(current); 1366 else 1367 slowfn(lock); 1368} 1369 1370/** 1371 * rt_mutex_lock - lock a rt_mutex 1372 * 1373 * @lock: the rt_mutex to be locked 1374 */ 1375void __sched rt_mutex_lock(struct rt_mutex *lock) 1376{ 1377 might_sleep(); 1378 1379 rt_mutex_fastlock(lock, TASK_UNINTERRUPTIBLE, rt_mutex_slowlock); 1380} 1381EXPORT_SYMBOL_GPL(rt_mutex_lock); 1382 1383/** 1384 * rt_mutex_lock_interruptible - lock a rt_mutex interruptible 1385 * 1386 * @lock: the rt_mutex to be locked 1387 * 1388 * Returns: 1389 * 0 on success 1390 * -EINTR when interrupted by a signal 1391 */ 1392int __sched rt_mutex_lock_interruptible(struct rt_mutex *lock) 1393{ 1394 might_sleep(); 1395 1396 return rt_mutex_fastlock(lock, TASK_INTERRUPTIBLE, rt_mutex_slowlock); 1397} 1398EXPORT_SYMBOL_GPL(rt_mutex_lock_interruptible); 1399 1400/* 1401 * Futex variant with full deadlock detection. 1402 */ 1403int rt_mutex_timed_futex_lock(struct rt_mutex *lock, 1404 struct hrtimer_sleeper *timeout) 1405{ 1406 might_sleep(); 1407 1408 return rt_mutex_timed_fastlock(lock, TASK_INTERRUPTIBLE, timeout, 1409 RT_MUTEX_FULL_CHAINWALK, 1410 rt_mutex_slowlock); 1411} 1412 1413/** 1414 * rt_mutex_timed_lock - lock a rt_mutex interruptible 1415 * the timeout structure is provided 1416 * by the caller 1417 * 1418 * @lock: the rt_mutex to be locked 1419 * @timeout: timeout structure or NULL (no timeout) 1420 * 1421 * Returns: 1422 * 0 on success 1423 * -EINTR when interrupted by a signal 1424 * -ETIMEDOUT when the timeout expired 1425 */ 1426int 1427rt_mutex_timed_lock(struct rt_mutex *lock, struct hrtimer_sleeper *timeout) 1428{ 1429 might_sleep(); 1430 1431 return rt_mutex_timed_fastlock(lock, TASK_INTERRUPTIBLE, timeout, 1432 RT_MUTEX_MIN_CHAINWALK, 1433 rt_mutex_slowlock); 1434} 1435EXPORT_SYMBOL_GPL(rt_mutex_timed_lock); 1436 1437/** 1438 * rt_mutex_trylock - try to lock a rt_mutex 1439 * 1440 * @lock: the rt_mutex to be locked 1441 * 1442 * Returns 1 on success and 0 on contention 1443 */ 1444int __sched rt_mutex_trylock(struct rt_mutex *lock) 1445{ 1446 return rt_mutex_fasttrylock(lock, rt_mutex_slowtrylock); 1447} 1448EXPORT_SYMBOL_GPL(rt_mutex_trylock); 1449 1450/** 1451 * rt_mutex_unlock - unlock a rt_mutex 1452 * 1453 * @lock: the rt_mutex to be unlocked 1454 */ 1455void __sched rt_mutex_unlock(struct rt_mutex *lock) 1456{ 1457 rt_mutex_fastunlock(lock, rt_mutex_slowunlock); 1458} 1459EXPORT_SYMBOL_GPL(rt_mutex_unlock); 1460 1461/** 1462 * rt_mutex_destroy - mark a mutex unusable 1463 * @lock: the mutex to be destroyed 1464 * 1465 * This function marks the mutex uninitialized, and any subsequent 1466 * use of the mutex is forbidden. The mutex must not be locked when 1467 * this function is called. 1468 */ 1469void rt_mutex_destroy(struct rt_mutex *lock) 1470{ 1471 WARN_ON(rt_mutex_is_locked(lock)); 1472#ifdef CONFIG_DEBUG_RT_MUTEXES 1473 lock->magic = NULL; 1474#endif 1475} 1476 1477EXPORT_SYMBOL_GPL(rt_mutex_destroy); 1478 1479/** 1480 * __rt_mutex_init - initialize the rt lock 1481 * 1482 * @lock: the rt lock to be initialized 1483 * 1484 * Initialize the rt lock to unlocked state. 1485 * 1486 * Initializing of a locked rt lock is not allowed 1487 */ 1488void __rt_mutex_init(struct rt_mutex *lock, const char *name) 1489{ 1490 lock->owner = NULL; 1491 raw_spin_lock_init(&lock->wait_lock); 1492 lock->waiters = RB_ROOT; 1493 lock->waiters_leftmost = NULL; 1494 1495 debug_rt_mutex_init(lock, name); 1496} 1497EXPORT_SYMBOL_GPL(__rt_mutex_init); 1498 1499/** 1500 * rt_mutex_init_proxy_locked - initialize and lock a rt_mutex on behalf of a 1501 * proxy owner 1502 * 1503 * @lock: the rt_mutex to be locked 1504 * @proxy_owner:the task to set as owner 1505 * 1506 * No locking. Caller has to do serializing itself 1507 * Special API call for PI-futex support 1508 */ 1509void rt_mutex_init_proxy_locked(struct rt_mutex *lock, 1510 struct task_struct *proxy_owner) 1511{ 1512 __rt_mutex_init(lock, NULL); 1513 debug_rt_mutex_proxy_lock(lock, proxy_owner); 1514 rt_mutex_set_owner(lock, proxy_owner); 1515 rt_mutex_deadlock_account_lock(lock, proxy_owner); 1516} 1517 1518/** 1519 * rt_mutex_proxy_unlock - release a lock on behalf of owner 1520 * 1521 * @lock: the rt_mutex to be locked 1522 * 1523 * No locking. Caller has to do serializing itself 1524 * Special API call for PI-futex support 1525 */ 1526void rt_mutex_proxy_unlock(struct rt_mutex *lock, 1527 struct task_struct *proxy_owner) 1528{ 1529 debug_rt_mutex_proxy_unlock(lock); 1530 rt_mutex_set_owner(lock, NULL); 1531 rt_mutex_deadlock_account_unlock(proxy_owner); 1532} 1533 1534/** 1535 * rt_mutex_start_proxy_lock() - Start lock acquisition for another task 1536 * @lock: the rt_mutex to take 1537 * @waiter: the pre-initialized rt_mutex_waiter 1538 * @task: the task to prepare 1539 * 1540 * Returns: 1541 * 0 - task blocked on lock 1542 * 1 - acquired the lock for task, caller should wake it up 1543 * <0 - error 1544 * 1545 * Special API call for FUTEX_REQUEUE_PI support. 1546 */ 1547int rt_mutex_start_proxy_lock(struct rt_mutex *lock, 1548 struct rt_mutex_waiter *waiter, 1549 struct task_struct *task) 1550{ 1551 int ret; 1552 1553 raw_spin_lock(&lock->wait_lock); 1554 1555 if (try_to_take_rt_mutex(lock, task, NULL)) { 1556 raw_spin_unlock(&lock->wait_lock); 1557 return 1; 1558 } 1559 1560 /* We enforce deadlock detection for futexes */ 1561 ret = task_blocks_on_rt_mutex(lock, waiter, task, 1562 RT_MUTEX_FULL_CHAINWALK); 1563 1564 if (ret && !rt_mutex_owner(lock)) { 1565 /* 1566 * Reset the return value. We might have 1567 * returned with -EDEADLK and the owner 1568 * released the lock while we were walking the 1569 * pi chain. Let the waiter sort it out. 1570 */ 1571 ret = 0; 1572 } 1573 1574 if (unlikely(ret)) 1575 remove_waiter(lock, waiter); 1576 1577 raw_spin_unlock(&lock->wait_lock); 1578 1579 debug_rt_mutex_print_deadlock(waiter); 1580 1581 return ret; 1582} 1583 1584/** 1585 * rt_mutex_next_owner - return the next owner of the lock 1586 * 1587 * @lock: the rt lock query 1588 * 1589 * Returns the next owner of the lock or NULL 1590 * 1591 * Caller has to serialize against other accessors to the lock 1592 * itself. 1593 * 1594 * Special API call for PI-futex support 1595 */ 1596struct task_struct *rt_mutex_next_owner(struct rt_mutex *lock) 1597{ 1598 if (!rt_mutex_has_waiters(lock)) 1599 return NULL; 1600 1601 return rt_mutex_top_waiter(lock)->task; 1602} 1603 1604/** 1605 * rt_mutex_finish_proxy_lock() - Complete lock acquisition 1606 * @lock: the rt_mutex we were woken on 1607 * @to: the timeout, null if none. hrtimer should already have 1608 * been started. 1609 * @waiter: the pre-initialized rt_mutex_waiter 1610 * 1611 * Complete the lock acquisition started our behalf by another thread. 1612 * 1613 * Returns: 1614 * 0 - success 1615 * <0 - error, one of -EINTR, -ETIMEDOUT 1616 * 1617 * Special API call for PI-futex requeue support 1618 */ 1619int rt_mutex_finish_proxy_lock(struct rt_mutex *lock, 1620 struct hrtimer_sleeper *to, 1621 struct rt_mutex_waiter *waiter) 1622{ 1623 int ret; 1624 1625 raw_spin_lock(&lock->wait_lock); 1626 1627 set_current_state(TASK_INTERRUPTIBLE); 1628 1629 ret = __rt_mutex_slowlock(lock, TASK_INTERRUPTIBLE, to, waiter); 1630 1631 set_current_state(TASK_RUNNING); 1632 1633 if (unlikely(ret)) 1634 remove_waiter(lock, waiter); 1635 1636 /* 1637 * try_to_take_rt_mutex() sets the waiter bit unconditionally. We might 1638 * have to fix that up. 1639 */ 1640 fixup_rt_mutex_waiters(lock); 1641 1642 raw_spin_unlock(&lock->wait_lock); 1643 1644 return ret; 1645} 1646