From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754447AbdCBIn0 (ORCPT ); Thu, 2 Mar 2017 03:43:26 -0500 Received: from terminus.zytor.com ([65.50.211.136]:48642 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754422AbdCBInW (ORCPT ); Thu, 2 Mar 2017 03:43:22 -0500 Date: Thu, 2 Mar 2017 00:20:30 -0800 From: tip-bot for Chris Wilson Message-ID: Cc: fengguang.wu@intel.com, tglx@linutronix.de, akpm@linux-foundation.org, torvalds@linux-foundation.org, mingo@kernel.org, peterz@infradead.org, linux-kernel@vger.kernel.org, chris@chris-wilson.co.uk, paulmck@linux.vnet.ibm.com, hpa@zytor.com Reply-To: tglx@linutronix.de, akpm@linux-foundation.org, fengguang.wu@intel.com, chris@chris-wilson.co.uk, paulmck@linux.vnet.ibm.com, hpa@zytor.com, torvalds@linux-foundation.org, peterz@infradead.org, mingo@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20170228094011.2595-1-chris@chris-wilson.co.uk> References: <20170228094011.2595-1-chris@chris-wilson.co.uk> To: linux-tip-commits@vger.kernel.org Subject: [tip:locking/urgent] locking/ww_mutex: Replace cpu_relax() with cond_resched() for tests Git-Commit-ID: 2b232e0c3b3a09f3e33750aa20e314f1b80e5361 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 2b232e0c3b3a09f3e33750aa20e314f1b80e5361 Gitweb: http://git.kernel.org/tip/2b232e0c3b3a09f3e33750aa20e314f1b80e5361 Author: Chris Wilson AuthorDate: Tue, 28 Feb 2017 09:40:11 +0000 Committer: Ingo Molnar CommitDate: Thu, 2 Mar 2017 09:00:38 +0100 locking/ww_mutex: Replace cpu_relax() with cond_resched() for tests When busy-spinning on a ww_mutex_trylock(), we depend upon the other thread advancing and releasing the lock. This can not happen on a single CPU unless we relinquish it: [ ] NMI watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [kworker/0:1:18] ... [ ] Call Trace: [ ] mutex_trylock() [ ] test_mutex_work+0x31/0x56 [ ] process_one_work+0x1b4/0x2f9 [ ] worker_thread+0x1b0/0x27c [ ] kthread+0xd1/0xd3 [ ] ret_from_fork+0x19/0x30 Reported-by: Fengguang Wu Signed-off-by: Chris Wilson Signed-off-by: Peter Zijlstra (Intel) Cc: Andrew Morton Cc: Linus Torvalds Cc: Paul E. McKenney Cc: Peter Zijlstra Cc: Thomas Gleixner Fixes: f2a5fec17395 ("locking/ww_mutex: Begin kselftests for ww_mutex") Link: http://lkml.kernel.org/r/20170228094011.2595-1-chris@chris-wilson.co.uk Signed-off-by: Ingo Molnar --- kernel/locking/test-ww_mutex.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/locking/test-ww_mutex.c b/kernel/locking/test-ww_mutex.c index da6c9a3..3eb39c5 100644 --- a/kernel/locking/test-ww_mutex.c +++ b/kernel/locking/test-ww_mutex.c @@ -50,7 +50,7 @@ static void test_mutex_work(struct work_struct *work) if (mtx->flags & TEST_MTX_TRY) { while (!ww_mutex_trylock(&mtx->mutex)) - cpu_relax(); + cond_resched(); } else { ww_mutex_lock(&mtx->mutex, NULL); } @@ -88,7 +88,7 @@ static int __test_mutex(unsigned int flags) ret = -EINVAL; break; } - cpu_relax(); + cond_resched(); } while (time_before(jiffies, timeout)); } else { ret = wait_for_completion_timeout(&mtx.done, TIMEOUT);