linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: alex.shi@linaro.org (Alex Shi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 12/29] arm64: entry: Hook up entry trampoline to exception vectors
Date: Wed, 28 Feb 2018 11:56:34 +0800	[thread overview]
Message-ID: <1519790211-16582-13-git-send-email-alex.shi@linaro.org> (raw)
In-Reply-To: <1519790211-16582-1-git-send-email-alex.shi@linaro.org>

From: Will Deacon <will.deacon@arm.com>

commit 4bf3286d29f3 upstream.

Hook up the entry trampoline to our exception vectors so that all
exceptions from and returns to EL0 go via the trampoline, which swizzles
the vector base register accordingly. Transitioning to and from the
kernel clobbers x30, so we use tpidrro_el0 and far_el1 as scratch
registers for native tasks.

Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Tested-by: Laura Abbott <labbott@redhat.com>
Tested-by: Shanker Donthineni <shankerd@codeaurora.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Alex Shi <alex.shi@linaro.org>
---
 arch/arm64/kernel/entry.S | 39 ++++++++++++++++++++++++++++++++++++---
 1 file changed, 36 insertions(+), 3 deletions(-)

diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
index 7b1be51..eccb6d8 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -72,10 +72,26 @@
 
 	.macro kernel_ventry, el, label, regsize = 64
 	.align 7
+#ifdef CONFIG_UNMAP_KERNEL_AT_EL0
+	.if	\el == 0
+	.if	\regsize == 64
+	mrs	x30, tpidrro_el0
+	msr	tpidrro_el0, xzr
+	.else
+	mov	x30, xzr
+	.endif
+	.endif
+#endif
+
 	sub	sp, sp, #S_FRAME_SIZE
 	b	el\()\el\()_\label
 	.endm
 
+	.macro tramp_alias, dst, sym
+	mov_q	\dst, TRAMP_VALIAS
+	add	\dst, \dst, #(\sym - .entry.tramp.text)
+	.endm
+
 	.macro	kernel_entry, el, regsize = 64
 	.if	\regsize == 32
 	mov	w0, w0				// zero upper 32 bits of x0
@@ -157,18 +173,20 @@
 	ct_user_enter
 	ldr	x23, [sp, #S_SP]		// load return stack pointer
 	msr	sp_el0, x23
+	tst	x22, #PSR_MODE32_BIT		// native task?
+	b.eq	3f
+
 #ifdef CONFIG_ARM64_ERRATUM_845719
 alternative_if ARM64_WORKAROUND_845719
-	tbz	x22, #4, 1f
 #ifdef CONFIG_PID_IN_CONTEXTIDR
 	mrs	x29, contextidr_el1
 	msr	contextidr_el1, x29
 #else
 	msr contextidr_el1, xzr
 #endif
-1:
 alternative_else_nop_endif
 #endif
+3:
 	.endif
 	msr	elr_el1, x21			// set up the return data
 	msr	spsr_el1, x22
@@ -189,7 +207,22 @@ alternative_else_nop_endif
 	ldp	x28, x29, [sp, #16 * 14]
 	ldr	lr, [sp, #S_LR]
 	add	sp, sp, #S_FRAME_SIZE		// restore sp
-	eret					// return to kernel
+
+#ifndef CONFIG_UNMAP_KERNEL_AT_EL0
+	eret
+#else
+	.if	\el == 0
+	bne	4f
+	msr	far_el1, x30
+	tramp_alias	x30, tramp_exit_native
+	br	x30
+4:
+	tramp_alias	x30, tramp_exit_compat
+	br	x30
+	.else
+	eret
+	.endif
+#endif
 	.endm
 
 	.macro	get_thread_info, rd
-- 
2.7.4

  parent reply	other threads:[~2018-02-28  3:56 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-28  3:56 [PATCH 0/29] arm meltdown fix backporting review for lts 4.9 Alex Shi
2018-02-28  3:56 ` [PATCH 01/29] arm64: mm: Use non-global mappings for kernel space Alex Shi
2018-02-28 12:08   ` Greg KH
2018-03-01 11:53     ` Alex Shi
2018-02-28  3:56 ` [PATCH 02/29] arm64: mm: Move ASID from TTBR0 to TTBR1 Alex Shi
2018-02-28  3:56 ` [PATCH 03/29] arm64: mm: Allocate ASIDs in pairs Alex Shi
2018-02-28  3:56 ` [PATCH 04/29] arm64: mm: Add arm64_kernel_unmapped_at_el0 helper Alex Shi
2018-02-28  3:56 ` [PATCH 05/29] arm64: mm: Invalidate both kernel and user ASIDs when performing TLBI Alex Shi
2018-02-28  3:56 ` [PATCH 06/29] arm64: factor out entry stack manipulation Alex Shi
2018-02-28  3:56 ` [PATCH 07/29] arm64: entry.S: move SError handling into a C function for future expansion Alex Shi
2018-02-28  3:56 ` [PATCH 08/29] module: extend 'rodata=off' boot cmdline parameter to module mappings Alex Shi
2018-02-28  3:56 ` [PATCH 09/29] arm64: entry: Add exception trampoline page for exceptions from EL0 Alex Shi
2018-02-28  3:56 ` [PATCH 10/29] arm64: mm: Map entry trampoline into trampoline and kernel page tables Alex Shi
2018-02-28  3:56 ` [PATCH 11/29] arm64: entry: Explicitly pass exception level to kernel_ventry macro Alex Shi
2018-02-28  3:56 ` Alex Shi [this message]
2018-02-28  3:56 ` [PATCH 13/29] arm64: tls: Avoid unconditional zeroing of tpidrro_el0 for native tasks Alex Shi
2018-02-28  3:56 ` [PATCH 14/29] arm64: entry: Add fake CPU feature for unmapping the kernel at EL0 Alex Shi
2018-02-28  3:56 ` [PATCH 15/29] arm64: kaslr: Put kernel vectors address in separate data page Alex Shi
2018-02-28  3:56 ` [PATCH 16/29] arm64: use RET instruction for exiting the trampoline Alex Shi
2018-02-28  3:56 ` [PATCH 17/29] arm64: Kconfig: Add CONFIG_UNMAP_KERNEL_AT_EL0 Alex Shi
2018-02-28  3:56 ` [PATCH 18/29] arm64: Kconfig: Reword UNMAP_KERNEL_AT_EL0 kconfig entry Alex Shi
2018-02-28  3:56 ` [PATCH 19/29] arm64: Take into account ID_AA64PFR0_EL1.CSV3 Alex Shi
2018-02-28  3:56 ` [PATCH 20/29] arm64: Allow checking of a CPU-local erratum Alex Shi
2018-02-28  3:56 ` [PATCH 21/29] arm64: capabilities: Handle duplicate entries for a capability Alex Shi
2018-02-28  3:56 ` [PATCH 22/29] arm64: cputype: Add missing MIDR values for Cortex-A72 and Cortex-A75 Alex Shi
2018-02-28  3:56 ` [PATCH 23/29] arm64: cputype: Add MIDR values for Cavium ThunderX2 CPUs Alex Shi
2018-02-28  3:56 ` [PATCH 24/29] arm64: Turn on KPTI only on CPUs that need it Alex Shi
2018-02-28  3:56 ` [PATCH 25/29] arm64: kpti: Make use of nG dependent on arm64_kernel_unmapped_at_el0() Alex Shi
2018-02-28  3:56 ` [PATCH 26/29] arm64: kpti: Add ->enable callback to remap swapper using nG mappings Alex Shi
2018-02-28  3:56 ` [PATCH 27/29] arm64: Force KPTI to be disabled on Cavium ThunderX Alex Shi
2018-02-28  3:56 ` [PATCH 28/29] arm64: entry: Reword comment about post_ttbr_update_workaround Alex Shi
2018-02-28  3:56 ` [PATCH 29/29] arm64: idmap: Use "awx" flags for .idmap.text .pushsection directives Alex Shi
2018-02-28  4:02 ` [PATCH 0/29] arm meltdown fix backporting review for lts 4.9 Alex Shi
2018-03-01 15:24 ` Greg KH
2018-03-02  9:14   ` Alex Shi
2018-03-02 10:32     ` Marc Zyngier
2018-03-02 16:54     ` Greg KH
2018-03-05 12:46       ` Mark Brown
2018-03-05 13:08         ` Greg KH
2018-03-06 14:26           ` Mark Brown
2018-03-06 17:25             ` Greg KH
2018-03-06 21:31               ` Mark Brown
2018-03-13 10:03                 ` Greg KH
2018-03-07  4:43               ` Alex Shi
2018-03-07  3:27           ` Alex Shi
2018-03-07 18:24       ` Ard Biesheuvel
2018-03-13 10:04         ` Greg KH
2018-03-13 10:13           ` Ard Biesheuvel
2018-03-13 10:38             ` Greg KH
2018-03-13 13:01               ` Ard Biesheuvel
2018-03-13 13:25                 ` Greg KH

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=1519790211-16582-13-git-send-email-alex.shi@linaro.org \
    --to=alex.shi@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.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;
as well as URLs for NNTP newsgroup(s).