Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2497571pxb; Tue, 9 Mar 2021 04:12:04 -0800 (PST) X-Google-Smtp-Source: ABdhPJxtqQlzH9qODDFa/xTIRsUKnDjv/ruDsTZTq0dG/NuQzRDqlFTFVXjEIn93w/T1YtDpRgot X-Received: by 2002:a17:906:3088:: with SMTP id 8mr19703075ejv.499.1615291924413; 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=tp9I0zsSjVcYiJbuJARuxCg3L18PEDsmOGnm3VDjlBYab51r6UGv1sj7ksn8JMXzUa bJju0pVRIE/RBcX6m8jKL3syj7+4kSwsBtnz12GpPlMScFuzIkfFrugepccRi+LLMA6n xf6pcb89jfE6w4W52RiF+tmrdkK6LLnW/T4EewflCKUeKQKHSBMu6+L8KBdzYAEf3/Fd o9hBnbPBRTmDv/cv3Y1ZAo95Q/51fMRM0EDq+Nnsxtym96XlfTnNuPWSPoChKfV9dxXp 1pvmUVEemF7wy/fSd5qk4EQ+ct0hj2nk1VuMT12FQUoziurBl3aDJaTSrlRj1ZXOU+8T hm+w== 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=TQgt0ocXN/IBwxCZUYDMDmuPlFp8O3AHmpQlkJ8aOro=; b=TO/T/tTjuMQJyflG19za9A/Dllrp37sDpM6+Kg+POScHsjzXvGnN+eUc1JWuhwi3ep vyuIzJikk6naZdHHLUCQarWSzrnL5ukX3ueLj3RArXRJMBMOMHKy66h34LzAoDrcjslS ck4ziD6uOve/+TpFbcbEGYxP77ZSbi8c+QWHAV80T2W3EwA7tgEsCpeqIAciz/+jKocE TFCJuswj7yhI99FmhykGca4kvdaPGjJh863iUS0dBh73CgHRuYJFO7oYILnFUdS3WjxF oRphbpi87WVIvBAbj1aXEi3fO/PwIgVUQ7QHOKZGD63gYXQZ3G1/2cHqtAYEmXdb0byO ddEA== 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 gx7si8801526ejc.349.2021.03.09.04.11.42; 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 S231663AbhCIMKe (ORCPT + 99 others); Tue, 9 Mar 2021 07:10:34 -0500 Received: from pegase1.c-s.fr ([93.17.236.30]:31434 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231237AbhCIMJv (ORCPT ); Tue, 9 Mar 2021 07:09:51 -0500 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4DvvCc4zr1z9tyjL; Tue, 9 Mar 2021 13:09:48 +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 kyi8_AWzEWmE; Tue, 9 Mar 2021 13:09:48 +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 4DvvCc4CSmz9tyjH; Tue, 9 Mar 2021 13:09:48 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id ECA968B800; Tue, 9 Mar 2021 13:09:49 +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 FJfmvrsHzMkR; Tue, 9 Mar 2021 13:09:49 +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 906EC8B7FC; Tue, 9 Mar 2021 13:09:49 +0100 (CET) Received: by po16121vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 72EE367555; Tue, 9 Mar 2021 12:09:49 +0000 (UTC) Message-Id: <9bc023f6139f4ba3667050694b2062ab89d99955.1615291473.git.christophe.leroy@csgroup.eu> In-Reply-To: References: From: Christophe Leroy Subject: [PATCH v2 23/43] powerpc/32: Perform normal function call in 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:49 +0000 (UTC) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now that the MMU is re-enabled before calling the transfer function, we don't need anymore that hack with the address of the handler and the return function sitting just after the 'bl' to the transfer fonction, that function is retrieving via a read relative to 'lr'. Do a regular call to the transfer function, then to the handler, then branch to the return function. Signed-off-by: Christophe Leroy --- arch/powerpc/kernel/entry_32.S | 14 ++++---------- arch/powerpc/kernel/head_32.h | 4 ++-- arch/powerpc/kernel/head_booke.h | 6 +++--- 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index ad1fd33e1126..fb849ef922fb 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S @@ -104,7 +104,7 @@ transfer_to_handler: #ifdef CONFIG_PPC_BOOK3S_32 kuep_lock r11, r12 #endif - b 3f + blr /* if from kernel, check interrupted DOZE/NAP mode */ 2: @@ -118,13 +118,7 @@ transfer_to_handler: #endif /* CONFIG_PPC_BOOK3S_32 || CONFIG_E500 */ .globl transfer_to_handler_cont transfer_to_handler_cont: -3: - mflr r9 - lwz r11,0(r9) /* virtual address of handler */ - lwz r9,4(r9) /* where to go when done */ - mtctr r11 - mtlr r9 - bctr /* jump to handler */ + blr #if defined (CONFIG_PPC_BOOK3S_32) || defined(CONFIG_E500) 4: rlwinm r12,r12,0,~_TLF_NAPPING @@ -404,8 +398,8 @@ fee_restarts: stw r10,_TRAP(r11) addi r3,r1,STACK_FRAME_OVERHEAD bl transfer_to_handler_full - .long unrecoverable_exception - .long ret_from_except + bl unrecoverable_exception + b ret_from_except #endif .globl ret_from_except_full diff --git a/arch/powerpc/kernel/head_32.h b/arch/powerpc/kernel/head_32.h index 160ebd573c37..e09585b88ba7 100644 --- a/arch/powerpc/kernel/head_32.h +++ b/arch/powerpc/kernel/head_32.h @@ -190,8 +190,8 @@ _ASM_NOKPROBE_SYMBOL(\name\()_virt) li r10,trap; \ stw r10,_TRAP(r11); \ bl tfer; \ - .long hdlr; \ - .long ret + bl hdlr; \ + b ret #define EXC_XFER_STD(n, hdlr) \ EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, transfer_to_handler_full, \ diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h index a127d5e7efb4..3707f49f0b78 100644 --- a/arch/powerpc/kernel/head_booke.h +++ b/arch/powerpc/kernel/head_booke.h @@ -322,9 +322,9 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_EMB_HV) #define EXC_XFER_TEMPLATE(hdlr, trap, msr, tfer, ret) \ li r10,trap; \ stw r10,_TRAP(r11); \ - bl tfer; \ - .long hdlr; \ - .long ret + bl tfer; \ + bl hdlr; \ + b ret; \ #define EXC_XFER_STD(n, hdlr) \ EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, transfer_to_handler_full, \ -- 2.25.0