From patchwork Tue Mar 8 13:50:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603017 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=aHO+7NxD; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcDm2jr5z9sGD for ; Wed, 9 Mar 2022 00:51:20 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcDk4zpZz3bWG for ; Wed, 9 Mar 2022 00:51:18 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=aHO+7NxD; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::431; helo=mail-pf1-x431.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=aHO+7NxD; dkim-atps=neutral Received: from mail-pf1-x431.google.com (mail-pf1-x431.google.com [IPv6:2607:f8b0:4864:20::431]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDQ3b2Bz30G0 for ; Wed, 9 Mar 2022 00:51:00 +1100 (AEDT) Received: by mail-pf1-x431.google.com with SMTP id z16so17381960pfh.3 for ; Tue, 08 Mar 2022 05:51:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=X/JGFhmA8c44hDr9TLg48cMIKO3X6c2pGbif4ExiSqo=; b=aHO+7NxDBZNr+WQ8Ml8KUCgs+z3A025scl2eB/06srpvimjp6rZptS0yZqzOsbvyL+ 8XjVH5lIkQpj9MN5GywVqNS4BDKuRc3IVW0oWMmZo9XU9K97Us5bXLuHOH6BBo1q44ja JG8qNUn3Eu3z5aktbyjGlJyRbotnODn7Kr0o+5Jqs/vey3zCLPc7I27iqSw5Z6ZlC63v 8/tIL1ziY30v52r/y5IBM+PvtY4Z7ZatCHcYDVCBwjR4Z5wHqvyV+KACCCwC/EbBKCp3 GM8OSpNxipWU6+dTVuY7WpGo9V/b29KvzM4AsMDfNM+1KVNRLrVLuFJEZhjlGo3gaYWC 3krA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=X/JGFhmA8c44hDr9TLg48cMIKO3X6c2pGbif4ExiSqo=; b=Z2Nhi+4VhhUImhvL0j12UP0FzkoYrQQQH/DsKx9Zd5h8Ma/BlzUAuccWdlY2Iuae5A xcWq27npSi4SotJeBO5qAxfF8kL6LmRbuqEDzOwJsIvrtRFmZN40p53oimzsr0Ej1aJZ 6susJG8CHUxFVTDBD8Jdy/nS4ieO4tuYbJlS07vkgehYAoCc4sE0QOWKVKD+h3nw8rKD Y2DVb27WUgtuam7ZML8fuMB2jYcmIjg2Wi4LSB/daY8cb8ENNdDa04iUjOcXEl2idG/z W/oXoCbB6kBzc6if1qvPQnPv0m4AJ4ndRqkHmaN6eVwTxJyfU1UYR69JvFi7StF07Tnz v+1g== X-Gm-Message-State: AOAM533DDlM2ZAlgGTaFe954/fmPk7PWT3cnjc6Mz89KxJpUEk9tYplc 1dpljgiVKAk2T9DQKcpx3hzY6AFOsEQ= X-Google-Smtp-Source: ABdhPJw28YOTHyiNGur9fZQhGKYMyNMQpG/WfEo8cQwblpGauYORAFfTqVfEQeaYq+vQJpXtB1M0EA== X-Received: by 2002:a05:6a00:3199:b0:4f7:945:14cf with SMTP id bj25-20020a056a00319900b004f7094514cfmr9005693pfb.47.1646747459557; Tue, 08 Mar 2022 05:50:59 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.50.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:50:59 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 01/14] powerpc/rtas: Move rtas entry assembly into its own file Date: Tue, 8 Mar 2022 23:50:34 +1000 Message-Id: <20220308135047.478297-2-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" This makes working on the code a bit easier. Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/Makefile | 2 +- arch/powerpc/kernel/entry_32.S | 49 -------- arch/powerpc/kernel/entry_64.S | 150 ----------------------- arch/powerpc/kernel/rtas_entry.S | 199 +++++++++++++++++++++++++++++++ 4 files changed, 200 insertions(+), 200 deletions(-) create mode 100644 arch/powerpc/kernel/rtas_entry.S diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index 4d7829399570..13602b0f0472 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -68,7 +68,7 @@ obj-$(CONFIG_PPC_BOOK3S_IDLE) += idle_book3s.o procfs-y := proc_powerpc.o obj-$(CONFIG_PROC_FS) += $(procfs-y) rtaspci-$(CONFIG_PPC64)-$(CONFIG_PCI) := rtas_pci.o -obj-$(CONFIG_PPC_RTAS) += rtas.o rtas-rtc.o $(rtaspci-y-y) +obj-$(CONFIG_PPC_RTAS) += rtas_entry.o rtas.o rtas-rtc.o $(rtaspci-y-y) obj-$(CONFIG_PPC_RTAS_DAEMON) += rtasd.o obj-$(CONFIG_RTAS_FLASH) += rtas_flash.o obj-$(CONFIG_RTAS_PROC) += rtas-proc.o diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S index 7748c278d13c..1d599df6f169 100644 --- a/arch/powerpc/kernel/entry_32.S +++ b/arch/powerpc/kernel/entry_32.S @@ -555,52 +555,3 @@ ret_from_mcheck_exc: _ASM_NOKPROBE_SYMBOL(ret_from_mcheck_exc) #endif /* CONFIG_BOOKE */ #endif /* !(CONFIG_4xx || CONFIG_BOOKE) */ - -/* - * PROM code for specific machines follows. Put it - * here so it's easy to add arch-specific sections later. - * -- Cort - */ -#ifdef CONFIG_PPC_RTAS -/* - * On CHRP, the Run-Time Abstraction Services (RTAS) have to be - * called with the MMU off. - */ -_GLOBAL(enter_rtas) - stwu r1,-INT_FRAME_SIZE(r1) - mflr r0 - stw r0,INT_FRAME_SIZE+4(r1) - LOAD_REG_ADDR(r4, rtas) - lis r6,1f@ha /* physical return address for rtas */ - addi r6,r6,1f@l - tophys(r6,r6) - lwz r8,RTASENTRY(r4) - lwz r4,RTASBASE(r4) - mfmsr r9 - stw r9,8(r1) - LOAD_REG_IMMEDIATE(r0,MSR_KERNEL) - mtmsr r0 /* disable interrupts so SRR0/1 don't get trashed */ - li r9,MSR_KERNEL & ~(MSR_IR|MSR_DR) - mtlr r6 - stw r1, THREAD + RTAS_SP(r2) - mtspr SPRN_SRR0,r8 - mtspr SPRN_SRR1,r9 - rfi -1: - lis r8, 1f@h - ori r8, r8, 1f@l - LOAD_REG_IMMEDIATE(r9,MSR_KERNEL) - mtspr SPRN_SRR0,r8 - mtspr SPRN_SRR1,r9 - rfi /* Reactivate MMU translation */ -1: - lwz r8,INT_FRAME_SIZE+4(r1) /* get return address */ - lwz r9,8(r1) /* original msr value */ - addi r1,r1,INT_FRAME_SIZE - li r0,0 - stw r0, THREAD + RTAS_SP(r2) - mtlr r8 - mtmsr r9 - blr /* return to caller */ -_ASM_NOKPROBE_SYMBOL(enter_rtas) -#endif /* CONFIG_PPC_RTAS */ diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 9581906b5ee9..01ace4c56104 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -264,156 +264,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S) addi r1,r1,SWITCH_FRAME_SIZE blr -#ifdef CONFIG_PPC_RTAS -/* - * On CHRP, the Run-Time Abstraction Services (RTAS) have to be - * called with the MMU off. - * - * In addition, we need to be in 32b mode, at least for now. - * - * Note: r3 is an input parameter to rtas, so don't trash it... - */ -_GLOBAL(enter_rtas) - mflr r0 - std r0,16(r1) - stdu r1,-SWITCH_FRAME_SIZE(r1) /* Save SP and create stack space. */ - - /* Because RTAS is running in 32b mode, it clobbers the high order half - * of all registers that it saves. We therefore save those registers - * RTAS might touch to the stack. (r0, r3-r13 are caller saved) - */ - SAVE_GPR(2, r1) /* Save the TOC */ - SAVE_GPR(13, r1) /* Save paca */ - SAVE_NVGPRS(r1) /* Save the non-volatiles */ - - mfcr r4 - std r4,_CCR(r1) - mfctr r5 - std r5,_CTR(r1) - mfspr r6,SPRN_XER - std r6,_XER(r1) - mfdar r7 - std r7,_DAR(r1) - mfdsisr r8 - std r8,_DSISR(r1) - - /* Temporary workaround to clear CR until RTAS can be modified to - * ignore all bits. - */ - li r0,0 - mtcr r0 - -#ifdef CONFIG_BUG - /* There is no way it is acceptable to get here with interrupts enabled, - * check it with the asm equivalent of WARN_ON - */ - lbz r0,PACAIRQSOFTMASK(r13) -1: tdeqi r0,IRQS_ENABLED - EMIT_WARN_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING -#endif - - /* Hard-disable interrupts */ - mfmsr r6 - rldicl r7,r6,48,1 - rotldi r7,r7,16 - mtmsrd r7,1 - - /* Unfortunately, the stack pointer and the MSR are also clobbered, - * so they are saved in the PACA which allows us to restore - * our original state after RTAS returns. - */ - std r1,PACAR1(r13) - std r6,PACASAVEDMSR(r13) - - /* Setup our real return addr */ - LOAD_REG_ADDR(r4,rtas_return_loc) - clrldi r4,r4,2 /* convert to realmode address */ - mtlr r4 - - li r0,0 - ori r0,r0,MSR_EE|MSR_SE|MSR_BE|MSR_RI - andc r0,r6,r0 - - li r9,1 - rldicr r9,r9,MSR_SF_LG,(63-MSR_SF_LG) - ori r9,r9,MSR_IR|MSR_DR|MSR_FE0|MSR_FE1|MSR_FP|MSR_RI|MSR_LE - andc r6,r0,r9 - -__enter_rtas: - sync /* disable interrupts so SRR0/1 */ - mtmsrd r0 /* don't get trashed */ - - LOAD_REG_ADDR(r4, rtas) - ld r5,RTASENTRY(r4) /* get the rtas->entry value */ - ld r4,RTASBASE(r4) /* get the rtas->base value */ - - mtspr SPRN_SRR0,r5 - mtspr SPRN_SRR1,r6 - RFI_TO_KERNEL - b . /* prevent speculative execution */ - -rtas_return_loc: - FIXUP_ENDIAN - - /* - * Clear RI and set SF before anything. - */ - mfmsr r6 - li r0,MSR_RI - andc r6,r6,r0 - sldi r0,r0,(MSR_SF_LG - MSR_RI_LG) - or r6,r6,r0 - sync - mtmsrd r6 - - /* relocation is off at this point */ - GET_PACA(r4) - clrldi r4,r4,2 /* convert to realmode address */ - - bcl 20,31,$+4 -0: mflr r3 - ld r3,(1f-0b)(r3) /* get &rtas_restore_regs */ - - ld r1,PACAR1(r4) /* Restore our SP */ - ld r4,PACASAVEDMSR(r4) /* Restore our MSR */ - - mtspr SPRN_SRR0,r3 - mtspr SPRN_SRR1,r4 - RFI_TO_KERNEL - b . /* prevent speculative execution */ -_ASM_NOKPROBE_SYMBOL(__enter_rtas) -_ASM_NOKPROBE_SYMBOL(rtas_return_loc) - - .align 3 -1: .8byte rtas_restore_regs - -rtas_restore_regs: - /* relocation is on at this point */ - REST_GPR(2, r1) /* Restore the TOC */ - REST_GPR(13, r1) /* Restore paca */ - REST_NVGPRS(r1) /* Restore the non-volatiles */ - - GET_PACA(r13) - - ld r4,_CCR(r1) - mtcr r4 - ld r5,_CTR(r1) - mtctr r5 - ld r6,_XER(r1) - mtspr SPRN_XER,r6 - ld r7,_DAR(r1) - mtdar r7 - ld r8,_DSISR(r1) - mtdsisr r8 - - addi r1,r1,SWITCH_FRAME_SIZE /* Unstack our frame */ - ld r0,16(r1) /* get return address */ - - mtlr r0 - blr /* return to caller */ - -#endif /* CONFIG_PPC_RTAS */ - _GLOBAL(enter_prom) mflr r0 std r0,16(r1) diff --git a/arch/powerpc/kernel/rtas_entry.S b/arch/powerpc/kernel/rtas_entry.S new file mode 100644 index 000000000000..192fea342744 --- /dev/null +++ b/arch/powerpc/kernel/rtas_entry.S @@ -0,0 +1,199 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#include +#include +#include +#include + +/* + * RTAS is called with MSR IR, DR, EE disabled, and LR in the return address. + * + * Note: r3 is an input parameter to rtas, so don't trash it... + */ + +#ifdef CONFIG_PPC32 +_GLOBAL(enter_rtas) + stwu r1,-INT_FRAME_SIZE(r1) + mflr r0 + stw r0,INT_FRAME_SIZE+4(r1) + LOAD_REG_ADDR(r4, rtas) + lis r6,1f@ha /* physical return address for rtas */ + addi r6,r6,1f@l + tophys(r6,r6) + lwz r8,RTASENTRY(r4) + lwz r4,RTASBASE(r4) + mfmsr r9 + stw r9,8(r1) + LOAD_REG_IMMEDIATE(r0,MSR_KERNEL) + mtmsr r0 /* disable interrupts so SRR0/1 don't get trashed */ + li r9,MSR_KERNEL & ~(MSR_IR|MSR_DR) + mtlr r6 + stw r1, THREAD + RTAS_SP(r2) + mtspr SPRN_SRR0,r8 + mtspr SPRN_SRR1,r9 + rfi +1: + lis r8, 1f@h + ori r8, r8, 1f@l + LOAD_REG_IMMEDIATE(r9,MSR_KERNEL) + mtspr SPRN_SRR0,r8 + mtspr SPRN_SRR1,r9 + rfi /* Reactivate MMU translation */ +1: + lwz r8,INT_FRAME_SIZE+4(r1) /* get return address */ + lwz r9,8(r1) /* original msr value */ + addi r1,r1,INT_FRAME_SIZE + li r0,0 + stw r0, THREAD + RTAS_SP(r2) + mtlr r8 + mtmsr r9 + blr /* return to caller */ +_ASM_NOKPROBE_SYMBOL(enter_rtas) + +#else /* CONFIG_PPC32 */ +#include + +/* + * 32-bit rtas on 64-bit machines has the additional problem that RTAS may + * not preserve the upper parts of registers it uses. + */ +_GLOBAL(enter_rtas) + mflr r0 + std r0,16(r1) + stdu r1,-SWITCH_FRAME_SIZE(r1) /* Save SP and create stack space. */ + + /* Because RTAS is running in 32b mode, it clobbers the high order half + * of all registers that it saves. We therefore save those registers + * RTAS might touch to the stack. (r0, r3-r13 are caller saved) + */ + SAVE_GPR(2, r1) /* Save the TOC */ + SAVE_GPR(13, r1) /* Save paca */ + SAVE_NVGPRS(r1) /* Save the non-volatiles */ + + mfcr r4 + std r4,_CCR(r1) + mfctr r5 + std r5,_CTR(r1) + mfspr r6,SPRN_XER + std r6,_XER(r1) + mfdar r7 + std r7,_DAR(r1) + mfdsisr r8 + std r8,_DSISR(r1) + + /* Temporary workaround to clear CR until RTAS can be modified to + * ignore all bits. + */ + li r0,0 + mtcr r0 + +#ifdef CONFIG_BUG + /* There is no way it is acceptable to get here with interrupts enabled, + * check it with the asm equivalent of WARN_ON + */ + lbz r0,PACAIRQSOFTMASK(r13) +1: tdeqi r0,IRQS_ENABLED + EMIT_WARN_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING +#endif + + /* Hard-disable interrupts */ + mfmsr r6 + rldicl r7,r6,48,1 + rotldi r7,r7,16 + mtmsrd r7,1 + + /* Unfortunately, the stack pointer and the MSR are also clobbered, + * so they are saved in the PACA which allows us to restore + * our original state after RTAS returns. + */ + std r1,PACAR1(r13) + std r6,PACASAVEDMSR(r13) + + /* Setup our real return addr */ + LOAD_REG_ADDR(r4,rtas_return_loc) + clrldi r4,r4,2 /* convert to realmode address */ + mtlr r4 + + li r0,0 + ori r0,r0,MSR_EE|MSR_SE|MSR_BE|MSR_RI + andc r0,r6,r0 + + li r9,1 + rldicr r9,r9,MSR_SF_LG,(63-MSR_SF_LG) + ori r9,r9,MSR_IR|MSR_DR|MSR_FE0|MSR_FE1|MSR_FP|MSR_RI|MSR_LE + andc r6,r0,r9 + +__enter_rtas: + sync /* disable interrupts so SRR0/1 */ + mtmsrd r0 /* don't get trashed */ + + LOAD_REG_ADDR(r4, rtas) + ld r5,RTASENTRY(r4) /* get the rtas->entry value */ + ld r4,RTASBASE(r4) /* get the rtas->base value */ + + mtspr SPRN_SRR0,r5 + mtspr SPRN_SRR1,r6 + RFI_TO_KERNEL + b . /* prevent speculative execution */ + +rtas_return_loc: + FIXUP_ENDIAN + + /* + * Clear RI and set SF before anything. + */ + mfmsr r6 + li r0,MSR_RI + andc r6,r6,r0 + sldi r0,r0,(MSR_SF_LG - MSR_RI_LG) + or r6,r6,r0 + sync + mtmsrd r6 + + /* relocation is off at this point */ + GET_PACA(r4) + clrldi r4,r4,2 /* convert to realmode address */ + + bcl 20,31,$+4 +0: mflr r3 + ld r3,(1f-0b)(r3) /* get &rtas_restore_regs */ + + ld r1,PACAR1(r4) /* Restore our SP */ + ld r4,PACASAVEDMSR(r4) /* Restore our MSR */ + + mtspr SPRN_SRR0,r3 + mtspr SPRN_SRR1,r4 + RFI_TO_KERNEL + b . /* prevent speculative execution */ +_ASM_NOKPROBE_SYMBOL(__enter_rtas) +_ASM_NOKPROBE_SYMBOL(rtas_return_loc) + + .align 3 +1: .8byte rtas_restore_regs + +rtas_restore_regs: + /* relocation is on at this point */ + REST_GPR(2, r1) /* Restore the TOC */ + REST_GPR(13, r1) /* Restore paca */ + REST_NVGPRS(r1) /* Restore the non-volatiles */ + + GET_PACA(r13) + + ld r4,_CCR(r1) + mtcr r4 + ld r5,_CTR(r1) + mtctr r5 + ld r6,_XER(r1) + mtspr SPRN_XER,r6 + ld r7,_DAR(r1) + mtdar r7 + ld r8,_DSISR(r1) + mtdsisr r8 + + addi r1,r1,SWITCH_FRAME_SIZE /* Unstack our frame */ + ld r0,16(r1) /* get return address */ + + mtlr r0 + blr /* return to caller */ + +#endif /* CONFIG_PPC32 */ From patchwork Tue Mar 8 13:50:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603020 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=lzU2OvmU; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcG43N6jz9sGD for ; Wed, 9 Mar 2022 00:52:28 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcG24KxJz3bTd for ; Wed, 9 Mar 2022 00:52:26 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=lzU2OvmU; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::632; helo=mail-pl1-x632.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=lzU2OvmU; dkim-atps=neutral Received: from mail-pl1-x632.google.com (mail-pl1-x632.google.com [IPv6:2607:f8b0:4864:20::632]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDR33y9z30G0 for ; Wed, 9 Mar 2022 00:51:03 +1100 (AEDT) Received: by mail-pl1-x632.google.com with SMTP id w4so6740967ply.13 for ; Tue, 08 Mar 2022 05:51:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GRRJKXwWejMGknJKmtYz7Ykt2Hg5PpTL/7C96be1WX0=; b=lzU2OvmUjLcz/d/0N30727HNXObkDMZef3rNQHLHF/lx5Xie3K6TN74h1bGaH4H+Z9 zW+LtW2PB2L61SxpcZxtil6sObXGYKfC48MRLHbIebkCVCRkuhBarakj4/M1kZXbHF9k Z+Ee9Z5vcIcSY6fCcrS2bO1Z49Ku2ZssfuD36NubB1UlvDyAA9i1Rgu5gFSjVMGUnyAp Tiu0uzncrBXcQ+UeMbWl2aNVXt0peXwTqiMpzkuZ4mg+xqor8W7u0tnuVgzsRehZP5Ui cEB1yjb6BCkMoclCJ4DIzgeowTtvH7DB9/ABQkspibz6eDSTG/7yw4N3fqZHY0893rQo 7xwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GRRJKXwWejMGknJKmtYz7Ykt2Hg5PpTL/7C96be1WX0=; b=UyQCql3yJ1luQ6gaQJXSvMWpT3OCUzQM3kwc8kFgwFqjDj53MqSAM4zlt7Yb2OOzn1 AkR81ew23xD2iPAZI69ddUCnLzs1LdLdnGTTijurjzfnvNnKcSs1nAHwPJFJ8PL9o9JY o0lvh5j83ArDptCfDiOFGxQv2/+iTS1Xin9RTOB+xqOCVss+bIJqVYwr/NMBp4oKtSWW 0bj5Rqf7hzpnetK5uXYpwq70KJdMX46QbV7K3syIUdxdCHLpXraLcLD/esl6iuee86eT zoeXvc9Ok/z4kSrePjOAZ5FtVdk4caYe1fOG/HS163g/t+ij423+rCjCN4L2uxj2H2l/ JR1Q== X-Gm-Message-State: AOAM532TYeeS2T4dn3b79WAaIA1XPkKNsPTWIMjE3zcCz6tdsqO+tdz6 v9pGhbgXi5ynv8gjVkY88OyjZRYQu2M= X-Google-Smtp-Source: ABdhPJxHjfQrpW2/nlix1yfTAWYm8Hs1YtbbJw39E6xvoCpPskFO4SaV+ko1s2HrtpXN4auQ3mRS1w== X-Received: by 2002:a17:902:e849:b0:152:ed30:fa76 with SMTP id t9-20020a170902e84900b00152ed30fa76mr60380plg.161.1646747461994; Tue, 08 Mar 2022 05:51:01 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:01 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 02/14] powerpc/rtas: Make enter_rtas a nokprobe symbol on 64-bit Date: Tue, 8 Mar 2022 23:50:35 +1000 Message-Id: <20220308135047.478297-3-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" This symbol is marked nokprobe on 32-bit but not 64-bit, add it. Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/rtas_entry.S | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/powerpc/kernel/rtas_entry.S b/arch/powerpc/kernel/rtas_entry.S index 192fea342744..afe3b789bc36 100644 --- a/arch/powerpc/kernel/rtas_entry.S +++ b/arch/powerpc/kernel/rtas_entry.S @@ -165,6 +165,7 @@ rtas_return_loc: mtspr SPRN_SRR1,r4 RFI_TO_KERNEL b . /* prevent speculative execution */ +_ASM_NOKPROBE_SYMBOL(enter_rtas) _ASM_NOKPROBE_SYMBOL(__enter_rtas) _ASM_NOKPROBE_SYMBOL(rtas_return_loc) From patchwork Tue Mar 8 13:50:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603021 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=j03UrdTW; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcGm3BYyz9sGD for ; Wed, 9 Mar 2022 00:53:04 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcGl1L2Vz3bk5 for ; Wed, 9 Mar 2022 00:53:03 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=j03UrdTW; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::630; helo=mail-pl1-x630.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=j03UrdTW; dkim-atps=neutral Received: from mail-pl1-x630.google.com (mail-pl1-x630.google.com [IPv6:2607:f8b0:4864:20::630]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDV6V2Xz30G0 for ; Wed, 9 Mar 2022 00:51:06 +1100 (AEDT) Received: by mail-pl1-x630.google.com with SMTP id s18so3881876plp.1 for ; Tue, 08 Mar 2022 05:51:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=e6Kbe3fqOXlx/Tl46MXH05eyV5FjfuguxAH6pFTBvc8=; b=j03UrdTWVFDWD1RtYxRJjdFCWFPJKhijCVYE9heSxjWMzRLzZJ7oD9h5KngGBCkiON 5YjY1Db3sgGi0NkjQIgIjz/0/Y9VhL+kspz2wZ/Il9kusu91b/GlXGDfaRewBt/kZTOt nqxalta7kK1nxC6WSSR7Mvda/idnqa2JtcqnZEriXhdCh3sJljjAAzvjj/8h93DRK/Tk BJGDrC6Fw1OEN7i/C+u4ZPUGa3Poqi3n52Dqx/FZ3MjJlKyekZwrc4IQ1sZqtoX9a+Pl PNK5/GZpTzTdz50Ema2gqPM5GU1numia91o0TpMyy2sRLOf9eQX7jrJOvWJr+j3Y0+i8 RCQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=e6Kbe3fqOXlx/Tl46MXH05eyV5FjfuguxAH6pFTBvc8=; b=bqB5eNCCzE7fVm0c6w5AmI6lSYH70uZK0ti7obVZR/Zay87/pE8rovXex5DN7n3fHg rlw1MqgkYm3CJvW6xX11oDlQxbSOW+DErsK1bSFY92bNOPnsMftARIP77QJXzPBES4+a ppOa81dFKJzQxtl9kITyfixF54U7gPWLxi8t4oGwxQQq0INj3UeLg7d6jGJMUC06OPxS zPelSkRUCHqUg0rx4f4c1X/UWP9icjTxhFKRM2yNwuek592N53lfS1V6u95THlJtOeiR CoavHOpYC1ABC/tpq6MPiFyzofJ8TDA0zaLfsSHeGHnXoD15NA7tQVwT/WMYZ5Xmn3V7 TuNg== X-Gm-Message-State: AOAM533nIW3+bt5LVGGQLpjhA3OoMIWfXQ2iiZTExjJqEwAy8hZwSiUw Cf91BpWNdkqNcw2EezaMRIDsIOPU4zc= X-Google-Smtp-Source: ABdhPJyf2cgM7OqF6fP1L75Kf8RycVpC1xNVLGBwYH9dUThD+iKovyJl6koAhf7O99DDiQU0/4hoQQ== X-Received: by 2002:a17:902:bb02:b0:151:56a8:f80b with SMTP id im2-20020a170902bb0200b0015156a8f80bmr17862880plb.30.1646747465646; Tue, 08 Mar 2022 05:51:05 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:05 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 03/14] powerpc/rtas: Fix whitespace in rtas_entry.S Date: Tue, 8 Mar 2022 23:50:36 +1000 Message-Id: <20220308135047.478297-4-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" The code was moved verbatim including whitespace cruft. Fix that. Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/rtas_entry.S | 34 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/arch/powerpc/kernel/rtas_entry.S b/arch/powerpc/kernel/rtas_entry.S index afe3b789bc36..6fa10eb49a9c 100644 --- a/arch/powerpc/kernel/rtas_entry.S +++ b/arch/powerpc/kernel/rtas_entry.S @@ -60,12 +60,12 @@ _ASM_NOKPROBE_SYMBOL(enter_rtas) _GLOBAL(enter_rtas) mflr r0 std r0,16(r1) - stdu r1,-SWITCH_FRAME_SIZE(r1) /* Save SP and create stack space. */ + stdu r1,-SWITCH_FRAME_SIZE(r1) /* Save SP and create stack space. */ /* Because RTAS is running in 32b mode, it clobbers the high order half * of all registers that it saves. We therefore save those registers * RTAS might touch to the stack. (r0, r3-r13 are caller saved) - */ + */ SAVE_GPR(2, r1) /* Save the TOC */ SAVE_GPR(13, r1) /* Save paca */ SAVE_NVGPRS(r1) /* Save the non-volatiles */ @@ -105,21 +105,21 @@ _GLOBAL(enter_rtas) /* Unfortunately, the stack pointer and the MSR are also clobbered, * so they are saved in the PACA which allows us to restore * our original state after RTAS returns. - */ + */ std r1,PACAR1(r13) - std r6,PACASAVEDMSR(r13) + std r6,PACASAVEDMSR(r13) - /* Setup our real return addr */ + /* Setup our real return addr */ LOAD_REG_ADDR(r4,rtas_return_loc) clrldi r4,r4,2 /* convert to realmode address */ - mtlr r4 + mtlr r4 li r0,0 ori r0,r0,MSR_EE|MSR_SE|MSR_BE|MSR_RI andc r0,r6,r0 - - li r9,1 - rldicr r9,r9,MSR_SF_LG,(63-MSR_SF_LG) + + li r9,1 + rldicr r9,r9,MSR_SF_LG,(63-MSR_SF_LG) ori r9,r9,MSR_IR|MSR_DR|MSR_FE0|MSR_FE1|MSR_FP|MSR_RI|MSR_LE andc r6,r0,r9 @@ -130,7 +130,7 @@ __enter_rtas: LOAD_REG_ADDR(r4, rtas) ld r5,RTASENTRY(r4) /* get the rtas->entry value */ ld r4,RTASBASE(r4) /* get the rtas->base value */ - + mtspr SPRN_SRR0,r5 mtspr SPRN_SRR1,r6 RFI_TO_KERNEL @@ -142,13 +142,13 @@ rtas_return_loc: /* * Clear RI and set SF before anything. */ - mfmsr r6 + mfmsr r6 li r0,MSR_RI andc r6,r6,r0 sldi r0,r0,(MSR_SF_LG - MSR_RI_LG) or r6,r6,r0 sync - mtmsrd r6 + mtmsrd r6 /* relocation is off at this point */ GET_PACA(r4) @@ -158,8 +158,8 @@ rtas_return_loc: 0: mflr r3 ld r3,(1f-0b)(r3) /* get &rtas_restore_regs */ - ld r1,PACAR1(r4) /* Restore our SP */ - ld r4,PACASAVEDMSR(r4) /* Restore our MSR */ + ld r1,PACAR1(r4) /* Restore our SP */ + ld r4,PACASAVEDMSR(r4) /* Restore our MSR */ mtspr SPRN_SRR0,r3 mtspr SPRN_SRR1,r4 @@ -191,10 +191,10 @@ rtas_restore_regs: ld r8,_DSISR(r1) mtdsisr r8 - addi r1,r1,SWITCH_FRAME_SIZE /* Unstack our frame */ + addi r1,r1,SWITCH_FRAME_SIZE /* Unstack our frame */ ld r0,16(r1) /* get return address */ - mtlr r0 - blr /* return to caller */ + mtlr r0 + blr /* return to caller */ #endif /* CONFIG_PPC32 */ From patchwork Tue Mar 8 13:50:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603023 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=D/zB491N; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcHT2mBhz9sGD for ; Wed, 9 Mar 2022 00:53:41 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcHR55dCz3bs8 for ; Wed, 9 Mar 2022 00:53:39 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=D/zB491N; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::1032; helo=mail-pj1-x1032.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=D/zB491N; dkim-atps=neutral Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDY5F3Cz3bTQ for ; Wed, 9 Mar 2022 00:51:09 +1100 (AEDT) Received: by mail-pj1-x1032.google.com with SMTP id bx5so17222674pjb.3 for ; Tue, 08 Mar 2022 05:51:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oeN+/IsAqYf3qzpEiRXIii5XjvA70wBP422+zuLTdjg=; b=D/zB491Ni9Fxhj09soRh5fAEjC0qi4Mp3C2bub7hSw0bd4zcz9H/6pYWNG3mEWIgJM 4hTiM6LgZgx79+m/yLOAxdoGkidQIDug5CPy/qbaoMqlaYZ4tAP2Cs/HTmqXbwrLN4sF hHzzaM1eL8r9T3Vy0lU5fyLQFqfnEvPhqV9D4MfagUOSbWmFgyJGvFYnJMDn1nNN5Zzh RIAjQNmrmm8VMMcTVVU0E0HPAfzvpbyzG1N6ZxLPWidPfxnjTY8Ww0GjK1d4frFjUpG8 3y2Out0WVTlygxDPvQ2Db+6n0ojGevkJKxjRkIEgICOgsdCH1aMu2lwK5p+Z9jN2TYYT FGaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oeN+/IsAqYf3qzpEiRXIii5XjvA70wBP422+zuLTdjg=; b=qUTVu7u9c1O7UoI/nbXdSkJ4+TmBTxvUnPyqCWoz6CX2zv0hZWNWvkEWTUut7k6YdW LpnocvNy1pbGVE4Gqh2qs3taOZHsBM6ZtzH0gH32EuTZnbrKQo5ahdEi45VXc2PNTOJo HZ3ro4wCuxkJsI4pK31xE5P/Psq5orHMqWVdlLLapFu5rw9MF5eudS5/vSMWMY2yNC8f 7LHvKwOdBVrGRaTYfvX8NKlFoKhpRNhDXj8yh1q7PlLTCkQPBfmRX/gFhuSknJ/R+92I hz1gJySWvUMezcxvNfXnoUqgbHJnAr0URckl8TWJE/8+xtt0n5WbV16RwxNq1L8Ylx+p i2Ig== X-Gm-Message-State: AOAM533XDuic/aZKhjCiBVp5StaTYOpJQebmMsfidGDh8aA41JAqKt0E fhw8CUWe1wR0jbqFVKWKBlqnJFUWP9w= X-Google-Smtp-Source: ABdhPJzGyOG73x58uJvXkg85TX6VvFbUa2j3rma0lOILQZi0nFwx9RJ1Mb/EOvtYQlaGMt1I9tgs4g== X-Received: by 2002:a17:902:7043:b0:14f:47:a455 with SMTP id h3-20020a170902704300b0014f0047a455mr17499809plt.44.1646747468415; Tue, 08 Mar 2022 05:51:08 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:08 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 04/14] powerpc/rtas: Call enter_rtas with MSR[EE] disabled Date: Tue, 8 Mar 2022 23:50:37 +1000 Message-Id: <20220308135047.478297-5-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Disable MSR[EE] in C code rather than asm. Signed-off-by: Nicholas Piggin Reviewed-by: Laurent Dufour --- arch/powerpc/kernel/rtas.c | 4 ++++ arch/powerpc/kernel/rtas_entry.S | 17 +---------------- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 733e6ef36758..6b5892d6a56b 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -49,6 +49,10 @@ void enter_rtas(unsigned long); static inline void do_enter_rtas(unsigned long args) { + BUG_ON(!irqs_disabled()); + + hard_irq_disable(); /* Ensure MSR[EE] is disabled on PPC64 */ + enter_rtas(args); srr_regs_clobbered(); /* rtas uses SRRs, invalidate */ diff --git a/arch/powerpc/kernel/rtas_entry.S b/arch/powerpc/kernel/rtas_entry.S index 6fa10eb49a9c..45fa661c2ff6 100644 --- a/arch/powerpc/kernel/rtas_entry.S +++ b/arch/powerpc/kernel/rtas_entry.S @@ -24,8 +24,6 @@ _GLOBAL(enter_rtas) lwz r4,RTASBASE(r4) mfmsr r9 stw r9,8(r1) - LOAD_REG_IMMEDIATE(r0,MSR_KERNEL) - mtmsr r0 /* disable interrupts so SRR0/1 don't get trashed */ li r9,MSR_KERNEL & ~(MSR_IR|MSR_DR) mtlr r6 stw r1, THREAD + RTAS_SP(r2) @@ -87,20 +85,7 @@ _GLOBAL(enter_rtas) li r0,0 mtcr r0 -#ifdef CONFIG_BUG - /* There is no way it is acceptable to get here with interrupts enabled, - * check it with the asm equivalent of WARN_ON - */ - lbz r0,PACAIRQSOFTMASK(r13) -1: tdeqi r0,IRQS_ENABLED - EMIT_WARN_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING -#endif - - /* Hard-disable interrupts */ mfmsr r6 - rldicl r7,r6,48,1 - rotldi r7,r7,16 - mtmsrd r7,1 /* Unfortunately, the stack pointer and the MSR are also clobbered, * so they are saved in the PACA which allows us to restore @@ -124,7 +109,7 @@ _GLOBAL(enter_rtas) andc r6,r0,r9 __enter_rtas: - sync /* disable interrupts so SRR0/1 */ + sync /* disable RI so SRR0/1 */ mtmsrd r0 /* don't get trashed */ LOAD_REG_ADDR(r4, rtas) From patchwork Tue Mar 8 13:50:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603025 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=SHo0MpOx; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcJ85SmFz9sGD for ; Wed, 9 Mar 2022 00:54:16 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcJ73vCvz3bXD for ; Wed, 9 Mar 2022 00:54:15 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=SHo0MpOx; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::434; helo=mail-pf1-x434.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=SHo0MpOx; dkim-atps=neutral Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDc0y4nz3bWR for ; Wed, 9 Mar 2022 00:51:11 +1100 (AEDT) Received: by mail-pf1-x434.google.com with SMTP id g19so5821654pfc.9 for ; Tue, 08 Mar 2022 05:51:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4V0De/WTAqEpFgdsq0WLjoZvavpXhiXKnbwqrPismR4=; b=SHo0MpOxk9mcVKqEf/ZIZulMmT8+yub6+TjOqZIeTKjIkJH7i+nU9jFtuOhZOurVxk /jc7CzjCN69uUUVcfGSKi3iJo7qXQrAOOL028qJvGuaLzp2Clc4OXLjYUkHQtM37nilC QmuG6VNqLX6m+2k6zQbC8zxiQdIZ3K1sai6/myqdZ49gDr/XfATDkW2QqBI0SWPmePuv 6hpT0B2OLpxhunLeyV2Nbz3YwcD0xnY8BRd8kxB4JscG93ubnBlpsDEHxtl9vL47i9RS eqZ4A4CakDMfhiJhDwLayYR60vd5+C5sXoEXVhkXPYO0oX2wUAPjLXlws09DoNdA+2Tn 7bnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4V0De/WTAqEpFgdsq0WLjoZvavpXhiXKnbwqrPismR4=; b=FinmmoQxYi3RVk6NreioR+923ckNwclw07PeGHuQcieL3r0AmTJ1AeUfrBUxJm1yyS pmo/5rppc1PFIGwKzP3VqErwuqTynbgDDNzslDkaeMBn0/JKnBI1gZMI9aSpOOIOMCWT U2ErhvF50lVKizrBfA6gfWACoT5Ei96QEr3DXs9LhGF6E+IKUJcCHBJGxL99CP37avyP Lmm4/GmCuJYTi0Bnz0k+yb1rOFXhdb9aNg6hJdtw4X8XZXgoucSjI49dNaJGP3/bSyeX e2AGkVSuhc2iXW/6IiNynz7hOs8QJC0iR6xP62G0Z8gT/jASGNuYuH9gXaJUevUszUN3 wKrQ== X-Gm-Message-State: AOAM532RIiwbUPY52UWpUIifySc58y15wnMj04/QAwXYl3mxKzs0xggh FKpElwxdAfkxugVRr80GE3EvfIxmYcE= X-Google-Smtp-Source: ABdhPJwwWzEXtM+jMbtkzZ00Qw12ObuMIg5g9as6bt97oTXlikReckl9u0YZqXW251GX+zmCvIfU4w== X-Received: by 2002:a63:814a:0:b0:380:e48:809f with SMTP id t71-20020a63814a000000b003800e48809fmr12324946pgd.217.1646747471001; Tue, 08 Mar 2022 05:51:11 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:10 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 05/14] powerpc/rtas: Modernise RI clearing on 64-bit Date: Tue, 8 Mar 2022 23:50:38 +1000 Message-Id: <20220308135047.478297-6-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" mtmsrd L=1 can clear MSR[RI] without the previous MSR value; it does not require sync; it can be moved later to before SRRs are live. Signed-off-by: Nicholas Piggin Reviewed-by: Laurent Dufour --- arch/powerpc/kernel/rtas_entry.S | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/kernel/rtas_entry.S b/arch/powerpc/kernel/rtas_entry.S index 45fa661c2ff6..7b93687b9a10 100644 --- a/arch/powerpc/kernel/rtas_entry.S +++ b/arch/powerpc/kernel/rtas_entry.S @@ -109,13 +109,13 @@ _GLOBAL(enter_rtas) andc r6,r0,r9 __enter_rtas: - sync /* disable RI so SRR0/1 */ - mtmsrd r0 /* don't get trashed */ - LOAD_REG_ADDR(r4, rtas) ld r5,RTASENTRY(r4) /* get the rtas->entry value */ ld r4,RTASBASE(r4) /* get the rtas->base value */ + li r0,0 + mtmsrd r0,1 /* disable RI before using SRR0/1 */ + mtspr SPRN_SRR0,r5 mtspr SPRN_SRR1,r6 RFI_TO_KERNEL From patchwork Tue Mar 8 13:50:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603026 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=ZSa+nnNe; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcJz6fZ7z9sGD for ; Wed, 9 Mar 2022 00:54:59 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcJy3y3Lz3c1m for ; Wed, 9 Mar 2022 00:54:58 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=ZSa+nnNe; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::529; helo=mail-pg1-x529.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=ZSa+nnNe; dkim-atps=neutral Received: from mail-pg1-x529.google.com (mail-pg1-x529.google.com [IPv6:2607:f8b0:4864:20::529]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDf3Pb1z3bY3 for ; Wed, 9 Mar 2022 00:51:14 +1100 (AEDT) Received: by mail-pg1-x529.google.com with SMTP id 6so11982766pgg.0 for ; Tue, 08 Mar 2022 05:51:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6BLfT+MJAdpHuDc2kVjGEp2T811PVvNDuubyKAAzwpY=; b=ZSa+nnNeEfn+EU6twOPutRePn2gvusYomGbncOX1o1VvU0qptAK+YfRsorQzY6+5vK 6IpwnLQV/tgcWQlIsq7B1Uvj8uZR7+vJvi89w7WaOW5iAKbSZjgPFUmIQdRe8bzhN2Iv eGNQGrh7EWv8Z37JdXZeHEHHU1yLFbAoc2R3My+owtyiDxhIQjSAQzeFUOdq5iuyzKfB MyMAgNg/N6KaAtZpvKR8aPz+tTuWct9Bg/D0xkK+LjRRguJssaMSeS5FpVe6rBRtC9CQ a528JkIEnbaME0zyZr7alxJ9bN4o+nkVIs3KUh9fmIQkHw55buczMagm8AM2Ntq92+Fm 0e+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6BLfT+MJAdpHuDc2kVjGEp2T811PVvNDuubyKAAzwpY=; b=wvB+IKkpmCpMbXSvEsGaDXKBcHwaB/hAKYcKnOn7Ixnp81/FXAksjZZtpKyzpQFGXj a0iFoxFN0QRTklB1m7WjKIxVh6kOALp+LTQyLxHFX5EbL0QwA5hPrsUxrJkTL2DDN54F mI1kgyunO3YxJZYDA8PBP/ZNlpd3zcZfuGPfRwgyT+fzFFGpke6EJshE087kWiMPR8a9 Xh09zC36CLtwDyMo45zHI3d6Clq2SiAFUMYaYif1KoYTHf6nfXse5LidpnzCCFokO2vi U4LhU3D3M3cocucnLOWt0ploIN1cGgxzy/46pW0o1FoVCSPNuHZIhtw5FEvCHoAUUE/+ OHDA== X-Gm-Message-State: AOAM5327v5LJ/Ueq7iZ8/jGFjUPxM2ARdTGhI1riq7xEVCuSIamh/fwf Ds2/f9acbhxcYbsE9/Lyiz8el5jWU8A= X-Google-Smtp-Source: ABdhPJz2F6oxSjellcPlopmwRWO79r7cQG+PsYc8HnJVnxZ/+8BMC398LtwAkra9syaWLtBtKhMMYA== X-Received: by 2002:a05:6a02:106:b0:36c:96dd:8c17 with SMTP id bg6-20020a056a02010600b0036c96dd8c17mr14509405pgb.190.1646747473377; Tue, 08 Mar 2022 05:51:13 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:13 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 06/14] powerpc/rtas: Load rtas entry MSR explicitly Date: Tue, 8 Mar 2022 23:50:39 +1000 Message-Id: <20220308135047.478297-7-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Rather than adjust the current MSR value to find the rtas entry MSR on 64-bit, load the explicit value we want as 32-bit does. This prevents some facilities (e.g., VEC and VSX) from being left enabled which doesn't seem to cause a problem but it's more consistent to always use the same MSR and minimise facilities enabled. Signed-off-by: Nicholas Piggin Reviewed-by: Laurent Dufour --- arch/powerpc/kernel/rtas_entry.S | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/arch/powerpc/kernel/rtas_entry.S b/arch/powerpc/kernel/rtas_entry.S index 7b93687b9a10..08eb731f08b8 100644 --- a/arch/powerpc/kernel/rtas_entry.S +++ b/arch/powerpc/kernel/rtas_entry.S @@ -99,14 +99,7 @@ _GLOBAL(enter_rtas) clrldi r4,r4,2 /* convert to realmode address */ mtlr r4 - li r0,0 - ori r0,r0,MSR_EE|MSR_SE|MSR_BE|MSR_RI - andc r0,r6,r0 - - li r9,1 - rldicr r9,r9,MSR_SF_LG,(63-MSR_SF_LG) - ori r9,r9,MSR_IR|MSR_DR|MSR_FE0|MSR_FE1|MSR_FP|MSR_RI|MSR_LE - andc r6,r0,r9 + LOAD_REG_IMMEDIATE(r6, MSR_ME) __enter_rtas: LOAD_REG_ADDR(r4, rtas) From patchwork Tue Mar 8 13:50:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603027 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=TYGt6uGA; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcKf2F3Wz9sGD for ; Wed, 9 Mar 2022 00:55:34 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcKd0gfXz3dPW for ; Wed, 9 Mar 2022 00:55:33 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=TYGt6uGA; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::633; helo=mail-pl1-x633.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=TYGt6uGA; dkim-atps=neutral Received: from mail-pl1-x633.google.com (mail-pl1-x633.google.com [IPv6:2607:f8b0:4864:20::633]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDh6b7Qz3bZ4 for ; Wed, 9 Mar 2022 00:51:16 +1100 (AEDT) Received: by mail-pl1-x633.google.com with SMTP id m2so11137769pll.0 for ; Tue, 08 Mar 2022 05:51:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ljWZe2w7POV0ze5qOCGOcAy2jUpe6eI1F2Hya2kReco=; b=TYGt6uGA+Waad/PY671qU24h1xFxTfWcfOSI5foiycAP0PUUi/H9RPskQ6UGr9edOK dohNu/ShNFBJb8g+daK/mTlgwz+r/bqeGXHFXykGxWWvVTN0RKH1wwoRjBDH9OE8apDj 4iNsKBRn1EBdRUDT5dPWTMUkw+BPfCJ+D4zI3S7cJpt/swHF2kbZRdrbP7UNV4jBnliU YeKZnN/6HDHDQCqyfY0ViyONyhYSDGwyt+mU7PMJNraGh+FKvj0CX1FGomRuyB6vIOI5 TMRhKKdj2Zasu0+5a0S7nSQ71nCTfkrkfswc+hfYPiLZlMNaUcJa+/iKq0FyYlXbx21J FHOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ljWZe2w7POV0ze5qOCGOcAy2jUpe6eI1F2Hya2kReco=; b=XcKHLEElEodMN0sv7p/uhXqKUXw3XxiYOqeLz22tOq6V5QPqqLYbuDln2inkFzV75i lRM/oCjTcL/AkBqLD5XDOpEUqpdGOj3nbQ+Ky4ZezKzc1LlQW4sfjO/vsFNbrlEqpddd wK+12Y8GAsS7mktecVrZ+b4ovAC68s/gK0QY6xcsJMkvSb7eEh/2QDybu6FJ206QkIVy Qg64sFpFVTYUFHXJZPgYSzrzb3dQFa255PawYpYV8suk+hdUq0L7rUGCQ+Rt+vUS7WSn xDr2Ldu0aEHoVCT0FfckyYejPopdshwMWKGYDt5WhAbhki388r0wK1WmaRblhR5JVHih 8v/w== X-Gm-Message-State: AOAM532rhfqXclLsBBnaF2eDExGolTYOmLWecrfF1n4wrnmDnWNBpdmj ZteAipPz5aZONNCqjX0op0ZXHAQwi3w= X-Google-Smtp-Source: ABdhPJxrvvOTgzqSyWCJ9trIspc1PBD0keAfOCcdoJXqEk4M8aM+o6wqaIRsUPYLWkc5+vuVABbsFA== X-Received: by 2002:a17:90a:69e6:b0:1be:f28f:3bb6 with SMTP id s93-20020a17090a69e600b001bef28f3bb6mr4873425pjj.44.1646747475804; Tue, 08 Mar 2022 05:51:15 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:15 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 07/14] powerpc/rtas: PACA can be restored directly from SPRG Date: Tue, 8 Mar 2022 23:50:40 +1000 Message-Id: <20220308135047.478297-8-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" On 64-bit, PACA is saved in a SPRG so it does not need to be saved on stack. We also don't need to mask off the top bits for real mode addresses because the architecture does this for us. Signed-off-by: Nicholas Piggin Reviewed-by: Laurent Dufour --- arch/powerpc/kernel/rtas_entry.S | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/arch/powerpc/kernel/rtas_entry.S b/arch/powerpc/kernel/rtas_entry.S index 08eb731f08b8..5f65ea4436c6 100644 --- a/arch/powerpc/kernel/rtas_entry.S +++ b/arch/powerpc/kernel/rtas_entry.S @@ -62,10 +62,9 @@ _GLOBAL(enter_rtas) /* Because RTAS is running in 32b mode, it clobbers the high order half * of all registers that it saves. We therefore save those registers - * RTAS might touch to the stack. (r0, r3-r13 are caller saved) + * RTAS might touch to the stack. (r0, r3-r12 are caller saved) */ SAVE_GPR(2, r1) /* Save the TOC */ - SAVE_GPR(13, r1) /* Save paca */ SAVE_NVGPRS(r1) /* Save the non-volatiles */ mfcr r4 @@ -129,15 +128,14 @@ rtas_return_loc: mtmsrd r6 /* relocation is off at this point */ - GET_PACA(r4) - clrldi r4,r4,2 /* convert to realmode address */ + GET_PACA(r13) bcl 20,31,$+4 0: mflr r3 ld r3,(1f-0b)(r3) /* get &rtas_restore_regs */ - ld r1,PACAR1(r4) /* Restore our SP */ - ld r4,PACASAVEDMSR(r4) /* Restore our MSR */ + ld r1,PACAR1(r13) /* Restore our SP */ + ld r4,PACASAVEDMSR(r13) /* Restore our MSR */ mtspr SPRN_SRR0,r3 mtspr SPRN_SRR1,r4 @@ -153,11 +151,8 @@ _ASM_NOKPROBE_SYMBOL(rtas_return_loc) rtas_restore_regs: /* relocation is on at this point */ REST_GPR(2, r1) /* Restore the TOC */ - REST_GPR(13, r1) /* Restore paca */ REST_NVGPRS(r1) /* Restore the non-volatiles */ - GET_PACA(r13) - ld r4,_CCR(r1) mtcr r4 ld r5,_CTR(r1) From patchwork Tue Mar 8 13:50:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603028 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=Yt7bWTBo; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcLL1jSHz9sGD for ; Wed, 9 Mar 2022 00:56:10 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcLJ6330z3c4t for ; Wed, 9 Mar 2022 00:56:08 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=Yt7bWTBo; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::533; helo=mail-pg1-x533.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=Yt7bWTBo; dkim-atps=neutral Received: from mail-pg1-x533.google.com (mail-pg1-x533.google.com [IPv6:2607:f8b0:4864:20::533]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDl2WFkz3bWM for ; Wed, 9 Mar 2022 00:51:19 +1100 (AEDT) Received: by mail-pg1-x533.google.com with SMTP id 6so11982916pgg.0 for ; Tue, 08 Mar 2022 05:51:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9vdhwE5ReYGk+xo+hgvdjuNdqvXaPmgr1QGaAI03t+A=; b=Yt7bWTBoqs9ygmZlPBQ4XDhLFQCZez2QErCsZ07Eh86C7zRJzQ9d2ImKvYFlupBjC9 sOjq6O+HOVjzMnoiX08SVg6r6twRGaGXwS8pncEOsC3mQC6PgHI6wxHDZxWMwNjojzZ0 JN2HKyS4p9NJF5WPy3xHkEbR/IiFK2UVMwba7OZskZiDvQPO/lkKJ0RV4/r0yClHdHNw eLve35R/RhbZJeNrbyrLDGsSlCwNDqXRmFgBD/Rt77XxTPSF0znSrl4VrceahCmbumLq Sg++xelUFQwgoDsG8SSy7LCZQth/m4IDrER8hxyeNbebhbQTnveq/vrTcluH7EPtEm1k tW5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9vdhwE5ReYGk+xo+hgvdjuNdqvXaPmgr1QGaAI03t+A=; b=NcsenyfqX4heMKSZCSo/x6Uy1mGd8wnr2q9/8GpzzzopxK3Nlv9unvAPjmFAyBKZmI PEeLQKTFXaX12RPdKr324p/wCB+seBYqMRUA5ap6DU5a0Jpn0PFZ3c8WFfpSMG8T+ZpQ xyLCPmM9QJVbonQjev9R0TEhJ1vigAbSVA3c0m7CSBk6RFs94jhVcFfJkl6/N/byMud1 PKoifes92kR5F1xq6lL+WRFwN0tF1lPScptMhaU1TyOOPLllsVMPqr9x7nCgyC+iWZJR +u+bFJf1xTLRQoL2BBT7erzpv6t2Qh2TczXjdapBY1fU2fdN54DErm0MKPLBHFTjSa6f ijog== X-Gm-Message-State: AOAM531CJF+CN2u0kfA3y4Dnu2wfQ62MQgClSsooyjCVQ7y2Zo7fUJi1 THi2wQfMUC1rro0qs3voWTCjo4Vwq9E= X-Google-Smtp-Source: ABdhPJweU6+Df+hJnfmmjibKEBEBQVFHA4f9rC64Ww6wSeyOAZrNH9I6VeeUl0m9pcCF4Hc02+MlWA== X-Received: by 2002:a05:6a00:190f:b0:4f3:a81d:c4c3 with SMTP id y15-20020a056a00190f00b004f3a81dc4c3mr18345786pfi.45.1646747478178; Tue, 08 Mar 2022 05:51:18 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:17 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 08/14] powerpc/rtas: call enter_rtas in real-mode on 64-bit Date: Tue, 8 Mar 2022 23:50:41 +1000 Message-Id: <20220308135047.478297-9-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" This moves MSR save/restore and some real-mode juggling out of asm and into C code, simplifying things. Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/rtas.c | 15 ++++++++++++--- arch/powerpc/kernel/rtas_entry.S | 32 +++++--------------------------- 2 files changed, 17 insertions(+), 30 deletions(-) diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 6b5892d6a56b..87ede1877816 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -47,13 +47,22 @@ /* This is here deliberately so it's only used in this file */ void enter_rtas(unsigned long); -static inline void do_enter_rtas(unsigned long args) +static noinline void do_enter_rtas(unsigned long args) { BUG_ON(!irqs_disabled()); - hard_irq_disable(); /* Ensure MSR[EE] is disabled on PPC64 */ + if (IS_ENABLED(CONFIG_PPC64)) { + unsigned long msr; - enter_rtas(args); + hard_irq_disable(); + + msr = mfmsr(); + mtmsr(msr & ~(MSR_IR|MSR_DR)); + enter_rtas(args); + mtmsr(msr); + } else { + enter_rtas(args); + } srr_regs_clobbered(); /* rtas uses SRRs, invalidate */ } diff --git a/arch/powerpc/kernel/rtas_entry.S b/arch/powerpc/kernel/rtas_entry.S index 5f65ea4436c6..292551684bbd 100644 --- a/arch/powerpc/kernel/rtas_entry.S +++ b/arch/powerpc/kernel/rtas_entry.S @@ -84,14 +84,11 @@ _GLOBAL(enter_rtas) li r0,0 mtcr r0 - mfmsr r6 - - /* Unfortunately, the stack pointer and the MSR are also clobbered, - * so they are saved in the PACA which allows us to restore - * our original state after RTAS returns. + /* + * The stack pointer is clobbered, so it is saved in the PACA which + * allows us to restore our original state after RTAS returns. */ std r1,PACAR1(r13) - std r6,PACASAVEDMSR(r13) /* Setup our real return addr */ LOAD_REG_ADDR(r4,rtas_return_loc) @@ -100,7 +97,6 @@ _GLOBAL(enter_rtas) LOAD_REG_IMMEDIATE(r6, MSR_ME) -__enter_rtas: LOAD_REG_ADDR(r4, rtas) ld r5,RTASENTRY(r4) /* get the rtas->entry value */ ld r4,RTASBASE(r4) /* get the rtas->base value */ @@ -112,6 +108,7 @@ __enter_rtas: mtspr SPRN_SRR1,r6 RFI_TO_KERNEL b . /* prevent speculative execution */ +_ASM_NOKPROBE_SYMBOL(enter_rtas) rtas_return_loc: FIXUP_ENDIAN @@ -127,29 +124,10 @@ rtas_return_loc: sync mtmsrd r6 - /* relocation is off at this point */ GET_PACA(r13) - bcl 20,31,$+4 -0: mflr r3 - ld r3,(1f-0b)(r3) /* get &rtas_restore_regs */ - ld r1,PACAR1(r13) /* Restore our SP */ - ld r4,PACASAVEDMSR(r13) /* Restore our MSR */ - mtspr SPRN_SRR0,r3 - mtspr SPRN_SRR1,r4 - RFI_TO_KERNEL - b . /* prevent speculative execution */ -_ASM_NOKPROBE_SYMBOL(enter_rtas) -_ASM_NOKPROBE_SYMBOL(__enter_rtas) -_ASM_NOKPROBE_SYMBOL(rtas_return_loc) - - .align 3 -1: .8byte rtas_restore_regs - -rtas_restore_regs: - /* relocation is on at this point */ REST_GPR(2, r1) /* Restore the TOC */ REST_NVGPRS(r1) /* Restore the non-volatiles */ @@ -169,5 +147,5 @@ rtas_restore_regs: mtlr r0 blr /* return to caller */ - +_ASM_NOKPROBE_SYMBOL(rtas_return_loc) #endif /* CONFIG_PPC32 */ From patchwork Tue Mar 8 13:50:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603029 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=HECTdVXb; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcM24Zmjz9sGD for ; Wed, 9 Mar 2022 00:56:46 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcM134Bvz3cXX for ; Wed, 9 Mar 2022 00:56:45 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=HECTdVXb; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::536; helo=mail-pg1-x536.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=HECTdVXb; dkim-atps=neutral Received: from mail-pg1-x536.google.com (mail-pg1-x536.google.com [IPv6:2607:f8b0:4864:20::536]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDn6LwLz3bYF for ; Wed, 9 Mar 2022 00:51:21 +1100 (AEDT) Received: by mail-pg1-x536.google.com with SMTP id e6so16517160pgn.2 for ; Tue, 08 Mar 2022 05:51:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qXb9IHo1asDPkqZNu9p0vzq4rW+WxWDBHIR59qtpnt4=; b=HECTdVXbPOWnf63k3n+gPMBXwRZVQXCRz3g/tkWRfibzLq1gNqjrMXtdY5gQuuJi4T Ug44erU2RZLC9MHamMTDNZngozmlNiyd/W2cVJ1ZzpgcZghlt14R6uNUgL8V2XfajT+f ihrWLXiInsUz4NyZE5Be3f/SEwxNzSdQFgmBtDn+JTHp//CDdpy32r2x8Yjhv1Bn/Vdo U0DxSqauP3a1wSpjXgKsd8KYvP+Bt7Dnz8m2va/+RmL1CVzLdi9YkytL4vOq6uBRyqgg v6BnW5hc0Aa7GMojdQZ/FmA1le1VysT4XiGtMb7fTP/vfA+YJOEoZrIBkIfHiL1G1Usn DO2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qXb9IHo1asDPkqZNu9p0vzq4rW+WxWDBHIR59qtpnt4=; b=Ilv5PCai9Qu8dNP0l+LUMg+dV2N/gcKqfhu1tiwLN+kXzeZq7m2cgHsEPduPShdb5P n01p/ZdXG6M9np3dEIgL91B2JyNlg8HRI3z85TYI3LhwMT9XNrnBJX14RjaCcIp25ySz nWOUD5A3wIL0AFOBCSWa/kLOEvn7hyLATw0t50B7okfWr2TyYY+EyYfCFnypKIJopIRp R+wQYr6tAE1F3MFDUHFL0dmpn0/q/J0zicuU7RZbNS6IXUsx8cQzaz7ecCUG6Egdy67a IpGS/TCzyxogaYHI+uWI5pLNljUz/v2YDtaaJQY2xgtMbqVL26xrSlfP8hCBuawfIycJ AFaQ== X-Gm-Message-State: AOAM531rvKoHCciMpSQkxK55wIWcKxzxT2SsDvNVddRcNvu8iyPm7RzF 03JBtSZkmq0EGeWguLwowhsS61ucDds= X-Google-Smtp-Source: ABdhPJwzcN8JMSJKvAzmKZHLxlLAgzUa2b/X2laCmsd4b7sDQLhzb8kLiFVFF0JmCL39nuBfpf4reA== X-Received: by 2002:a05:6a00:14d6:b0:4f6:f496:c1e2 with SMTP id w22-20020a056a0014d600b004f6f496c1e2mr11939895pfu.45.1646747480722; Tue, 08 Mar 2022 05:51:20 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:20 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 09/14] powerpc/rtas: Leave MSR[RI] enabled over RTAS call Date: Tue, 8 Mar 2022 23:50:42 +1000 Message-Id: <20220308135047.478297-10-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" PAPR specifies that RTAS may be called with MSR[RI] enabled if the calling context is recoverable, and RTAS will manage RI as necessary. Call the rtas entry point with RI enabled, and add a check to ensure the caller has RI enabled. Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/rtas.c | 1 + arch/powerpc/kernel/rtas_entry.S | 13 +++---------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 87ede1877816..fece066115f0 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -57,6 +57,7 @@ static noinline void do_enter_rtas(unsigned long args) hard_irq_disable(); msr = mfmsr(); + BUG_ON(!(msr & MSR_RI)); mtmsr(msr & ~(MSR_IR|MSR_DR)); enter_rtas(args); mtmsr(msr); diff --git a/arch/powerpc/kernel/rtas_entry.S b/arch/powerpc/kernel/rtas_entry.S index 292551684bbd..72b27b14ccc9 100644 --- a/arch/powerpc/kernel/rtas_entry.S +++ b/arch/powerpc/kernel/rtas_entry.S @@ -95,7 +95,7 @@ _GLOBAL(enter_rtas) clrldi r4,r4,2 /* convert to realmode address */ mtlr r4 - LOAD_REG_IMMEDIATE(r6, MSR_ME) + LOAD_REG_IMMEDIATE(r6, MSR_ME|MSR_RI) LOAD_REG_ADDR(r4, rtas) ld r5,RTASENTRY(r4) /* get the rtas->entry value */ @@ -113,15 +113,8 @@ _ASM_NOKPROBE_SYMBOL(enter_rtas) rtas_return_loc: FIXUP_ENDIAN - /* - * Clear RI and set SF before anything. - */ - mfmsr r6 - li r0,MSR_RI - andc r6,r6,r0 - sldi r0,r0,(MSR_SF_LG - MSR_RI_LG) - or r6,r6,r0 - sync + /* Set SF before anything. */ + LOAD_REG_IMMEDIATE(r6, MSR_KERNEL & ~(MSR_IR|MSR_DR)) mtmsrd r6 GET_PACA(r13) From patchwork Tue Mar 8 13:50:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603030 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=GSOKGt8Q; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcMk3QXsz9sGF for ; Wed, 9 Mar 2022 00:57:22 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcMj2Llwz3dwq for ; Wed, 9 Mar 2022 00:57:21 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=GSOKGt8Q; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::1032; helo=mail-pj1-x1032.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=GSOKGt8Q; dkim-atps=neutral Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDr08tVz3bb0 for ; Wed, 9 Mar 2022 00:51:24 +1100 (AEDT) Received: by mail-pj1-x1032.google.com with SMTP id gj15-20020a17090b108f00b001bef86c67c1so2460410pjb.3 for ; Tue, 08 Mar 2022 05:51:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=W+MErG29vh1uQ6Gl0V9SFDE552YCbARluDrcjjEQKBs=; b=GSOKGt8QOD1KSMgS30IH5jObGM4OCLnv1ctWui6l3NQKRJ/85qOEYFqvjKXBCHyfif JwaAwRiuc3VoUA/eqrEzL3sNolnfUPqbMAiisn+W+KD90AwUI0scYZUCOY1J4rr9bwyU AL/uG6zM47pE5n7SCczh1D+08YRphEQ00kGc1jSV5pw660ETWjEGWe2sV1RJnHiPxbkA Hl75aY8lq292FF+Msou2Z9q4S4/Dsr3S6j3PgLBQryEpRof+fcAvc+QPTdacMhK6eIuk gnx6TiSGQuQyiSNECgVxkEToJuHcISXifc3orSZdDBqkceKPQipVZWGcKYvMz60jMJRg qJlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=W+MErG29vh1uQ6Gl0V9SFDE552YCbARluDrcjjEQKBs=; b=BnnzZo5Y+uLtw2FgGhvo8jVb7pfG+PbGMued7eSYV7AWsxbudoU9HKPJS8oWh6oyH4 +rgfOjt3b7Rez+kwDRe8ctPNAIovUvNId1lcqoVsHQ3Wvyrys1dAWM/rQ53CB+4wbpJt 3UkQs19KEFyeT6EI2VTzda8S2DtHp1bi12hl0SbW178piJrX61zh5WY1SLD9JhB43lfR 3KRSaawiV8Xsxrpp7coGicJpr1++D8oPZBK7/Y0tCxzP+pG+trX+og/+gpnloOXSla53 c8j05xTLISqFXgectgFIpCW6tWQ06YS7Z0pg8dubLDbNtLG/mMMx9AIzDP3SFjdMyWil beQA== X-Gm-Message-State: AOAM530Zdt03iEoFrydH0XpUmVODzIlzAj3lT1eTD/OnPJ+A4vrBoLNo FbJTvAl2Mz1Wdr0ADDMxx2QoxUrc884= X-Google-Smtp-Source: ABdhPJxs45VkyVmUcS5EGFX+1qlg5t4UzJiMQmHsyhWYsqZnlvjKgyGvDKoSdKNih2SE2InLpPOnFQ== X-Received: by 2002:a17:902:7296:b0:14b:4bc6:e81 with SMTP id d22-20020a170902729600b0014b4bc60e81mr17632443pll.132.1646747483279; Tue, 08 Mar 2022 05:51:23 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:23 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 10/14] powerpc/rtas: replace rtas_call_unlocked with raw_rtas_call Date: Tue, 8 Mar 2022 23:50:43 +1000 Message-Id: <20220308135047.478297-11-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Use the same calling and rets return convention with the raw rtas call rather than requiring callers to load and byteswap return values out of rtas_args. Signed-off-by: Nicholas Piggin Reviewed-by: Laurent Dufour --- arch/powerpc/include/asm/rtas.h | 4 +- arch/powerpc/kernel/rtas.c | 53 +++++++++++--------- arch/powerpc/platforms/pseries/hotplug-cpu.c | 2 +- arch/powerpc/platforms/pseries/ras.c | 7 +-- arch/powerpc/xmon/xmon.c | 2 +- 5 files changed, 33 insertions(+), 35 deletions(-) diff --git a/arch/powerpc/include/asm/rtas.h b/arch/powerpc/include/asm/rtas.h index 82e5b055fa2a..1014ff140cf8 100644 --- a/arch/powerpc/include/asm/rtas.h +++ b/arch/powerpc/include/asm/rtas.h @@ -241,8 +241,8 @@ extern int rtas_token(const char *service); extern int rtas_service_present(const char *service); extern int rtas_call(int token, int, int, int *, ...); int rtas_call_reentrant(int token, int nargs, int nret, int *outputs, ...); -void rtas_call_unlocked(struct rtas_args *args, int token, int nargs, - int nret, ...); +int raw_rtas_call(struct rtas_args *args, int token, + int nargs, int nret, int *outputs, ...); extern void __noreturn rtas_restart(char *cmd); extern void rtas_power_off(void); extern void __noreturn rtas_halt(void); diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index fece066115f0..751a20669669 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -123,7 +123,7 @@ static void call_rtas_display_status(unsigned char c) return; s = lock_rtas(); - rtas_call_unlocked(&rtas.args, 10, 1, 1, NULL, c); + raw_rtas_call(&rtas.args, 10, 1, 1, NULL, c); unlock_rtas(s); } @@ -434,10 +434,9 @@ static char *__fetch_rtas_last_error(char *altbuf) #define get_errorlog_buffer() NULL #endif - -static void -va_rtas_call_unlocked(struct rtas_args *args, int token, int nargs, int nret, - va_list list) +static int notrace va_raw_rtas_call(struct rtas_args *args, int token, + int nargs, int nret, int *outputs, + va_list list) { int i; @@ -453,21 +452,37 @@ va_rtas_call_unlocked(struct rtas_args *args, int token, int nargs, int nret, args->rets[i] = 0; do_enter_rtas(__pa(args)); + + if (nret > 1 && outputs != NULL) { + for (i = 0; i < nret-1; ++i) + outputs[i] = be32_to_cpu(args->rets[i+1]); + } + + return (nret > 0) ? be32_to_cpu(args->rets[0]) : 0; } -void rtas_call_unlocked(struct rtas_args *args, int token, int nargs, int nret, ...) +/* + * Like rtas_call but no kmalloc or printk etc in error handling, so + * error won't go through log_error. No tracing, may be called in real mode. + * rtas_args must be supplied, and appropriate synchronization for the rtas + * call being made has to be performed by the caller. + */ +int notrace raw_rtas_call(struct rtas_args *args, int token, + int nargs, int nret, int *outputs, ...) { va_list list; + int ret; - va_start(list, nret); - va_rtas_call_unlocked(args, token, nargs, nret, list); + va_start(list, outputs); + ret = va_raw_rtas_call(args, token, nargs, nret, outputs, list); va_end(list); + + return ret; } int rtas_call(int token, int nargs, int nret, int *outputs, ...) { va_list list; - int i; unsigned long s; struct rtas_args *rtas_args; char *buff_copy = NULL; @@ -482,19 +497,14 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...) rtas_args = &rtas.args; va_start(list, outputs); - va_rtas_call_unlocked(rtas_args, token, nargs, nret, list); + ret = va_raw_rtas_call(rtas_args, token, nargs, nret, outputs, list); va_end(list); /* A -1 return code indicates that the last command couldn't be completed due to a hardware error. */ - if (be32_to_cpu(rtas_args->rets[0]) == -1) + if (ret == -1) buff_copy = __fetch_rtas_last_error(NULL); - if (nret > 1 && outputs != NULL) - for (i = 0; i < nret-1; ++i) - outputs[i] = be32_to_cpu(rtas_args->rets[i+1]); - ret = (nret > 0)? be32_to_cpu(rtas_args->rets[0]): 0; - unlock_rtas(s); if (buff_copy) { @@ -950,7 +960,7 @@ int rtas_call_reentrant(int token, int nargs, int nret, int *outputs, ...) va_list list; struct rtas_args *args; unsigned long flags; - int i, ret = 0; + int ret; if (!rtas.entry || token == RTAS_UNKNOWN_SERVICE) return -1; @@ -962,16 +972,9 @@ int rtas_call_reentrant(int token, int nargs, int nret, int *outputs, ...) args = local_paca->rtas_args_reentrant; va_start(list, outputs); - va_rtas_call_unlocked(args, token, nargs, nret, list); + ret = va_raw_rtas_call(args, token, nargs, nret, outputs, list); va_end(list); - if (nret > 1 && outputs) - for (i = 0; i < nret - 1; ++i) - outputs[i] = be32_to_cpu(args->rets[i + 1]); - - if (nret > 0) - ret = be32_to_cpu(args->rets[0]); - local_irq_restore(flags); preempt_enable(); diff --git a/arch/powerpc/platforms/pseries/hotplug-cpu.c b/arch/powerpc/platforms/pseries/hotplug-cpu.c index b81fc846d99c..17c05650b6b9 100644 --- a/arch/powerpc/platforms/pseries/hotplug-cpu.c +++ b/arch/powerpc/platforms/pseries/hotplug-cpu.c @@ -53,7 +53,7 @@ static void rtas_stop_self(void) BUG_ON(rtas_stop_self_token == RTAS_UNKNOWN_SERVICE); - rtas_call_unlocked(&args, rtas_stop_self_token, 0, 1, NULL); + raw_rtas_call(&args, rtas_stop_self_token, 0, 1, NULL); panic("Alas, I survived.\n"); } diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c index 74c9b1b5bc66..b009ed7de1ee 100644 --- a/arch/powerpc/platforms/pseries/ras.c +++ b/arch/powerpc/platforms/pseries/ras.c @@ -465,12 +465,7 @@ static void fwnmi_release_errinfo(void) struct rtas_args rtas_args; int ret; - /* - * On pseries, the machine check stack is limited to under 4GB, so - * args can be on-stack. - */ - rtas_call_unlocked(&rtas_args, ibm_nmi_interlock_token, 0, 1, NULL); - ret = be32_to_cpu(rtas_args.rets[0]); + ret = raw_rtas_call(&rtas_args, ibm_nmi_interlock_token, 0, 1, NULL); if (ret != 0) printk(KERN_ERR "FWNMI: nmi-interlock failed: %d\n", ret); } diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c index fd72753e8ad5..6f53e8bccc33 100644 --- a/arch/powerpc/xmon/xmon.c +++ b/arch/powerpc/xmon/xmon.c @@ -410,7 +410,7 @@ static inline void disable_surveillance(void) if (set_indicator_token == RTAS_UNKNOWN_SERVICE) return; - rtas_call_unlocked(&args, set_indicator_token, 3, 1, NULL, + raw_rtas_call(&args, set_indicator_token, 3, 1, NULL, SURVEILLANCE_TOKEN, 0, 0); #endif /* CONFIG_PPC_PSERIES */ From patchwork Tue Mar 8 13:50:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603032 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=f3DWUJwy; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcNZ032kz9sGF for ; Wed, 9 Mar 2022 00:58:05 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcNX5Wtsz3bbn for ; Wed, 9 Mar 2022 00:58:04 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=f3DWUJwy; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::102f; helo=mail-pj1-x102f.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=f3DWUJwy; dkim-atps=neutral Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDt6rtmz3bbw for ; Wed, 9 Mar 2022 00:51:26 +1100 (AEDT) Received: by mail-pj1-x102f.google.com with SMTP id v1-20020a17090a088100b001bf25f97c6eso2193625pjc.0 for ; Tue, 08 Mar 2022 05:51:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BcrkBj9FNDVs+7CR17x1OE2BCfplgUQCJzSr/kw+/L4=; b=f3DWUJwynLgpl4A1vL+XQeiwcITB4nP2tc1e7NO1Y/lVfkd6YhiICiA1PWHs/g34oj aj0NvjiCl57bcQj8Lf+P5Ke/QVQgc2jXxedDr5Ps3jYJ1GuwwPdYUPT/2PCpMTQwPkBe r1RdHEaZAcejSfQcy7C/fQnmrvvSK4PYzKjCTJJO+tJtRjRm4p3SD0ZrRW/Pju2GIKB0 z/iGGn2gimpqej3LnvE+1itfY4p0XhQ4fnC5WVL6ws3hCIE3nRJhvcHDULwvl2qy6r30 P0E1bSNA+6s3zZETrs6uM0bY8pTn1pCWO8J24PXNfFn/3AYE2Qdgau0Owho8AJBY0s8Z /PyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BcrkBj9FNDVs+7CR17x1OE2BCfplgUQCJzSr/kw+/L4=; b=3TSbktty6zAbmby8J1TPP3rLGyeAr48FWYPh/mqFTeiDZ3pIBgSGeyclzxgG9tm317 q+goclnGJDfFUvd8y5fBrvn6ieEQnv8m7KvJVjb0r17o+ksMTC+S2LjHCwTKc5CBgbRi lnuxAFF/f3R+671LHKYsfo29ix9wo82uP3lOjcNOYbiHOREh/iViE6c7TbLA1HX74Fi8 QbE4emsI+HAQhZSd/9kD5BVvz5mW1tHFPL4pO3AMU+7EAcSO6uHC6ZJ5YDWaOweLcaVj q4ilqCqkgOhW/+H0DX16GuLzMJURorUueb19tYZTi6ONwf0MdVCIWIVF68635RwYfTNx 4ZCA== X-Gm-Message-State: AOAM531XTnnzERPcU+VhVlRlNlv3mHwchLeU02ipdwZvIubwb9MfYOwg Q8AmJMiEEUnQw3sJWSl1dsF1xT6g8W8= X-Google-Smtp-Source: ABdhPJynZJv74YrxIbCtogtI/uU1j1gx19/WkBOGYARrS3jGIzGDHY2Uml2omoiarKEADxBI02asrw== X-Received: by 2002:a17:902:9a46:b0:14e:ea0f:28cf with SMTP id x6-20020a1709029a4600b0014eea0f28cfmr17638363plv.43.1646747485720; Tue, 08 Mar 2022 05:51:25 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:25 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 11/14] powerpc/rtas: tidy __fetch_rtas_last_error Date: Tue, 8 Mar 2022 23:50:44 +1000 Message-Id: <20220308135047.478297-12-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" __fetch_rtas_last_error can use the same rtas_args as the caller used for the failed rtas call. It can also use a higher-level helper to assemble the rtas_args. Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/rtas.c | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 751a20669669..e047793cbb80 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -385,34 +385,22 @@ static int rtas_last_error_token; * this routine must be called atomically with whatever produced * the error (i.e. with rtas.lock still held from the previous call). */ -static char *__fetch_rtas_last_error(char *altbuf) +static char *__fetch_rtas_last_error(struct rtas_args *args, char *altbuf) { - struct rtas_args err_args, save_args; u32 bufsz; char *buf = NULL; + int ret; if (rtas_last_error_token == -1) return NULL; bufsz = rtas_get_error_log_max(); - err_args.token = cpu_to_be32(rtas_last_error_token); - err_args.nargs = cpu_to_be32(2); - err_args.nret = cpu_to_be32(1); - err_args.args[0] = cpu_to_be32(__pa(rtas_err_buf)); - err_args.args[1] = cpu_to_be32(bufsz); - err_args.args[2] = 0; - - save_args = rtas.args; - rtas.args = err_args; - - do_enter_rtas(__pa(&rtas.args)); - - err_args = rtas.args; - rtas.args = save_args; + ret = raw_rtas_call(args, rtas_last_error_token, 2, 1, NULL, + __pa(rtas_err_buf), bufsz); /* Log the error in the unlikely case that there was one. */ - if (unlikely(err_args.args[2] == 0)) { + if (unlikely(ret == 0)) { if (altbuf) { buf = altbuf; } else { @@ -430,8 +418,8 @@ static char *__fetch_rtas_last_error(char *altbuf) #define get_errorlog_buffer() kmalloc(RTAS_ERROR_LOG_MAX, GFP_KERNEL) #else /* CONFIG_RTAS_ERROR_LOGGING */ -#define __fetch_rtas_last_error(x) NULL -#define get_errorlog_buffer() NULL +#define __fetch_rtas_last_error(args, x) NULL +#define get_errorlog_buffer() NULL #endif static int notrace va_raw_rtas_call(struct rtas_args *args, int token, @@ -503,7 +491,7 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...) /* A -1 return code indicates that the last command couldn't be completed due to a hardware error. */ if (ret == -1) - buff_copy = __fetch_rtas_last_error(NULL); + buff_copy = __fetch_rtas_last_error(rtas_args, NULL); unlock_rtas(s); @@ -1247,7 +1235,7 @@ SYSCALL_DEFINE1(rtas, struct rtas_args __user *, uargs) /* A -1 return code indicates that the last command couldn't be completed due to a hardware error. */ if (be32_to_cpu(args.rets[0]) == -1) - errbuf = __fetch_rtas_last_error(buff_copy); + errbuf = __fetch_rtas_last_error(&rtas.args, buff_copy); unlock_rtas(flags); From patchwork Tue Mar 8 13:50:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603033 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=hx0IOrvJ; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcPG1rMdz9sGF for ; Wed, 9 Mar 2022 00:58:42 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcPD6tdJz3bVK for ; Wed, 9 Mar 2022 00:58:40 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=hx0IOrvJ; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::62f; helo=mail-pl1-x62f.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=hx0IOrvJ; dkim-atps=neutral Received: from mail-pl1-x62f.google.com (mail-pl1-x62f.google.com [IPv6:2607:f8b0:4864:20::62f]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDx2QYsz3bcl for ; Wed, 9 Mar 2022 00:51:29 +1100 (AEDT) Received: by mail-pl1-x62f.google.com with SMTP id n2so7601634plf.4 for ; Tue, 08 Mar 2022 05:51:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=PjswgDAjqtAsUXuv5xBgYvzCGg1cN6o7wtYucTF3CAU=; b=hx0IOrvJ0C7gZv9HUWxRBYOTfQ2kprBu0AqO8PSfEATt3X/5byXO/fkttEqynFFYsd 60D/+Gq0Es6AWg2ga88gTFneqEGgSWApwTDXResuODI404s3StK7x5u3xd+sLMTMmrS9 rQ4uaLyoemPptd4lvOMzRk92LbCSML28xKLJlCFzuqBcVb6WhOjy8558okWksGjvgYh2 3aBSj/2Ewx1euzDs6W4NMpsoeLbmSS3SpUJGCPhfDTCJrDNCsJ48GsZvJng+K7EsRb90 NN0zGLBxIvaqWo7c5UhNHQU2L87+NqfqynT6ic3ZHjOkAfwIWY5QEbyMLYlGkOmjdU9+ 5dZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=PjswgDAjqtAsUXuv5xBgYvzCGg1cN6o7wtYucTF3CAU=; b=I6Y5K8Cig20pkDk3U5DmX6QzXSICz0Qjzkn1aZ5O/T6KDjY1RHuD6yfp9mRi9MpNZr PajjQhgrBlbHSZARR2mNWgMI9XfYSHdUh3MMS7Hqd5zoO7gdWUT+xNlV8Eg9xyAJ7WtG tuoXTvqhTewyJE/EC+jbVHP16vUQ+htvWOV7WkgRrqXm847gUcDerSF9hNIwYQvI83mp YpHBAPMjRDafxHz5o+yScdqSIdCxkhDEXhvjrhFoGt7vnPnSwMFBifzEfffZ+w7Qi2R5 fyWhuLfV9+D3aa7P2jDK/AjP1rt9+EKf6gHgq5Zqp8r50ftLIsNsRrV5plmteiyqBQVd OCGw== X-Gm-Message-State: AOAM532rM2YI4uHom2JXnC1Dym0evbrnBs24nX6pM1CZ3zUl+0KAJKMX bYgYHf3vXR1cpKOFfLRFihQf9ezZSxk= X-Google-Smtp-Source: ABdhPJzLIIVm2zfUCMW4Y2886x1xqCQ/HHRDs8LGvQ3Bmiw2Bkx058Hcgmed6p5eYm7ngYZUi1+cnA== X-Received: by 2002:a17:902:e54c:b0:151:e2f3:9ee7 with SMTP id n12-20020a170902e54c00b00151e2f39ee7mr12019295plf.61.1646747488192; Tue, 08 Mar 2022 05:51:28 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:27 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 12/14] powerpc/rtas: Close theoretical memory leak Date: Tue, 8 Mar 2022 23:50:45 +1000 Message-Id: <20220308135047.478297-13-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" If buff_copy allocation failed then there was an error and the errbuf allocation succeeded, it will not be logged or freed. Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/rtas.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index e047793cbb80..1fc22138e3ab 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -1239,9 +1239,10 @@ SYSCALL_DEFINE1(rtas, struct rtas_args __user *, uargs) unlock_rtas(flags); - if (buff_copy) { - if (errbuf) - log_error(errbuf, ERR_TYPE_RTAS_LOG, 0); + if (errbuf) { + log_error(errbuf, ERR_TYPE_RTAS_LOG, 0); + kfree(errbuf); + } else if (buff_copy) { kfree(buff_copy); } From patchwork Tue Mar 8 13:50:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603034 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=XHFPMSNj; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcPy6ltKz9sGF for ; Wed, 9 Mar 2022 00:59:18 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcPx5BSDz3bTS for ; Wed, 9 Mar 2022 00:59:17 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=XHFPMSNj; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::536; helo=mail-pg1-x536.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=XHFPMSNj; dkim-atps=neutral Received: from mail-pg1-x536.google.com (mail-pg1-x536.google.com [IPv6:2607:f8b0:4864:20::536]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcDz23SCz3bcV for ; Wed, 9 Mar 2022 00:51:31 +1100 (AEDT) Received: by mail-pg1-x536.google.com with SMTP id w37so16526333pga.7 for ; Tue, 08 Mar 2022 05:51:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XMpjG/Zg568qe80KQMcu1cKJaU0aNO3Zr9xyl0y3Vjg=; b=XHFPMSNjxpYN6FEu+nyC/uVx7HMfcMbHtiFbOIgHn6Lt2G6Oo1boeKNCdutqQ3oHKV 5OAo4RVpZnwmd+MP0ZBVRxtDMG3uvvNantPU0twGoxEmBAX2piCTOFMozwMOuOc4tdh5 iIDoYBeaKkT5uACk16c2qSshsfSzoOI1u33AHGHtqiOTVLTr/ZB6dS4V95Vl8yGQ73v0 sgkK8A5KSuHBLji7/SqaIW2Hj/CaXsxIVm1dRpibd7u235iiLMg6kMrmFvggFrrPp9Td +wD8olNp6pJ4RirrUYsFKvmkftX8QaNH956lWyZApqernm8eyHHruZOrHdE2hm1UK1hR CSRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XMpjG/Zg568qe80KQMcu1cKJaU0aNO3Zr9xyl0y3Vjg=; b=QrFDNS/lZY1FIhfV0V49POrGu78/HJheZYbC2oxWfqz2LlbRFxyeGHWhack5gKKQ1h 4jdYQhQ4ZHL8+9UeddDMyTVTXp2wQD3BR5N0hE9Ktci7oVjym9dftOEFGwv9OSRx+RpN aN65u/AkQZz7QdfV8wG/HeFvHtr6uxPzJdKXJtYQl5n8WAas3Wlv6d66kilbDKw4Y4rO /btnpFdK9mpPU2xxs/fbsLfSsOmv/7gICuvAAUt8LsLSDaqQloaU0cTOZ5JyWMQZAgtd lMV8kt0dEvaviqUzGBI3ILqBaakB6WaCIAf/nNo+j58wAhGBNc0MPEi4OtNIwMxyB4I/ z6yg== X-Gm-Message-State: AOAM532GoQ3Ux6qUX/oOGhhedEoLZ4+qavJd4e7D+wjcJGBoBZ0zbxBI jElUmlv4VOuZ3cSawBaJGM1U0t6MzYI= X-Google-Smtp-Source: ABdhPJwn2ILd8Pf4hm+Cp3FhEhggdjXqWEOHDzts7Eb0/Ce8o08AEmhmMD6tskWWQ7YUNsmDYyBQ2g== X-Received: by 2002:a05:6a00:2815:b0:4f6:ecc6:1173 with SMTP id bl21-20020a056a00281500b004f6ecc61173mr13955211pfb.74.1646747490659; Tue, 08 Mar 2022 05:51:30 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:30 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 13/14] powerpc/rtas: enture rtas_call is called with MMU enabled Date: Tue, 8 Mar 2022 23:50:46 +1000 Message-Id: <20220308135047.478297-14-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" rtas_call must not be called with the MMU disabled because in case of rtas error, log_error is called which requires MMU enabled. Add a test and warning for this. Signed-off-by: Nicholas Piggin Reviewed-by: Laurent Dufour --- arch/powerpc/kernel/rtas.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index 1fc22138e3ab..adf4892aeecd 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -479,6 +479,11 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...) if (!rtas.entry || token == RTAS_UNKNOWN_SERVICE) return -1; + if ((mfmsr() & (MSR_IR|MSR_DR)) != (MSR_IR|MSR_DR)) { + WARN_ON_ONCE(1); + return -1; + } + s = lock_rtas(); /* We use the global rtas args buffer */ From patchwork Tue Mar 8 13:50:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 1603036 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=T/69Wjn6; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KCcQn3v7Kz9sGF for ; Wed, 9 Mar 2022 01:00:01 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4KCcQm2XQgz3dNj for ; Wed, 9 Mar 2022 01:00:00 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=T/69Wjn6; dkim-atps=neutral X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::52a; helo=mail-pg1-x52a.google.com; envelope-from=npiggin@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=T/69Wjn6; dkim-atps=neutral Received: from mail-pg1-x52a.google.com (mail-pg1-x52a.google.com [IPv6:2607:f8b0:4864:20::52a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4KCcF22md9z3bbN for ; Wed, 9 Mar 2022 00:51:34 +1100 (AEDT) Received: by mail-pg1-x52a.google.com with SMTP id o8so16523507pgf.9 for ; Tue, 08 Mar 2022 05:51:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+JzjzlDXucMUsZydIfb9gQWfLZXovxyiwNBQFRBZaHU=; b=T/69Wjn6Bd89L62zMAaSZkiR/9SJhGHDJoq85bPKd9Z5N9b1S0wQe5S1naonuwcNs3 hy7tMUrI88wPRUyD5+Hf0MUiUtWA3RPgJLgE+9HLA95ZJ//Mej/xAm+F1X179J9dv2jc EQgH/90eRJ7Y2iaVR3BDV6o37/i1NKaRE5PllV3VZefGe62x9rh20bp68aWup7nvYqRm AfB4r7P+BoGx9mgYt1L56M+QAO5yDugbCbTtScw0CM5unoudC2zrkVU31EpJBWUSOVrY /MfeIdwSm/QIhbiLY0IH2pW4X0Prx+/dNbS8H28CnZO8iNr9+OPpiMP6OaKwRmpEtpTe XRcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+JzjzlDXucMUsZydIfb9gQWfLZXovxyiwNBQFRBZaHU=; b=aSf2g07vm+31lzKpaxQoXrLu3WXecMIAcA/xD09OyfiPVhhSP7HjlPw1HVL+TbGzOq sh3F4Gm6TcGL0mtgLsLhCehMywKWyOMbtoq+kzeG1XxXggox6K2fB2ymHbF2LirM8Y4G jRfGWS0bxGWIdZ7uaylDBqhZtQEuHh5HHK0jgzXy3TN9JeSEn8yFxD2LlNZDXDrvkDNh SkE/UahOAM2FNSSPjXPlKL6aEPlT+ZJfwiGi5txKQ73y1SEye3CXxEX26W+qSXYohjWp B92SWq26ffAuIvvy/EbOImJBcUaM2w+CK84agKYbGxOkLNWzsMW9OXln6IxASvzrvXWz pZjQ== X-Gm-Message-State: AOAM531ClfnEYYXFk3NLhE+iQdz2j+GSW3LW/fAObWdQLRdJme1cl5LR NQPdQYnxrVwdP/hIIaXSYER+fZMKrU0= X-Google-Smtp-Source: ABdhPJzU1B0X1dxWBUY9A/TJiEp9REqU5lCN+ZqMvCtSmoKigMHxte5R0gHV2qxyVPm0YujS4nLkow== X-Received: by 2002:a65:5307:0:b0:374:315a:bc32 with SMTP id m7-20020a655307000000b00374315abc32mr14327989pgq.342.1646747493319; Tue, 08 Mar 2022 05:51:33 -0800 (PST) Received: from bobo.ozlabs.ibm.com (61-68-211-196.tpgi.com.au. [61.68.211.196]) by smtp.gmail.com with ESMTPSA id q14-20020a056a00150e00b004f741b5c071sm541737pfu.86.2022.03.08.05.51.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Mar 2022 05:51:33 -0800 (PST) From: Nicholas Piggin To: linuxppc-dev@lists.ozlabs.org Subject: [PATCH 14/14] powerpc/rtas: Consolidate and improve checking for rtas callers Date: Tue, 8 Mar 2022 23:50:47 +1000 Message-Id: <20220308135047.478297-15-npiggin@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220308135047.478297-1-npiggin@gmail.com> References: <20220308135047.478297-1-npiggin@gmail.com> MIME-Version: 1.0 X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Dufour , Nicholas Piggin Errors-To: linuxppc-dev-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Add range checking from the rtas syscall, and other error checks and warnings to kernel callers, so problems can be found and fixed. Signed-off-by: Nicholas Piggin --- arch/powerpc/kernel/rtas.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c index adf4892aeecd..7f8a3fd685f9 100644 --- a/arch/powerpc/kernel/rtas.c +++ b/arch/powerpc/kernel/rtas.c @@ -428,6 +428,23 @@ static int notrace va_raw_rtas_call(struct rtas_args *args, int token, { int i; + if (!irqs_disabled()) { + WARN_ON_ONCE(1); + return -1; + } + + if (!rtas.entry || token == RTAS_UNKNOWN_SERVICE) { + WARN_ON_ONCE(1); + return -1; + } + + if (nargs >= ARRAY_SIZE(args->args) + || nret > ARRAY_SIZE(args->args) + || nargs + nret > ARRAY_SIZE(args->args)) { + WARN_ON_ONCE(1); + return -1; + } + args->token = cpu_to_be32(token); args->nargs = cpu_to_be32(nargs); args->nret = cpu_to_be32(nret); @@ -476,9 +493,6 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...) char *buff_copy = NULL; int ret; - if (!rtas.entry || token == RTAS_UNKNOWN_SERVICE) - return -1; - if ((mfmsr() & (MSR_IR|MSR_DR)) != (MSR_IR|MSR_DR)) { WARN_ON_ONCE(1); return -1; @@ -955,9 +969,6 @@ int rtas_call_reentrant(int token, int nargs, int nret, int *outputs, ...) unsigned long flags; int ret; - if (!rtas.entry || token == RTAS_UNKNOWN_SERVICE) - return -1; - local_irq_save(flags); preempt_disable();