From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751162AbcCACRd (ORCPT ); Mon, 29 Feb 2016 21:17:33 -0500 Received: from fallback.hitachi.co.jp ([133.145.228.49]:38327 "EHLO mailx.hitachi.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750730AbcCACRb (ORCPT ); Mon, 29 Feb 2016 21:17:31 -0500 X-Greylist: delayed 1198 seconds by postgrey-1.27 at vger.kernel.org; Mon, 29 Feb 2016 21:17:30 EST X-AuditID: 85900ec0-9d7c9b9000001a57-72-56d4f6682d97 X-Mailbox-Line: From nobody Tue Mar 1 10:50:41 2016 Subject: [PATCH 3/3] hpwdt: Use nmi_panic() when kernel panics in NMI handler To: Andrew Morton , Thomas Mingarelli , Wim Van Sebroeck , Corey Minyard From: Hidehiro Kawai Cc: linux-watchdog@vger.kernel.org, linux-kernel@vger.kernel.org, Michal Hocko , Borislav Petkov , openipmi-developer@lists.sourceforge.net, Guenter Roeck Date: Tue, 01 Mar 2016 10:50:41 +0900 Message-ID: <20160301015041.4318.93922.stgit@softrs> In-Reply-To: <20160301015035.4318.78677.stgit@softrs> References: <20160301015035.4318.78677.stgit@softrs> User-Agent: StGit/0.16 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: AAAAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org commit 58c5661f2144 ("panic, x86: Allow CPUs to save registers even if looping in NMI context") introduced nmi_panic() which prevents concurrent/recursive execution of panic(). It also saves registers for the crash dump on x86. hpwdt driver can call panic() from NMI handler, so replace it with nmi_panic(). Signed-off-by: Hidehiro Kawai Cc: Thomas Mingarelli Cc: Wim Van Sebroeck Cc: Guenter Roeck Cc: linux-watchdog@vger.kernel.org --- drivers/watchdog/hpwdt.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c index 92443c3..fd0486f 100644 --- a/drivers/watchdog/hpwdt.c +++ b/drivers/watchdog/hpwdt.c @@ -496,11 +496,12 @@ static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs) if (!is_icru && !is_uefi) { if (cmn_regs.u1.ral == 0) { - panic("An NMI occurred, " + nmi_panic(regs, "An NMI occurred, " "but unable to determine source.\n"); + goto handled; } } - panic("An NMI occurred. Depending on your system the reason " + nmi_panic(regs, "An NMI occurred. Depending on your system the reason " "for the NMI is logged in any one of the following " "resources:\n" "1. Integrated Management Log (IML)\n" @@ -508,6 +509,13 @@ static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs) "3. OA Forward Progress Log\n" "4. iLO Event Log"); +handled: + /* + * Returning from nmi_panic() means this CPU was processing panic() + * before NMI. Return NMI_HANDLED and go back to panic routines. + */ + return NMI_HANDLED; + out: return NMI_DONE; }