From patchwork Mon May 1 12:01:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 757143 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wGjl70Mnpz9sN9 for ; Mon, 1 May 2017 22:04:19 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="taHaVQuq"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3wGjl66RFrzDqJx for ; Mon, 1 May 2017 22:04:18 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="taHaVQuq"; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Received: from mail-pg0-x241.google.com (mail-pg0-x241.google.com [IPv6:2607:f8b0:400e:c05::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3wGjgp5xXZzDqFH for ; Mon, 1 May 2017 22:01:26 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="taHaVQuq"; dkim-atps=neutral Received: by mail-pg0-x241.google.com with SMTP id c2so5323520pga.2 for ; Mon, 01 May 2017 05:01:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=urswUqIQGgTi3GW0k1f4fTiJvyPiCpJ23kydE3wLMvI=; b=taHaVQuqWK81FCoAWFoWXgvknfpYR11k7c/coNcDe1qfmkXkrCV+k7BtySllPeN9/N ZkDRpWh3VumT6FnE2aEQrUopdewFQfr1+yKjJf5/ty5opUIkrWlNVQ+HbQhYEbm8/m76 U51049bwpgDEkPi1vFbTY4BfI5oQfdtTdyM8a5HaQ3zWqGk+Qki7/G82uSlUTdBPY2Nl L1R+adJZ085lUNASc5ASf2MnLz97uxuG45SZDUn2waf+n+S0JTDXkkTHnmZ15A9tS0Br ZC4K8AyJhCPmS41MgN+lGkpLIsvo3IG+aO+CRWt7OpEip8IkTYUuKvsL5z/nnnJ63ebO VQXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=urswUqIQGgTi3GW0k1f4fTiJvyPiCpJ23kydE3wLMvI=; b=d9F1DptSpMGkb3G+ksxb5YA/GuYi/RWemfgNdmjpnmwwOcCiKFMGnH37b+Rp4mBhMB QDg6uINxANtUq0+QfsnonFFiBAsOjDBa/10iSjmtDZOBmI6ZqhLysyAPpKiB+t2PhiZ2 0EYIMb+DRr62PJXIo7dy6MrsYn9E26Xm8kcZGxLi79EMNK0g6MjrEALak8MHBXSSRMV1 YQSS0EHUZTXvc0mz/G7iW2D9jc6pVpRngUXG4oVH4lWsHE8zE6yJfBju1WweKWPwuHRY 307J4yxUmLthvhkL/X93j3VA9QqV5jFw+8NtpTFac2sO0+PavukWUTN1/5HcvuQ2Pefo d/ag== X-Gm-Message-State: AN3rC/58wAkFcx72g+e9rQOVsNDMWDFz+S6DZI/j58AeP9y/r09vXQU4 +qkWsvflDXwmJw== X-Received: by 10.98.8.143 with SMTP id 15mr26728459pfi.268.1493640085120; Mon, 01 May 2017 05:01:25 -0700 (PDT) Received: from roar.au.ibm.com (59-102-70-13.tpgi.com.au. [59.102.70.13]) by smtp.gmail.com with ESMTPSA id b4sm18364421pfj.122.2017.05.01.05.01.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 01 May 2017 05:01:24 -0700 (PDT) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 1/2] powerpc/64s: Fix FIXUP_ENDIAN non-maskable interrupt reentrancy Date: Mon, 1 May 2017 22:01:09 +1000 Message-Id: <20170501120110.21888-2-npiggin@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170501120110.21888-1-npiggin@gmail.com> References: <20170501120110.21888-1-npiggin@gmail.com> X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Nicholas Piggin Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" FIXUP_ENDIAN uses SRR[01] with MSR_RI=1, which gets corrupted if there is an interleaving system reset or machine check interrupt. Set MSR_RI=0 before setting SRRs. The rfid will restore MSR. Signed-off-by: Nicholas Piggin --- arch/powerpc/boot/ppc_asm.h | 12 +++++++----- arch/powerpc/include/asm/ppc_asm.h | 11 +++++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/arch/powerpc/boot/ppc_asm.h b/arch/powerpc/boot/ppc_asm.h index b03373d8b386..68e388ee94fe 100644 --- a/arch/powerpc/boot/ppc_asm.h +++ b/arch/powerpc/boot/ppc_asm.h @@ -67,13 +67,15 @@ #define MSR_LE 0x0000000000000001 #define FIXUP_ENDIAN \ - tdi 0, 0, 0x48; /* Reverse endian of b . + 8 */ \ - b $+36; /* Skip trampoline if endian is good */ \ - .long 0x05009f42; /* bcl 20,31,$+4 */ \ - .long 0xa602487d; /* mflr r10 */ \ - .long 0x1c004a39; /* addi r10,r10,28 */ \ + tdi 0,0,0x48; /* Reverse endian of b . + 8 */ \ + b $+44; /* Skip trampoline if endian is good */ \ .long 0xa600607d; /* mfmsr r11 */ \ .long 0x01006b69; /* xori r11,r11,1 */ \ + .long 0x00004039; /* li r10,0 */ \ + .long 0x6401417d; /* mtmsrd r10,1 */ \ + .long 0x05009f42; /* bcl 20,31,$+4 */ \ + .long 0xa602487d; /* mflr r10 */ \ + .long 0x14004a39; /* addi r10,r10,20 */ \ .long 0xa6035a7d; /* mtsrr0 r10 */ \ .long 0xa6037b7d; /* mtsrr1 r11 */ \ .long 0x2400004c /* rfid */ diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h index 359c44341761..6baeeb9acd0d 100644 --- a/arch/powerpc/include/asm/ppc_asm.h +++ b/arch/powerpc/include/asm/ppc_asm.h @@ -770,15 +770,18 @@ END_FTR_SECTION_IFCLR(CPU_FTR_601) #else #define FIXUP_ENDIAN \ tdi 0,0,0x48; /* Reverse endian of b . + 8 */ \ - b $+36; /* Skip trampoline if endian is good */ \ - .long 0x05009f42; /* bcl 20,31,$+4 */ \ - .long 0xa602487d; /* mflr r10 */ \ - .long 0x1c004a39; /* addi r10,r10,28 */ \ + b $+44; /* Skip trampoline if endian is good */ \ .long 0xa600607d; /* mfmsr r11 */ \ .long 0x01006b69; /* xori r11,r11,1 */ \ + .long 0x00004039; /* li r10,0 */ \ + .long 0x6401417d; /* mtmsrd r10,1 */ \ + .long 0x05009f42; /* bcl 20,31,$+4 */ \ + .long 0xa602487d; /* mflr r10 */ \ + .long 0x14004a39; /* addi r10,r10,20 */ \ .long 0xa6035a7d; /* mtsrr0 r10 */ \ .long 0xa6037b7d; /* mtsrr1 r11 */ \ .long 0x2400004c /* rfid */ + #endif /* !CONFIG_PPC_BOOK3E */ #endif /* __ASSEMBLY__ */