linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Pavel Tatashin <pasha.tatashin@soleen.com>
To: pasha.tatashin@soleen.com, jmorris@namei.org, sashal@kernel.org,
	ebiederm@xmission.com, kexec@lists.infradead.org,
	linux-kernel@vger.kernel.org, corbet@lwn.net,
	catalin.marinas@arm.com, will@kernel.org,
	linux-arm-kernel@lists.infradead.org, maz@kernel.org,
	james.morse@arm.com, vladimir.murzin@arm.com,
	matthias.bgg@gmail.com, linux-mm@kvack.org, mark.rutland@arm.com,
	steve.capper@arm.com, rfontana@redhat.com, tglx@linutronix.de,
	selindag@gmail.com, tyhicks@linux.microsoft.com,
	kernelfans@gmail.com, akpm@linux-foundation.org,
	madvenka@linux.microsoft.com
Subject: [PATCH 03/18] arm64: hyp-stub: Move elx_sync into the vectors
Date: Thu, 27 May 2021 11:05:11 -0400	[thread overview]
Message-ID: <20210527150526.271941-4-pasha.tatashin@soleen.com> (raw)
In-Reply-To: <20210527150526.271941-1-pasha.tatashin@soleen.com>

The hyp-stub's elx_sync code fits in the vector.

With this, all of the hyp-stubs behaviour is contained in its vectors.
This lets kexec and hibernate copy the hyp-stub when they need its
behaviour, instead of re-implementing it.

Co-developed-by: James Morse <james.morse@arm.com>
Signed-off-by: Pavel Tatashin <pasha.tatashin@soleen.com>
---
 arch/arm64/kernel/hyp-stub.S | 64 +++++++++++++++++++-----------------
 1 file changed, 33 insertions(+), 31 deletions(-)

diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S
index 18a97bee3779..86af6c4e52b9 100644
--- a/arch/arm64/kernel/hyp-stub.S
+++ b/arch/arm64/kernel/hyp-stub.S
@@ -21,6 +21,37 @@ SYM_CODE_START_LOCAL(\label)
 	.align 7
 	b	\label
 SYM_CODE_END(\label)
+.endm
+
+.macro elx_sync_vector	label
+SYM_CODE_START_LOCAL(\label)
+	.align 7
+	cmp	x0, #HVC_SET_VECTORS
+	b.ne	1f
+	msr	vbar_el2, x1
+	b	9f
+
+1:	cmp	x0, #HVC_VHE_RESTART
+	b.eq	mutate_to_vhe
+
+2:	cmp	x0, #HVC_SOFT_RESTART
+	b.ne	3f
+	mov	x0, x2
+	mov	x2, x4
+	mov	x4, x1
+	mov	x1, x3
+	br	x4				// no return
+
+3:	cmp	x0, #HVC_RESET_VECTORS
+	beq	9f				// Nothing to reset!
+
+	/* Someone called kvm_call_hyp() against the hyp-stub... */
+	mov_q	x0, HVC_STUB_ERR
+	eret
+
+9:	mov	x0, xzr
+	eret
+SYM_CODE_END(\label)
 .endm
 
 	.text
@@ -34,12 +65,12 @@ SYM_CODE_START(__hyp_stub_vectors)
 	invalid_vector	hyp_stub_el2t_fiq_invalid	// FIQ EL2t
 	invalid_vector	hyp_stub_el2t_error_invalid	// Error EL2t
 
-	ventry	elx_sync				// Synchronous EL2h
+	elx_sync_vector	el2h_sync			// Synchronous EL2h
 	invalid_vector	hyp_stub_el2h_irq_invalid	// IRQ EL2h
 	invalid_vector	hyp_stub_el2h_fiq_invalid	// FIQ EL2h
 	invalid_vector	hyp_stub_el2h_error_invalid	// Error EL2h
 
-	ventry	elx_sync				// Synchronous 64-bit EL1
+	elx_sync_vector	el1_sync			// Synchronous 64-bit EL1
 	invalid_vector	hyp_stub_el1_irq_invalid	// IRQ 64-bit EL1
 	invalid_vector	hyp_stub_el1_fiq_invalid	// FIQ 64-bit EL1
 	invalid_vector	hyp_stub_el1_error_invalid	// Error 64-bit EL1
@@ -55,35 +86,6 @@ SYM_CODE_END(__hyp_stub_vectors)
 # Check the __hyp_stub_vectors didn't overflow
 .org . - (__hyp_stub_vectors_end - __hyp_stub_vectors) + SZ_2K
 
-
-SYM_CODE_START_LOCAL(elx_sync)
-	cmp	x0, #HVC_SET_VECTORS
-	b.ne	1f
-	msr	vbar_el2, x1
-	b	9f
-
-1:	cmp	x0, #HVC_VHE_RESTART
-	b.eq	mutate_to_vhe
-
-2:	cmp	x0, #HVC_SOFT_RESTART
-	b.ne	3f
-	mov	x0, x2
-	mov	x2, x4
-	mov	x4, x1
-	mov	x1, x3
-	br	x4				// no return
-
-3:	cmp	x0, #HVC_RESET_VECTORS
-	beq	9f				// Nothing to reset!
-
-	/* Someone called kvm_call_hyp() against the hyp-stub... */
-	mov_q	x0, HVC_STUB_ERR
-	eret
-
-9:	mov	x0, xzr
-	eret
-SYM_CODE_END(elx_sync)
-
 // nVHE? No way! Give me the real thing!
 SYM_CODE_START_LOCAL(mutate_to_vhe)
 	// Sanity check: MMU *must* be off
-- 
2.25.1


  parent reply	other threads:[~2021-05-27 15:05 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-27 15:05 [PATCH 00/18] arm64: MMU enabled kexec relocation Pavel Tatashin
2021-05-27 15:05 ` [PATCH 01/18] arm64: hyp-stub: Check the size of the HYP stub's vectors Pavel Tatashin
2021-05-27 15:05 ` [PATCH 02/18] arm64: hyp-stub: Move invalid vector entries into the vectors Pavel Tatashin
2021-05-27 15:05 ` Pavel Tatashin [this message]
2021-05-27 15:54   ` [PATCH 03/18] arm64: hyp-stub: Move elx_sync " Marc Zyngier
2021-05-27 21:23     ` Pavel Tatashin
2021-06-01 12:22       ` Marc Zyngier
2021-06-02  1:18         ` Pavel Tatashin
2021-06-08 17:46           ` Pavel Tatashin
2021-05-27 15:05 ` [PATCH 04/18] arm64: kernel: add helper for booted at EL2 and not VHE Pavel Tatashin
2021-06-01 12:38   ` Marc Zyngier
2021-06-02  1:33     ` Pavel Tatashin
2021-06-02  8:20       ` Marc Zyngier
2021-05-27 15:05 ` [PATCH 05/18] arm64: trans_pgd: hibernate: Add trans_pgd_copy_el2_vectors Pavel Tatashin
2021-05-27 15:05 ` [PATCH 06/18] arm64: hibernate: abstract ttrb0 setup function Pavel Tatashin
2021-05-27 15:05 ` [PATCH 07/18] arm64: kexec: flush image and lists during kexec load time Pavel Tatashin
2021-05-27 15:05 ` [PATCH 08/18] arm64: kexec: skip relocation code for inplace kexec Pavel Tatashin
2021-05-27 15:05 ` [PATCH 09/18] arm64: kexec: Use dcache ops macros instead of open-coding Pavel Tatashin
2021-05-27 15:05 ` [PATCH 10/18] arm64: kexec: pass kimage as the only argument to relocation function Pavel Tatashin
2021-05-27 15:05 ` [PATCH 11/18] arm64: kexec: kexec may require EL2 vectors Pavel Tatashin
2021-05-27 15:05 ` [PATCH 12/18] arm64: kexec: relocate in EL1 mode Pavel Tatashin
2021-05-27 15:05 ` [PATCH 13/18] arm64: kexec: use ld script for relocation function Pavel Tatashin
2021-05-27 15:05 ` [PATCH 14/18] arm64: kexec: install a copy of the linear-map Pavel Tatashin
2021-05-27 15:05 ` [PATCH 15/18] arm64: kexec: keep MMU enabled during kexec relocation Pavel Tatashin
2021-05-27 15:05 ` [PATCH 16/18] arm64: kexec: remove the pre-kexec PoC maintenance Pavel Tatashin
2021-05-27 15:05 ` [PATCH 17/18] arm64: kexec: Remove cpu-reset.h Pavel Tatashin
2021-05-27 15:05 ` [PATCH 18/18] arm64/mm: remove useless trans_pgd_map_page() Pavel Tatashin

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=20210527150526.271941-4-pasha.tatashin@soleen.com \
    --to=pasha.tatashin@soleen.com \
    --cc=akpm@linux-foundation.org \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=ebiederm@xmission.com \
    --cc=james.morse@arm.com \
    --cc=jmorris@namei.org \
    --cc=kernelfans@gmail.com \
    --cc=kexec@lists.infradead.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=madvenka@linux.microsoft.com \
    --cc=mark.rutland@arm.com \
    --cc=matthias.bgg@gmail.com \
    --cc=maz@kernel.org \
    --cc=rfontana@redhat.com \
    --cc=sashal@kernel.org \
    --cc=selindag@gmail.com \
    --cc=steve.capper@arm.com \
    --cc=tglx@linutronix.de \
    --cc=tyhicks@linux.microsoft.com \
    --cc=vladimir.murzin@arm.com \
    --cc=will@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;
as well as URLs for NNTP newsgroup(s).