Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753940AbdF1EhH (ORCPT ); Wed, 28 Jun 2017 00:37:07 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:36818 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753845AbdF1Eg6 (ORCPT ); Wed, 28 Jun 2017 00:36:58 -0400 Date: Wed, 28 Jun 2017 14:36:46 +1000 From: Nicholas Piggin To: Akshay Adiga Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, ego@linux.vnet.ibm.com, mpe@ellerman.id.au Subject: Re: [PATCH] powernv:idle: Clear r12 on wakeup from stop lite Message-ID: <20170628143646.5e92bcb5@roar.ozlabs.ibm.com> In-Reply-To: <1498612609-13677-1-git-send-email-akshay.adiga@linux.vnet.ibm.com> References: <1498612609-13677-1-git-send-email-akshay.adiga@linux.vnet.ibm.com> Organization: IBM X-Mailer: Claws Mail 3.14.1 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2337 Lines: 64 On Wed, 28 Jun 2017 06:46:49 +0530 Akshay Adiga wrote: > pnv_wakeup_noloss expects R12 to contain SRR1 value to determine if > the wakeup reason is an HMI in CHECK_HMI_INTERRUPT. > > When we wakeup with ESL=0, SRR1 will not contain the wakeup reason, so > there is no point setting R12 to SRR1. > > However, we don't set R12 at all and R12 contains garbage, and still > being used to check HMI assuming that it had SRR1. causing the > OPAL msglog to be filled with the following print: > HMI: Received HMI interrupt: HMER = 0x0040000000000000 > > This patch clears R12 after waking up from stop with ESL=EC=0, so that > we don't accidentally enter the HMI handler in pnv_wakeup_noloss if > the R12[42:45] corresponds to HMI as wakeup reason. > > Bug existed prior to "commit 9d29250136f6 ("powerpc/64s/idle: Avoid SRR > usage in idle sleep/wake paths") but was never hit in practice > > Signed-off-by: Akshay Adiga > Fixes: 9d29250136f6 ("powerpc/64s/idle: Avoid SRR usage in idle > sleep/wake paths") Thanks guys, appreciate you finding and fixing my bug :) I think this looks like the best fix. Really minor nitpick but you could adjust the line widths on the comment slightly (mpe might do that when merging). Reviewed-by: Nicholas Piggin > --- > arch/powerpc/kernel/idle_book3s.S | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S > index 1ea14b9..34794fd 100644 > --- a/arch/powerpc/kernel/idle_book3s.S > +++ b/arch/powerpc/kernel/idle_book3s.S > @@ -256,6 +256,21 @@ power_enter_stop: > bne .Lhandle_esl_ec_set > IDLE_STATE_ENTER_SEQ(PPC_STOP) > li r3,0 /* Since we didn't lose state, return 0 */ > + /* > + * pnv_wakeup_noloss expects R12 to contain SRR1 value > + * to determine if the wakeup reason is an HMI in > + * CHECK_HMI_INTERRUPT. > + * > + * However, when we wakeup with ESL=0, > + * SRR1 will not contain the wakeup reason, > + * so there is no point setting R12 to SRR1. > + * > + * Further, we clear R12 here, so that we > + * don't accidentally enter the HMI > + * in pnv_wakeup_noloss if the > + * R12[42:45] == WAKE_HMI. > + */ > + li r12, 0 > b pnv_wakeup_noloss > > .Lhandle_esl_ec_set: