From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933837AbbLPAws (ORCPT ); Tue, 15 Dec 2015 19:52:48 -0500 Received: from mail-io0-f182.google.com ([209.85.223.182]:34007 "EHLO mail-io0-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932463AbbLPAwr (ORCPT ); Tue, 15 Dec 2015 19:52:47 -0500 MIME-Version: 1.0 In-Reply-To: References: <20151211052647.GL28602@linux.vnet.ibm.com> <566B49E3.1080107@redhat.com> <20151211222742.GJ4054@linux.vnet.ibm.com> <20151212010344.GR4054@linux.vnet.ibm.com> <566EF73C.3090505@redhat.com> From: Ani Sinha Date: Wed, 16 Dec 2015 06:22:31 +0530 Message-ID: Subject: Re: new warning on sysrq kernel crash trigger To: Rik van Riel Cc: Ani Sinha , Paul McKenney , Randy Dunlap , Richard Weinberger , "linux-kernel@vger.kernel.org" , Ivan Delalande , fruggeri Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Rik, should I send a separate email with the patch or you are OK with what I sent in the email? Are you queueing up my patch for applying upstream? On Tue, Dec 15, 2015 at 5:44 AM, Anirban Sinha wrote: > > > On Mon, 14 Dec 2015, Rik van Riel wrote: > >> On 12/14/2015 11:24 AM, Ani Sinha wrote: >> > Rik, any comments? >> >> Another good option is to simply ignore this warning, or drop >> the rcu_read_lock before doing the alt-syrsq-c action. >> >> After all, alt-sysrq-c is "crash the system, take a crash dump", >> which is not an action the system ever returns from. >> > > Yea I thought about this idea previously but then discarded it thinking it > would be too hacky. Here's the cooked up patch. I hope this can be > approved for mainline soon (I'm on vacation and working just on this issue > remotely) : > > From 105ff3ffce380650b3d58b3594a9be47bd604b28 Mon Sep 17 00:00:00 2001 > From: Ani Sinha > Date: Mon, 14 Dec 2015 14:55:08 -0800 > Subject: [PATCH 1/1] Fix 'sleeping function called from invalid context' > warning in sysrq generated crash. > > Commit 984d74a72076a1 ("sysrq: rcu-ify __handle_sysrq") > replaced spin_lock_irqsave() calls with > rcu_read_lock() calls in sysrq. Since rcu_read_lock() does not > disable preemption, faulthandler_disabled() in > __do_page_fault() in x86/fault.c returns false. When the code > later calls might_sleep() in the pagefault handler, we get the > following warning: > > BUG: sleeping function called from invalid context at ../arch/x86/mm/fault.c:1187 > in_atomic(): 0, irqs_disabled(): 0, pid: 4706, name: bash > Preemption disabled at:[] printk+0x48/0x4a > > To fix this, we release the RCU read lock before we crash. > > Tested this patch on linux 3.18 by booting off one of our boards. > > Fixes: 984d74a72076a1 ("sysrq: rcu-ify __handle_sysrq") > > Signed-off-by: Ani Sinha > --- > drivers/tty/sysrq.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c > index 5381a72..08987ad 100644 > --- a/drivers/tty/sysrq.c > +++ b/drivers/tty/sysrq.c > @@ -133,6 +133,12 @@ static void sysrq_handle_crash(int key) > { > char *killer = NULL; > > + /* we need to release the RCU read lock here, > + otherwise we get an annoying > + 'BUG: sleeping function called from invalid context' > + complaint from the kernel before the panic. > + */ > + rcu_read_unlock(); > panic_on_oops = 1; /* force panic */ > wmb(); > *killer = 1; > -- > 1.8.1.4 >