Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757594AbeAHQzs (ORCPT + 1 other); Mon, 8 Jan 2018 11:55:48 -0500 Received: from ozlabs.org ([103.22.144.67]:58573 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757033AbeAHQzq (ORCPT ); Mon, 8 Jan 2018 11:55:46 -0500 From: Michael Ellerman To: linuxppc-dev@ozlabs.org Cc: linux-kernel@vger.kernel.org, tglx@linutronix.de, peterz@infradead.org, npiggin@gmail.com, anton@samba.org, mikey@neuling.org, oohall@gmail.com, paulus@samba.org Subject: [PATCH 04/11] powerpc/64: Convert the syscall exit path to use RFI_TO_USER/KERNEL Date: Tue, 9 Jan 2018 03:54:46 +1100 Message-Id: <20180108165453.26066-4-mpe@ellerman.id.au> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180108165453.26066-1-mpe@ellerman.id.au> References: <20180108165453.26066-1-mpe@ellerman.id.au> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: From: Nicholas Piggin In the syscall exit path we may be returning to user or kernel context. We already have a test for that, because we conditionally restore r13. So use that existing test and branch, and bifurcate the return based on that. Signed-off-by: Nicholas Piggin Signed-off-by: Michael Ellerman --- arch/powerpc/kernel/entry_64.S | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 567d8f487f2f..b20c6cb0fa7f 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -267,13 +267,23 @@ BEGIN_FTR_SECTION END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) ld r13,GPR13(r1) /* only restore r13 if returning to usermode */ + ld r2,GPR2(r1) + ld r1,GPR1(r1) + mtlr r4 + mtcr r5 + mtspr SPRN_SRR0,r7 + mtspr SPRN_SRR1,r8 + RFI_TO_USER + b . /* prevent speculative execution */ + + /* exit to kernel */ 1: ld r2,GPR2(r1) ld r1,GPR1(r1) mtlr r4 mtcr r5 mtspr SPRN_SRR0,r7 mtspr SPRN_SRR1,r8 - RFI + RFI_TO_KERNEL b . /* prevent speculative execution */ .Lsyscall_error: -- 2.14.3