lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <201808080245.7gKqyfV1%fengguang.wu@intel.com>
Date:   Wed, 8 Aug 2018 02:34:05 +0800
From:   kbuild test robot <lkp@...el.com>
To:     Mao Wenan <maowenan@...wei.com>
Cc:     kbuild-all@...org, Peter Zijlstra <peterz@...radead.org>,
        Ingo Molnar <mingo@...hat.com>,
        Will Deacon <will.deacon@....com>,
        Mao Wenan <maowenan@...wei.com>, linux-kernel@...r.kernel.org,
        kernel-janitors@...r.kernel.org
Subject: Re: [PATCH] rtmutex: Drop pointless static qualifier in
 rt_mutex_adjust_prio_chain()

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@...e.hu>
:::::: CC: Linus Torvalds <torvalds@...osdl.org>

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

Download attachment ".config.gz" of type "application/gzip" (30425 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ