Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935377AbeAHQ6K (ORCPT + 1 other); Mon, 8 Jan 2018 11:58:10 -0500 Received: from ozlabs.org ([103.22.144.67]:51759 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757360AbeAHQzs (ORCPT ); Mon, 8 Jan 2018 11:55:48 -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 05/11] powerpc/64: Convert fast_exception_return to use RFI_TO_USER/KERNEL Date: Tue, 9 Jan 2018 03:54:47 +1100 Message-Id: <20180108165453.26066-5-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 Similar to the syscall return path, in fast_exception_return 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 | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index b20c6cb0fa7f..fde89f04f276 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -892,7 +892,7 @@ BEGIN_FTR_SECTION END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) ACCOUNT_CPU_USER_EXIT(r13, r2, r4) REST_GPR(13, r1) -1: + mtspr SPRN_SRR1,r3 ld r2,_CCR(r1) @@ -905,8 +905,22 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) ld r3,GPR3(r1) ld r4,GPR4(r1) ld r1,GPR1(r1) + RFI_TO_USER + b . /* prevent speculative execution */ + +1: mtspr SPRN_SRR1,r3 + + ld r2,_CCR(r1) + mtcrf 0xFF,r2 + ld r2,_NIP(r1) + mtspr SPRN_SRR0,r2 - rfid + ld r0,GPR0(r1) + ld r2,GPR2(r1) + ld r3,GPR3(r1) + ld r4,GPR4(r1) + ld r1,GPR1(r1) + RFI_TO_KERNEL b . /* prevent speculative execution */ #endif /* CONFIG_PPC_BOOK3E */ -- 2.14.3