From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 742BFC433E2 for ; Wed, 16 Sep 2020 17:27:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 173AD222C8 for ; Wed, 16 Sep 2020 17:27:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1600277251; bh=rj7DZjNAJCrrNWFqVqySDbZbtBkOXOstK9wfGztg5BM=; h=Date:From:To:Cc:Subject:Reply-To:List-ID:From; b=TDri5c9FJbV4ESkLhHBslrzZmOLIcSzPFULySAeAnk4cK8HbQnsZ/m0RwnDGyn4RU y9W3qh9Yg+lfmIKCYFSeqC6fWh2chnbApwAE3UgnODDWrNccsbeJppvVjtfMQID13H a6XYCzeLuTbYmh0Tsh3IEd2ocQV3GRCI33jDGgXE= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727057AbgIPR0v (ORCPT ); Wed, 16 Sep 2020 13:26:51 -0400 Received: from mail.kernel.org ([198.145.29.99]:41108 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727017AbgIPRZg (ORCPT ); Wed, 16 Sep 2020 13:25:36 -0400 Received: from paulmck-ThinkPad-P72.home (unknown [50.45.173.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 87A0E22450; Wed, 16 Sep 2020 15:53:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1600271587; bh=rj7DZjNAJCrrNWFqVqySDbZbtBkOXOstK9wfGztg5BM=; h=Date:From:To:Cc:Subject:Reply-To:From; b=oR03WAhanMUWM0OzUS245GpcP1EqoOPTLWHrj0iN8bkFLA+vo/jFgf4uOPynrcH8d KCov77ujZVhIjDIB4K/p6Sm/PUlnHgjPmvdJbJZWnBeE5Tr0hG64HK3BTtPwe2QbdC cFPMvEdkJHW/WZJ7en/wZRq9EbIdb0GiqHBXWMEQ= Received: by paulmck-ThinkPad-P72.home (Postfix, from userid 1000) id 216173522836; Wed, 16 Sep 2020 08:53:07 -0700 (PDT) Date: Wed, 16 Sep 2020 08:53:07 -0700 From: "Paul E. McKenney" To: peterz@infradead.org Cc: linux-kernel@vger.kernel.org Subject: sched/core: Allow try_invoke_on_locked_down_task() with irqs disabled Message-ID: <20200916155307.GA29530@paulmck-ThinkPad-P72> Reply-To: paulmck@kernel.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello, Peter! Are you OK with your Signed-off-by on this patch? Or is there some other approach you would prefer? Thanx, Paul ------------------------------------------------------------------------ commit 903c5302fa2df20c4074ea1fef01b1be9b4065d7 Author: Peter Zijlstra Date: Sat Aug 29 10:22:24 2020 -0700 sched/core: Allow try_invoke_on_locked_down_task() with irqs disabled The try_invoke_on_locked_down_task() function currently requires that interrupts be enabled, but it is called with interrupts disabled from rcu_print_task_stall(), resulting in an "IRQs not enabled as expected" diagnostic. This commit therefore updates try_invoke_on_locked_down_task() to use raw_spin_lock_irqsave() instead of raw_spin_lock_irq(), thus allowing use from either context. Link: https://lore.kernel.org/lkml/000000000000903d5805ab908fc4@google.com/ Reported-by: syzbot+cb3b69ae80afd6535b0e@syzkaller.appspotmail.com Not-signed-off-by: Peter Zijlstra diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 8471a0f..a814028 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2988,7 +2988,7 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) /** * try_invoke_on_locked_down_task - Invoke a function on task in fixed state - * @p: Process for which the function is to be invoked. + * @p: Process for which the function is to be invoked, can be @current. * @func: Function to invoke. * @arg: Argument to function. * @@ -3006,12 +3006,11 @@ try_to_wake_up(struct task_struct *p, unsigned int state, int wake_flags) */ bool try_invoke_on_locked_down_task(struct task_struct *p, bool (*func)(struct task_struct *t, void *arg), void *arg) { - bool ret = false; struct rq_flags rf; + bool ret = false; struct rq *rq; - lockdep_assert_irqs_enabled(); - raw_spin_lock_irq(&p->pi_lock); + raw_spin_lock_irqsave(&p->pi_lock, rf.flags); if (p->on_rq) { rq = __task_rq_lock(p, &rf); if (task_rq(p) == rq) @@ -3028,7 +3027,7 @@ bool try_invoke_on_locked_down_task(struct task_struct *p, bool (*func)(struct t ret = func(p, arg); } } - raw_spin_unlock_irq(&p->pi_lock); + raw_spin_unlock_irqrestore(&p->pi_lock, rf.flags); return ret; }