Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp3341103imu; Mon, 28 Jan 2019 03:12:07 -0800 (PST) X-Google-Smtp-Source: ALg8bN4/vIvKu2dw7W/wgqsKkZwQnrR1wM1eB14qdZ5XwQ9ieBGWv9VnEuR/D3Xxnzutfqg6kZmK X-Received: by 2002:a63:5207:: with SMTP id g7mr19669337pgb.253.1548673927216; Mon, 28 Jan 2019 03:12:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548673927; cv=none; d=google.com; s=arc-20160816; b=bS3BcrimGIXAF26BntEiWIs+L+LAK9WF3c1X4Pa+OQvu15I4yu6DjV983Rq2kqcH86 5mXOMzmMi+4g4gzS9aan2xk53YIsfhYpG9oi1S2u0dv2d+QozcYeWotmDpc4Igg33L6n 9jo8JosUqM78AWN2j6t24fS1DQrA7DdWJXATkRCVIMH6PS9165fNFSgxsD6GiUeMMziQ f08rA84jR1RbLkqbdKzhtTgu5U6DfKCfZqemxWknRNuMUpiJZrUhCPG4M0DKUXIEHh/i TkDW3iWGv09n1RchrdL2+JomUxM3eu6TObkGHMIoxPDWZgn0wtYq+qlW9hj07pvE+s1T enmg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:cc:to:subject:from:references :in-reply-to:message-id:dkim-signature; bh=6gmFeRrno51iQ4ACcN7AdeuYqB03iY0XtpQoX1FBkwg=; b=XYK2npH2kjLxKbNyO5nOBJgXQuPLe/ufw9JEalEw4rGN13dnjzfY/ZJnsUsCqoYfuZ qIhplKb7FkJYHLbOMDBYJZIFuosb6YRLuxZDkv2XoXMwgNH+usMF8OPiB4CH0y8rKpCx Z0Wt5Cj0BJ/yoEYN93wiq2EFFtqyVyTlnvK05/V4XCMVdeGmaoxuQX13UI7q8Ay29TS9 eJXirK1VE5j5sznj5/nuGE9RhW4djWniTlpFAFFbYN1qFEqG64XdI8TPsbsCgp8R46Oz XDICtGn4f7FdyuOR7TOpTeSKOPvILTP9QhG1dLR1FxbmxBBfwN0Pa0KTHniW+72ORwgt jRMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=rQIL2cNy; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f15si30795527plr.144.2019.01.28.03.11.52; Mon, 28 Jan 2019 03:12:07 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@c-s.fr header.s=mail header.b=rQIL2cNy; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727031AbfA1LL3 (ORCPT + 99 others); Mon, 28 Jan 2019 06:11:29 -0500 Received: from pegase1.c-s.fr ([93.17.236.30]:30652 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726994AbfA1LL1 (ORCPT ); Mon, 28 Jan 2019 06:11:27 -0500 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 43p6Py6sbxz9v1q8; Mon, 28 Jan 2019 12:11:18 +0100 (CET) Authentication-Results: localhost; dkim=pass reason="1024-bit key; insecure key" header.d=c-s.fr header.i=@c-s.fr header.b=rQIL2cNy; dkim-adsp=pass; dkim-atps=neutral X-Virus-Scanned: Debian amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [192.168.12.234]) (amavisd-new, port 10024) with ESMTP id dJ56Zrl193WH; Mon, 28 Jan 2019 12:11:18 +0100 (CET) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase1.c-s.fr (Postfix) with ESMTP id 43p6Py5rWNz9v1q3; Mon, 28 Jan 2019 12:11:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=c-s.fr; s=mail; t=1548673878; bh=6gmFeRrno51iQ4ACcN7AdeuYqB03iY0XtpQoX1FBkwg=; h=In-Reply-To:References:From:Subject:To:Cc:Date:From; b=rQIL2cNyOMDxSbVlTyAUDobliZn96eWHutdvwnFQQPIzCaU7sYhveiMR61HXU4h3v 8/mhr582IWEL5RQjANLnnGkvp+I4pzT44dKfWD9Vo4IpHre5nSUS6uknDY7p9WvnUW O4mOEaoEd9xBJSJwCL33LeHIW4bB+rXmhzUJusYo= Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 4415B8B79D; Mon, 28 Jan 2019 12:11:25 +0100 (CET) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id Wx04JYdY9Xsj; Mon, 28 Jan 2019 12:11:25 +0100 (CET) Received: from po16846vm.idsi0.si.c-s.fr (po15451.idsi0.si.c-s.fr [172.25.231.2]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 2E0258B796; Mon, 28 Jan 2019 12:11:25 +0100 (CET) Received: by po16846vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 2324E72DE6; Mon, 28 Jan 2019 11:11:25 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH 07/11] powerpc/40x: Don't use SPRN_SPRG_SCRATCH2 in EXCEPTION_PROLOG To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Date: Mon, 28 Jan 2019 11:11:25 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Unlike said in the comment, r1 is not reused by the critical exception handler, as it uses a dedicated critirq_ctx stack. Decrementing r1 early is then unneeded. Should the above be valid, the code is crap buggy anyway as r1 gets some intermediate values that would jeopardise the whole process (for instance after mfspr r1,SPRN_SPRG_THREAD) Using SPRN_SPRG_SCRATCH2 to save r1 is then not needed, r11 can be used instead. This avoids one mtspr and one mfspr and makes the prolog closer to what's done on 6xx and 8xx. Signed-off-by: Christophe Leroy --- arch/powerpc/kernel/head_40x.S | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/arch/powerpc/kernel/head_40x.S b/arch/powerpc/kernel/head_40x.S index 3088c9f29f5e..59f6f53f1ac2 100644 --- a/arch/powerpc/kernel/head_40x.S +++ b/arch/powerpc/kernel/head_40x.S @@ -102,23 +102,20 @@ _ENTRY(saved_ksp_limit) * Exception vector entry code. This code runs with address translation * turned off (i.e. using physical addresses). We assume SPRG_THREAD has * the physical address of the current task thread_struct. - * Note that we have to have decremented r1 before we write to any fields - * of the exception frame, since a critical interrupt could occur at any - * time, and it will write to the area immediately below the current r1. */ #define NORMAL_EXCEPTION_PROLOG \ mtspr SPRN_SPRG_SCRATCH0,r10; /* save two registers to work with */\ mtspr SPRN_SPRG_SCRATCH1,r11; \ - mtspr SPRN_SPRG_SCRATCH2,r1; \ mfcr r10; /* save CR in r10 for now */\ mfspr r11,SPRN_SRR1; /* check whether user or kernel */\ andi. r11,r11,MSR_PR; \ - beq 1f; \ - mfspr r1,SPRN_SPRG_THREAD; /* if from user, start at top of */\ - lwz r1,TASK_STACK-THREAD(r1); /* this thread's kernel stack */\ - addi r1,r1,THREAD_SIZE; \ -1: subi r1,r1,INT_FRAME_SIZE; /* Allocate an exception frame */\ tophys(r11,r1); \ + beq 1f; \ + mfspr r11,SPRN_SPRG_THREAD; /* if from user, start at top of */\ + lwz r11,TASK_STACK-THREAD(r11); /* this thread's kernel stack */\ + addi r11,r11,THREAD_SIZE; \ + tophys(r11,r11); \ +1: subi r11,r11,INT_FRAME_SIZE; /* Allocate an exception frame */\ stw r10,_CCR(r11); /* save various registers */\ stw r12,GPR12(r11); \ stw r9,GPR9(r11); \ @@ -128,11 +125,11 @@ _ENTRY(saved_ksp_limit) stw r12,GPR11(r11); \ mflr r10; \ stw r10,_LINK(r11); \ - mfspr r10,SPRN_SPRG_SCRATCH2; \ mfspr r12,SPRN_SRR0; \ - stw r10,GPR1(r11); \ + stw r1,GPR1(r11); \ mfspr r9,SPRN_SRR1; \ - stw r10,0(r11); \ + stw r1,0(r11); \ + tovirt(r1,r11); /* set new kernel sp */ \ rlwinm r9,r9,0,14,12; /* clear MSR_WE (necessary?) */\ stw r0,GPR0(r11); \ SAVE_4GPRS(3, r11); \ -- 2.13.3