Re: [PATCH] rtmutex: Drop pointless static qualifier in rt_mutex_adjust_prio_chain()

From: kbuild test robot
Date: Tue Aug 07 2018 - 14:34:59 EST


Hi Mao,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on tip/locking/core]
[also build test WARNING on v4.18-rc8 next-20180807]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Mao-Wenan/rtmutex-Drop-pointless-static-qualifier-in-rt_mutex_adjust_prio_chain/20180808-013010
config: x86_64-randconfig-x010-201831 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

kernel/locking/rtmutex.c: In function 'rt_mutex_adjust_prio_chain':
>> kernel/locking/rtmutex.c:481:6: warning: 'prev_max' may be used uninitialized in this function [-Wmaybe-uninitialized]
if (prev_max != max_lock_depth) {
^

vim +/prev_max +481 kernel/locking/rtmutex.c

820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 384
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 385 /*
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 386 * Adjust the priority chain. Also used for deadlock detection.
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 387 * Decreases task's usage by one - may thus free the task.
0c1061733 kernel/rtmutex.c Juri Lelli 2013-05-15 388 *
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 389 * @task: the task owning the mutex (owner) for which a chain walk is
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 390 * probably needed
e6beaa363 kernel/locking/rtmutex.c Tom(JeHyeon Yeon 2015-03-18 391) * @chwalk: do we have to carry out deadlock detection?
0c1061733 kernel/rtmutex.c Juri Lelli 2013-05-15 392 * @orig_lock: the mutex (can be NULL if we are walking the chain to recheck
0c1061733 kernel/rtmutex.c Juri Lelli 2013-05-15 393 * things for a task that has just got its priority adjusted, and
0c1061733 kernel/rtmutex.c Juri Lelli 2013-05-15 394 * is waiting on a mutex)
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 395 * @next_lock: the mutex on which the owner of @orig_lock was blocked before
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 396 * we dropped its pi_lock. Is never dereferenced, only used for
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 397 * comparison to detect lock chain changes.
0c1061733 kernel/rtmutex.c Juri Lelli 2013-05-15 398 * @orig_waiter: rt_mutex_waiter struct for the task that has just donated
0c1061733 kernel/rtmutex.c Juri Lelli 2013-05-15 399 * its priority to the mutex owner (can be NULL in the case
0c1061733 kernel/rtmutex.c Juri Lelli 2013-05-15 400 * depicted above or if the top waiter is gone away and we are
0c1061733 kernel/rtmutex.c Juri Lelli 2013-05-15 401 * actually deboosting the owner)
0c1061733 kernel/rtmutex.c Juri Lelli 2013-05-15 402 * @top_task: the current top waiter
0c1061733 kernel/rtmutex.c Juri Lelli 2013-05-15 403 *
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 404 * Returns 0 or -EDEADLK.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 405 *
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 406 * Chain walk basics and protection scope
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 407 *
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 408 * [R] refcount on task
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 409 * [P] task->pi_lock held
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 410 * [L] rtmutex->wait_lock held
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 411 *
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 412 * Step Description Protected by
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 413 * function arguments:
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 414 * @task [R]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 415 * @orig_lock if != NULL @top_task is blocked on it
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 416 * @next_lock Unprotected. Cannot be
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 417 * dereferenced. Only used for
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 418 * comparison.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 419 * @orig_waiter if != NULL @top_task is blocked on it
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 420 * @top_task current, or in case of proxy
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 421 * locking protected by calling
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 422 * code
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 423 * again:
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 424 * loop_sanity_check();
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 425 * retry:
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 426 * [1] lock(task->pi_lock); [R] acquire [P]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 427 * [2] waiter = task->pi_blocked_on; [P]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 428 * [3] check_exit_conditions_1(); [P]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 429 * [4] lock = waiter->lock; [P]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 430 * [5] if (!try_lock(lock->wait_lock)) { [P] try to acquire [L]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 431 * unlock(task->pi_lock); release [P]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 432 * goto retry;
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 433 * }
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 434 * [6] check_exit_conditions_2(); [P] + [L]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 435 * [7] requeue_lock_waiter(lock, waiter); [P] + [L]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 436 * [8] unlock(task->pi_lock); release [P]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 437 * put_task_struct(task); release [R]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 438 * [9] check_exit_conditions_3(); [L]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 439 * [10] task = owner(lock); [L]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 440 * get_task_struct(task); [L] acquire [R]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 441 * lock(task->pi_lock); [L] acquire [P]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 442 * [11] requeue_pi_waiter(tsk, waiters(lock));[P] + [L]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 443 * [12] check_exit_conditions_4(); [P] + [L]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 444 * [13] unlock(task->pi_lock); release [P]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 445 * unlock(lock->wait_lock); release [L]
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 446 * goto again;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 447 */
bd197234b kernel/rtmutex.c Thomas Gleixner 2007-06-17 448 static int rt_mutex_adjust_prio_chain(struct task_struct *task,
8930ed80f kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 449 enum rtmutex_chainwalk chwalk,
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 450 struct rt_mutex *orig_lock,
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 451 struct rt_mutex *next_lock,
95e02ca9b kernel/rtmutex.c Thomas Gleixner 2006-06-27 452 struct rt_mutex_waiter *orig_waiter,
9a11b49a8 kernel/rtmutex.c Ingo Molnar 2006-07-03 453 struct task_struct *top_task)
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 454 {
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 455 struct rt_mutex_waiter *waiter, *top_waiter = orig_waiter;
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 456 struct rt_mutex_waiter *prerequeue_top_waiter;
8930ed80f kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 457 int ret = 0, depth = 0;
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 458 struct rt_mutex *lock;
8930ed80f kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 459 bool detect_deadlock;
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 460 bool requeue = true;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 461
8930ed80f kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 462 detect_deadlock = rt_mutex_cond_detect_deadlock(orig_waiter, chwalk);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 463
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 464 /*
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 465 * The (de)boosting is a step by step approach with a lot of
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 466 * pitfalls. We want this to be preemptible and we want hold a
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 467 * maximum of two locks per step. So we have to check
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 468 * carefully whether things change under us.
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 469 */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 470 again:
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 471 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 472 * We limit the lock chain length for each invocation.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 473 */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 474 if (++depth > max_lock_depth) {
3ac304ec5 kernel/locking/rtmutex.c Mao Wenan 2018-08-07 475 int prev_max;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 476
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 477 /*
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 478 * Print this only once. If the admin changes the limit,
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 479 * print a new message when reaching the limit again.
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 480 */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 @481 if (prev_max != max_lock_depth) {
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 482 prev_max = max_lock_depth;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 483 printk(KERN_WARNING "Maximum lock depth %d reached "
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 484 "task: %s (%d)\n", max_lock_depth,
ba25f9dcc kernel/rtmutex.c Pavel Emelyanov 2007-10-18 485 top_task->comm, task_pid_nr(top_task));
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 486 }
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 487 put_task_struct(task);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 488
3d5c9340d kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 489 return -EDEADLK;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 490 }
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 491
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 492 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 493 * We are fully preemptible here and only hold the refcount on
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 494 * @task. So everything can have changed under us since the
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 495 * caller or our own code below (goto retry/again) dropped all
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 496 * locks.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 497 */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 498 retry:
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 499 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 500 * [1] Task cannot go away as we did a get_task() before !
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 501 */
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 502 raw_spin_lock_irq(&task->pi_lock);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 503
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 504 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 505 * [2] Get the waiter on which @task is blocked on.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 506 */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 507 waiter = task->pi_blocked_on;
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 508
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 509 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 510 * [3] check_exit_conditions_1() protected by task->pi_lock.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 511 */
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 512
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 513 /*
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 514 * Check whether the end of the boosting chain has been
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 515 * reached or the state of the chain has changed while we
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 516 * dropped the locks.
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 517 */
8161239a8 kernel/rtmutex.c Lai Jiangshan 2011-01-14 518 if (!waiter)
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 519 goto out_unlock_pi;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 520
1a539a872 kernel/rtmutex.c Thomas Gleixner 2007-06-08 521 /*
1a539a872 kernel/rtmutex.c Thomas Gleixner 2007-06-08 522 * Check the orig_waiter state. After we dropped the locks,
8161239a8 kernel/rtmutex.c Lai Jiangshan 2011-01-14 523 * the previous owner of the lock might have released the lock.
1a539a872 kernel/rtmutex.c Thomas Gleixner 2007-06-08 524 */
8161239a8 kernel/rtmutex.c Lai Jiangshan 2011-01-14 525 if (orig_waiter && !rt_mutex_owner(orig_lock))
1a539a872 kernel/rtmutex.c Thomas Gleixner 2007-06-08 526 goto out_unlock_pi;
1a539a872 kernel/rtmutex.c Thomas Gleixner 2007-06-08 527
1a539a872 kernel/rtmutex.c Thomas Gleixner 2007-06-08 528 /*
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 529 * We dropped all locks after taking a refcount on @task, so
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 530 * the task might have moved on in the lock chain or even left
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 531 * the chain completely and blocks now on an unrelated lock or
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 532 * on @orig_lock.
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 533 *
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 534 * We stored the lock on which @task was blocked in @next_lock,
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 535 * so we can detect the chain change.
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 536 */
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 537 if (next_lock != waiter->lock)
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 538 goto out_unlock_pi;
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 539
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 540 /*
1a539a872 kernel/rtmutex.c Thomas Gleixner 2007-06-08 541 * Drop out, when the task has no waiters. Note,
1a539a872 kernel/rtmutex.c Thomas Gleixner 2007-06-08 542 * top_waiter can be NULL, when we are in the deboosting
1a539a872 kernel/rtmutex.c Thomas Gleixner 2007-06-08 543 * mode!
1a539a872 kernel/rtmutex.c Thomas Gleixner 2007-06-08 544 */
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 545 if (top_waiter) {
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 546 if (!task_has_pi_waiters(task))
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 547 goto out_unlock_pi;
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 548 /*
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 549 * If deadlock detection is off, we stop here if we
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 550 * are not the top pi waiter of the task. If deadlock
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 551 * detection is enabled we continue, but stop the
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 552 * requeueing in the chain walk.
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 553 */
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 554 if (top_waiter != task_top_pi_waiter(task)) {
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 555 if (!detect_deadlock)
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 556 goto out_unlock_pi;
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 557 else
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 558 requeue = false;
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 559 }
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 560 }
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 561
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 562 /*
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 563 * If the waiter priority is the same as the task priority
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 564 * then there is no further priority adjustment necessary. If
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 565 * deadlock detection is off, we stop the chain walk. If its
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 566 * enabled we continue, but stop the requeueing in the chain
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 567 * walk.
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 568 */
19830e552 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 569 if (rt_mutex_waiter_equal(waiter, task_to_waiter(task))) {
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 570 if (!detect_deadlock)
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 571 goto out_unlock_pi;
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 572 else
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 573 requeue = false;
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 574 }
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 575
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 576 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 577 * [4] Get the next lock
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 578 */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 579 lock = waiter->lock;
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 580 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 581 * [5] We need to trylock here as we are holding task->pi_lock,
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 582 * which is the reverse lock order versus the other rtmutex
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 583 * operations.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 584 */
d209d74d5 kernel/rtmutex.c Thomas Gleixner 2009-11-17 585 if (!raw_spin_trylock(&lock->wait_lock)) {
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 586 raw_spin_unlock_irq(&task->pi_lock);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 587 cpu_relax();
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 588 goto retry;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 589 }
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 590
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 591 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 592 * [6] check_exit_conditions_2() protected by task->pi_lock and
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 593 * lock->wait_lock.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 594 *
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 595 * Deadlock detection. If the lock is the same as the original
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 596 * lock which caused us to walk the lock chain or if the
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 597 * current lock is owned by the task which initiated the chain
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 598 * walk, we detected a deadlock.
397335f00 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 599 */
95e02ca9b kernel/rtmutex.c Thomas Gleixner 2006-06-27 600 if (lock == orig_lock || rt_mutex_owner(lock) == top_task) {
8930ed80f kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 601 debug_rt_mutex_deadlock(chwalk, orig_waiter, lock);
d209d74d5 kernel/rtmutex.c Thomas Gleixner 2009-11-17 602 raw_spin_unlock(&lock->wait_lock);
3d5c9340d kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 603 ret = -EDEADLK;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 604 goto out_unlock_pi;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 605 }
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 606
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 607 /*
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 608 * If we just follow the lock chain for deadlock detection, no
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 609 * need to do all the requeue operations. To avoid a truckload
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 610 * of conditionals around the various places below, just do the
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 611 * minimum chain walk checks.
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 612 */
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 613 if (!requeue) {
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 614 /*
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 615 * No requeue[7] here. Just release @task [8]
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 616 */
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 617 raw_spin_unlock(&task->pi_lock);
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 618 put_task_struct(task);
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 619
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 620 /*
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 621 * [9] check_exit_conditions_3 protected by lock->wait_lock.
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 622 * If there is no owner of the lock, end of chain.
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 623 */
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 624 if (!rt_mutex_owner(lock)) {
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 625 raw_spin_unlock_irq(&lock->wait_lock);
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 626 return 0;
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 627 }
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 628
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 629 /* [10] Grab the next task, i.e. owner of @lock */
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 630 task = rt_mutex_owner(lock);
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 631 get_task_struct(task);
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 632 raw_spin_lock(&task->pi_lock);
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 633
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 634 /*
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 635 * No requeue [11] here. We just do deadlock detection.
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 636 *
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 637 * [12] Store whether owner is blocked
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 638 * itself. Decision is made after dropping the locks
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 639 */
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 640 next_lock = task_blocked_on_lock(task);
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 641 /*
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 642 * Get the top waiter for the next iteration
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 643 */
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 644 top_waiter = rt_mutex_top_waiter(lock);
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 645
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 646 /* [13] Drop locks */
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 647 raw_spin_unlock(&task->pi_lock);
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 648 raw_spin_unlock_irq(&lock->wait_lock);
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 649
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 650 /* If owner is not blocked, end of chain. */
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 651 if (!next_lock)
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 652 goto out_put_task;
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 653 goto again;
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 654 }
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 655
67792e2ca kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 656 /*
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 657 * Store the current top waiter before doing the requeue
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 658 * operation on @lock. We need it for the boost/deboost
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 659 * decision below.
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 660 */
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 661 prerequeue_top_waiter = rt_mutex_top_waiter(lock);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 662
9f40a51a3 kernel/locking/rtmutex.c Davidlohr Bueso 2015-05-19 663 /* [7] Requeue the waiter in the lock waiter tree. */
fb00aca47 kernel/locking/rtmutex.c Peter Zijlstra 2013-11-07 664 rt_mutex_dequeue(lock, waiter);
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 665
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 666 /*
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 667 * Update the waiter prio fields now that we're dequeued.
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 668 *
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 669 * These values can have changed through either:
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 670 *
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 671 * sys_sched_set_scheduler() / sys_sched_setattr()
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 672 *
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 673 * or
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 674 *
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 675 * DL CBS enforcement advancing the effective deadline.
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 676 *
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 677 * Even though pi_waiters also uses these fields, and that tree is only
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 678 * updated in [11], we can do this here, since we hold [L], which
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 679 * serializes all pi_waiters access and rb_erase() does not care about
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 680 * the values of the node being removed.
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 681 */
2d3d891d3 kernel/locking/rtmutex.c Dario Faggioli 2013-11-07 682 waiter->prio = task->prio;
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 683 waiter->deadline = task->dl.deadline;
e0aad5b44 kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 684
fb00aca47 kernel/locking/rtmutex.c Peter Zijlstra 2013-11-07 685 rt_mutex_enqueue(lock, waiter);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 686
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 687 /* [8] Release the task */
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 688 raw_spin_unlock(&task->pi_lock);
2ffa5a5cd kernel/locking/rtmutex.c Thomas Gleixner 2014-06-07 689 put_task_struct(task);
2ffa5a5cd kernel/locking/rtmutex.c Thomas Gleixner 2014-06-07 690
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 691 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 692 * [9] check_exit_conditions_3 protected by lock->wait_lock.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 693 *
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 694 * We must abort the chain walk if there is no lock owner even
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 695 * in the dead lock detection case, as we have nothing to
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 696 * follow here. This is the end of the chain we are walking.
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 697 */
8161239a8 kernel/rtmutex.c Lai Jiangshan 2011-01-14 698 if (!rt_mutex_owner(lock)) {
8161239a8 kernel/rtmutex.c Lai Jiangshan 2011-01-14 699 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 700 * If the requeue [7] above changed the top waiter,
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 701 * then we need to wake the new top waiter up to try
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 702 * to get the lock.
8161239a8 kernel/rtmutex.c Lai Jiangshan 2011-01-14 703 */
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 704 if (prerequeue_top_waiter != rt_mutex_top_waiter(lock))
8161239a8 kernel/rtmutex.c Lai Jiangshan 2011-01-14 705 wake_up_process(rt_mutex_top_waiter(lock)->task);
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 706 raw_spin_unlock_irq(&lock->wait_lock);
2ffa5a5cd kernel/locking/rtmutex.c Thomas Gleixner 2014-06-07 707 return 0;
8161239a8 kernel/rtmutex.c Lai Jiangshan 2011-01-14 708 }
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 709
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 710 /* [10] Grab the next task, i.e. the owner of @lock */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 711 task = rt_mutex_owner(lock);
db630637b kernel/rtmutex.c Steven Rostedt 2006-09-29 712 get_task_struct(task);
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 713 raw_spin_lock(&task->pi_lock);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 714
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 715 /* [11] requeue the pi waiters if necessary */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 716 if (waiter == rt_mutex_top_waiter(lock)) {
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 717 /*
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 718 * The waiter became the new top (highest priority)
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 719 * waiter on the lock. Replace the previous top waiter
9f40a51a3 kernel/locking/rtmutex.c Davidlohr Bueso 2015-05-19 720 * in the owner tasks pi waiters tree with this waiter
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 721 * and adjust the priority of the owner.
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 722 */
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 723 rt_mutex_dequeue_pi(task, prerequeue_top_waiter);
fb00aca47 kernel/locking/rtmutex.c Peter Zijlstra 2013-11-07 724 rt_mutex_enqueue_pi(task, waiter);
acd58620e kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 725 rt_mutex_adjust_prio(task);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 726
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 727 } else if (prerequeue_top_waiter == waiter) {
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 728 /*
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 729 * The waiter was the top waiter on the lock, but is
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 730 * no longer the top prority waiter. Replace waiter in
9f40a51a3 kernel/locking/rtmutex.c Davidlohr Bueso 2015-05-19 731 * the owner tasks pi waiters tree with the new top
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 732 * (highest priority) waiter and adjust the priority
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 733 * of the owner.
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 734 * The new top waiter is stored in @waiter so that
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 735 * @waiter == @top_waiter evaluates to true below and
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 736 * we continue to deboost the rest of the chain.
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 737 */
fb00aca47 kernel/locking/rtmutex.c Peter Zijlstra 2013-11-07 738 rt_mutex_dequeue_pi(task, waiter);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 739 waiter = rt_mutex_top_waiter(lock);
fb00aca47 kernel/locking/rtmutex.c Peter Zijlstra 2013-11-07 740 rt_mutex_enqueue_pi(task, waiter);
acd58620e kernel/locking/rtmutex.c Peter Zijlstra 2017-03-23 741 rt_mutex_adjust_prio(task);
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 742 } else {
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 743 /*
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 744 * Nothing changed. No need to do any priority
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 745 * adjustment.
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 746 */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 747 }
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 748
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 749 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 750 * [12] check_exit_conditions_4() protected by task->pi_lock
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 751 * and lock->wait_lock. The actual decisions are made after we
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 752 * dropped the locks.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 753 *
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 754 * Check whether the task which owns the current lock is pi
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 755 * blocked itself. If yes we store a pointer to the lock for
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 756 * the lock chain change detection above. After we dropped
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 757 * task->pi_lock next_lock cannot be dereferenced anymore.
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 758 */
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 759 next_lock = task_blocked_on_lock(task);
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 760 /*
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 761 * Store the top waiter of @lock for the end of chain walk
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 762 * decision below.
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 763 */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 764 top_waiter = rt_mutex_top_waiter(lock);
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 765
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 766 /* [13] Drop the locks */
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 767 raw_spin_unlock(&task->pi_lock);
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 768 raw_spin_unlock_irq(&lock->wait_lock);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 769
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 770 /*
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 771 * Make the actual exit decisions [12], based on the stored
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 772 * values.
3eb65aead kernel/locking/rtmutex.c Thomas Gleixner 2014-06-09 773 *
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 774 * We reached the end of the lock chain. Stop right here. No
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 775 * point to go back just to figure that out.
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 776 */
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 777 if (!next_lock)
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 778 goto out_put_task;
820849843 kernel/locking/rtmutex.c Thomas Gleixner 2014-06-05 779
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 780 /*
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 781 * If the current waiter is not the top waiter on the lock,
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 782 * then we can stop the chain walk here if we are not in full
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 783 * deadlock detection mode.
a57594a13 kernel/locking/rtmutex.c Thomas Gleixner 2014-05-22 784 */
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 785 if (!detect_deadlock && waiter != top_waiter)
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 786 goto out_put_task;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 787
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 788 goto again;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 789
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 790 out_unlock_pi:
b4abf9104 kernel/locking/rtmutex.c Thomas Gleixner 2016-01-13 791 raw_spin_unlock_irq(&task->pi_lock);
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 792 out_put_task:
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 793 put_task_struct(task);
36c8b5868 kernel/rtmutex.c Ingo Molnar 2006-07-03 794
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 795 return ret;
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 796 }
23f78d4a0 kernel/rtmutex.c Ingo Molnar 2006-06-27 797

:::::: The code at line 481 was first introduced by commit
:::::: 23f78d4a03c53cbd75d87a795378ea540aa08c86 [PATCH] pi-futex: rt mutex core

:::::: TO: Ingo Molnar <mingo@xxxxxxx>
:::::: CC: Linus Torvalds <torvalds@xxxxxxxxxxx>

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip