LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Ellerman <mpe@ellerman.id.au>
To: Alexander.Levin@microsoft.com
Cc: stable@vger.kernel.org, linuxppc-dev@ozlabs.org, npiggin@gmail.com
Subject: [PATCH v4.1 backport 06/15] powerpc/64s: Convert slb_miss_common to use RFI_TO_USER/KERNEL
Date: Fri,  2 Mar 2018 15:45:40 +1100	[thread overview]
Message-ID: <20180302044549.14930-7-mpe@ellerman.id.au> (raw)
In-Reply-To: <20180302044549.14930-1-mpe@ellerman.id.au>

From: Nicholas Piggin <npiggin@gmail.com>

commit c7305645eb0c1621351cfc104038831ae87c0053 upstream.

In the SLB miss handler we may be returning to user or kernel. We need
to add a check early on and save the result in the cr4 register, and
then we bifurcate the return path based on that.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
[mpe: Backport to 4.4 based on patch from Balbir]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 arch/powerpc/kernel/exceptions-64s.S | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 591efc03f80d..c7dfd67c14da 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -1511,6 +1511,8 @@ slb_miss_realmode:
 
 	andi.	r10,r12,MSR_RI	/* check for unrecoverable exception */
 	beq-	2f
+	andi.	r10,r12,MSR_PR	/* check for user mode (PR != 0) */
+	bne	1f
 
 .machine	push
 .machine	"power4"
@@ -1524,7 +1526,23 @@ slb_miss_realmode:
 	ld	r11,PACA_EXSLB+EX_R11(r13)
 	ld	r12,PACA_EXSLB+EX_R12(r13)
 	ld	r13,PACA_EXSLB+EX_R13(r13)
-	rfid
+	RFI_TO_KERNEL
+	b	.	/* prevent speculative execution */
+
+1:
+.machine	push
+.machine	"power4"
+	mtcrf	0x80,r9
+	mtcrf	0x01,r9		/* slb_allocate uses cr0 and cr7 */
+.machine	pop
+
+	RESTORE_PPR_PACA(PACA_EXSLB, r9)
+	ld	r9,PACA_EXSLB+EX_R9(r13)
+	ld	r10,PACA_EXSLB+EX_R10(r13)
+	ld	r11,PACA_EXSLB+EX_R11(r13)
+	ld	r12,PACA_EXSLB+EX_R12(r13)
+	ld	r13,PACA_EXSLB+EX_R13(r13)
+	RFI_TO_USER
 	b	.	/* prevent speculative execution */
 
 2:	mfspr	r11,SPRN_SRR0
@@ -1533,7 +1551,7 @@ slb_miss_realmode:
 	mtspr	SPRN_SRR0,r10
 	ld	r10,PACAKMSR(r13)
 	mtspr	SPRN_SRR1,r10
-	rfid
+	RFI_TO_KERNEL
 	b	.
 
 unrecov_slb:
-- 
2.14.1

  parent reply	other threads:[~2018-03-02  4:46 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-02  4:45 [PATCH v4.1 backport 00/15] powerpc stable backports for v4.1 Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 01/15] powerpc/pseries: Add H_GET_CPU_CHARACTERISTICS flags & wrapper Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 02/15] powerpc/64: Add macros for annotating the destination of rfid/hrfid Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 03/15] powerpc/64s: Simple RFI macro conversions Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 04/15] powerpc/64: Convert fast_exception_return to use RFI_TO_USER/KERNEL Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 05/15] powerpc/64: Convert the syscall exit path " Michael Ellerman
2018-03-02  4:45 ` Michael Ellerman [this message]
2018-03-02  4:45 ` [PATCH v4.1 backport 07/15] powerpc/64s: Add support for RFI flush of L1-D cache Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 08/15] powerpc/64s: Support disabling RFI flush with no_rfi_flush and nopti Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 09/15] powerpc/64s: Improve RFI L1-D cache flush fallback Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 10/15] powerpc/pseries: Query hypervisor for RFI flush settings Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 11/15] powerpc/powernv: Check device-tree " Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 12/15] powerpc/64s: Allow control of RFI flush via debugfs Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 13/15] powerpc/pseries: include linux/types.h in asm/hvcall.h Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 14/15] powerpc/ptrace: Fix out of bounds array access warning Michael Ellerman
2018-03-02  4:45 ` [PATCH v4.1 backport 15/15] powerpc/vdso64: Use double word compare on pointers Michael Ellerman
2018-03-03 22:17 ` [PATCH v4.1 backport 00/15] powerpc stable backports for v4.1 Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180302044549.14930-7-mpe@ellerman.id.au \
    --to=mpe@ellerman.id.au \
    --cc=Alexander.Levin@microsoft.com \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=npiggin@gmail.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox