From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933458AbdCWJPt (ORCPT ); Thu, 23 Mar 2017 05:15:49 -0400 Received: from terminus.zytor.com ([65.50.211.136]:44805 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932444AbdCWJPp (ORCPT ); Thu, 23 Mar 2017 05:15:45 -0400 Date: Thu, 23 Mar 2017 02:11:57 -0700 From: tip-bot for Wanpeng Li Message-ID: Cc: mingo@kernel.org, wanpeng.li@hotmail.com, hpa@zytor.com, peterz@infradead.org, fengguang.wu@intel.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, torvalds@linux-foundation.org, efault@gmx.de Reply-To: fengguang.wu@intel.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, torvalds@linux-foundation.org, efault@gmx.de, mingo@kernel.org, wanpeng.li@hotmail.com, hpa@zytor.com, peterz@infradead.org In-Reply-To: <1489718719-3951-1-git-send-email-wanpeng.li@hotmail.com> References: <1489718719-3951-1-git-send-email-wanpeng.li@hotmail.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:sched/core] sched/core: Fix rq lock pinning warning after call balance callbacks Git-Commit-ID: d7921a5ddab8d30e06e321f37eec629f23797486 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: d7921a5ddab8d30e06e321f37eec629f23797486 Gitweb: http://git.kernel.org/tip/d7921a5ddab8d30e06e321f37eec629f23797486 Author: Wanpeng Li AuthorDate: Thu, 16 Mar 2017 19:45:19 -0700 Committer: Ingo Molnar CommitDate: Thu, 23 Mar 2017 07:44:51 +0100 sched/core: Fix rq lock pinning warning after call balance callbacks This can be reproduced by running rt-migrate-test: WARNING: CPU: 2 PID: 2195 at kernel/locking/lockdep.c:3670 lock_unpin_lock() unpinning an unpinned lock ... Call Trace: dump_stack() __warn() warn_slowpath_fmt() lock_unpin_lock() __balance_callback() __schedule() schedule() futex_wait_queue_me() futex_wait() do_futex() SyS_futex() do_syscall_64() entry_SYSCALL64_slow_path() Revert the rq_lock_irqsave() usage here, the whole point of the balance_callback() was to allow dropping rq->lock. Reported-by: Fengguang Wu Signed-off-by: Wanpeng Li Signed-off-by: Peter Zijlstra (Intel) Cc: Linus Torvalds Cc: Mike Galbraith Cc: Peter Zijlstra Cc: Thomas Gleixner Fixes: 8a8c69c32778 ("sched/core: Add rq->lock wrappers") Link: http://lkml.kernel.org/r/1489718719-3951-1-git-send-email-wanpeng.li@hotmail.com Signed-off-by: Ingo Molnar --- kernel/sched/core.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index c762f62..ab9f6ac 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2776,9 +2776,9 @@ static void __balance_callback(struct rq *rq) { struct callback_head *head, *next; void (*func)(struct rq *rq); - struct rq_flags rf; + unsigned long flags; - rq_lock_irqsave(rq, &rf); + raw_spin_lock_irqsave(&rq->lock, flags); head = rq->balance_callback; rq->balance_callback = NULL; while (head) { @@ -2789,7 +2789,7 @@ static void __balance_callback(struct rq *rq) func(rq); } - rq_unlock_irqrestore(rq, &rf); + raw_spin_unlock_irqrestore(&rq->lock, flags); } static inline void balance_callback(struct rq *rq)