Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2497579pxb; Tue, 9 Mar 2021 04:12:05 -0800 (PST) X-Google-Smtp-Source: ABdhPJwR9DTYCWUDT7zrKytY+0DpNBwznGs12TtDoJEVdseF0f+cCfuxB14/RTXfZchdDVJc4S9S X-Received: by 2002:a17:906:f1d6:: with SMTP id gx22mr3237460ejb.59.1615291924820; Tue, 09 Mar 2021 04:12:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615291924; cv=none; d=google.com; s=arc-20160816; b=Ss/+x7XXpKSpDut4Im09ZBxv2bZq4ltKwVMDVQePk4FyuFx146jijAdfOBdt+wI1j+ KKwFADswsudRC768t7FJe+fz9j8trNdgH3ssXmlmYge8aYrt8Wu9EvWsWDcvC8Uoubwf 5A4OMMasefDCM+rg0/di5WotToG1hWK2PHkLa9c97o9qRLcwXJ8uhtFBUPSMS99Sg4aj /p/KDHdkrsaHkmaHKliF7i7TbDADbDfzQqNXVq3f4QSqUUXBVFthLiB3QOtqwj5Hu3/L FePYC3OfKft+0BYcKhWSWK3R4Tl9xM3asXleOvot3gpXGGWpCtj4abFctgNbbyzf4ird fQPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:date:cc:to:subject:from:references:in-reply-to :message-id; bh=Qtl/kBDQd5txgPZXrWN1XGfpczObB3uCt3kmc8Iic2I=; b=UtSiHJoXdnNLx+aMO2BOp8LPPA/AxUx74aLXax1X1WGhWNmOf1DXcL3i1h4EcLXOTN jVqNmxL7GdHxRDoy2leR6Co3jsbP51FdqwLdVxzq39d64/1aHgK7j2YPborlh2RsLnLD 3D+cnN7eaHhMM2tKzYkgzeEgbwNZbZxcjaxjfkAPFq56cvmFM17RnRcJCUaJXHOj3dBX zkKSBLyMx5FJl4/yPrI/AiJSSFIuWNKAYPlvk+SMB/qGJ0jbfxJYHUBNTsNSfA8xt6ns R0ILNR1cekEQBV5iB4wavfBQGfgnWznTmY5aJ1tUd9F+BWNxMfCgag2Edjfm3mswqh+7 U0Qg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a29si10843363edb.437.2021.03.09.04.11.41; Tue, 09 Mar 2021 04:12:04 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230436AbhCIMKh (ORCPT + 99 others); Tue, 9 Mar 2021 07:10:37 -0500 Received: from pegase1.c-s.fr ([93.17.236.30]:50702 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230328AbhCIMJw (ORCPT ); Tue, 9 Mar 2021 07:09:52 -0500 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4DvvCd4s4xz9tyjN; Tue, 9 Mar 2021 13:09:49 +0100 (CET) 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 4FjtD87utoeF; Tue, 9 Mar 2021 13:09:49 +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 4DvvCd44Lvz9tyjH; Tue, 9 Mar 2021 13:09:49 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id DF2D78B800; Tue, 9 Mar 2021 13:09:50 +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 r04OLEq3xoDj; Tue, 9 Mar 2021 13:09:50 +0100 (CET) Received: from po16121vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 97CF68B7FC; Tue, 9 Mar 2021 13:09:50 +0100 (CET) Received: by po16121vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 7A66D67555; Tue, 9 Mar 2021 12:09:50 +0000 (UTC) Message-Id: In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v2 24/43] powerpc/32: Always save non volatile registers on exception entry To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , npiggin@gmail.com Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Date: Tue, 9 Mar 2021 12:09:50 +0000 (UTC) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In preparation of handling exception entry and exit in C, in order to simplify the handling, always save non volatile registers when entering an exception. Signed-off-by: Christophe Leroy --- arch/powerpc/include/asm/ptrace.h | 6 ++---- arch/powerpc/kernel/entry_32.S | 13 +------------ arch/powerpc/kernel/head_32.h | 3 +-- arch/powerpc/kernel/head_booke.h | 2 +- 4 files changed, 5 insertions(+), 19 deletions(-) diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h index 975ba260006a..0a5d8c6b13c4 100644 --- a/arch/powerpc/include/asm/ptrace.h +++ b/arch/powerpc/include/asm/ptrace.h @@ -209,16 +209,14 @@ static inline void regs_set_return_value(struct pt_regs *regs, unsigned long rc) */ #define TRAP_FLAGS_MASK 0x1F #define TRAP(regs) ((regs)->trap & ~TRAP_FLAGS_MASK) -#define FULL_REGS(regs) (((regs)->trap & 1) == 0) -#define SET_FULL_REGS(regs) ((regs)->trap |= 1) +#define FULL_REGS(regs) true +#define SET_FULL_REGS(regs) do { } while (0) #define IS_CRITICAL_EXC(regs) (((regs)->trap & 2) != 0) #define IS_MCHECK_EXC(regs) (((regs)->trap & 4) != 0) #define IS_DEBUG_EXC(regs) (((regs)->trap & 8) != 0) #define NV_REG_POISON 0xdeadbeef #define CHECK_FULL_REGS(regs) \ do { \ - if ((regs)->trap & 1) \ - printk(KERN_CRIT "%s: partial register set\n", __func__); \ } while (0) #endif /* __powerpc64__ */ diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index fb849ef922fb..7084289994b3 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S @@ -81,12 +81,12 @@ _ASM_NOKPROBE_SYMBOL(crit_transfer_to_handler) */ .globl transfer_to_handler_full transfer_to_handler_full: - SAVE_NVGPRS(r11) _ASM_NOKPROBE_SYMBOL(transfer_to_handler_full) /* fall through */ .globl transfer_to_handler transfer_to_handler: + SAVE_NVGPRS(r11) stw r2,GPR2(r11) stw r12,_NIP(r11) stw r9,_MSR(r11) @@ -234,10 +234,6 @@ handle_page_fault: bl do_page_fault cmpwi r3,0 beq+ ret_from_except - SAVE_NVGPRS(r1) - lwz r0,_TRAP(r1) - clrrwi r0,r0,1 - stw r0,_TRAP(r1) mr r4,r3 /* err arg for bad_page_fault */ addi r3,r1,STACK_FRAME_OVERHEAD bl __bad_page_fault @@ -810,13 +806,6 @@ recheck: do_user_signal: /* r10 contains MSR_KERNEL here */ ori r10,r10,MSR_EE mtmsr r10 /* hard-enable interrupts */ - /* save r13-r31 in the exception frame, if not already done */ - lwz r3,_TRAP(r1) - andi. r0,r3,1 - beq 2f - SAVE_NVGPRS(r1) - rlwinm r3,r3,0,0,30 - stw r3,_TRAP(r1) 2: addi r3,r1,STACK_FRAME_OVERHEAD mr r4,r9 bl do_notify_resume diff --git a/arch/powerpc/kernel/head_32.h b/arch/powerpc/kernel/head_32.h index e09585b88ba7..087445e45489 100644 --- a/arch/powerpc/kernel/head_32.h +++ b/arch/powerpc/kernel/head_32.h @@ -198,7 +198,7 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt) ret_from_except_full) #define EXC_XFER_LITE(n, hdlr) \ - EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, transfer_to_handler, \ + EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, transfer_to_handler, \ ret_from_except) .macro vmap_stack_overflow_exception @@ -215,7 +215,6 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt) lwz r1, emergency_ctx@l(r1) addi r1, r1, THREAD_SIZE - INT_FRAME_SIZE EXCEPTION_PROLOG_2 vmap_stack_overflow - SAVE_NVGPRS(r11) addi r3, r1, STACK_FRAME_OVERHEAD EXC_XFER_STD(0, stack_overflow_exception) .endm diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h index 3707f49f0b78..b31bf9e833c0 100644 --- a/arch/powerpc/kernel/head_booke.h +++ b/arch/powerpc/kernel/head_booke.h @@ -331,7 +331,7 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV) ret_from_except_full) #define EXC_XFER_LITE(n, hdlr) \ - EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, transfer_to_handler, \ + EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, transfer_to_handler, \ ret_from_except) /* Check for a single step debug exception while in an exception -- 2.25.0