All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Zyngier <marc.zyngier@arm.com>
To: linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org,
	kvmarm@lists.cs.columbia.edu
Cc: Russell King <linux@arm.linux.org.uk>,
	Christoffer Dall <christoffer.dall@linaro.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	James Morse <james.morse@arm.com>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>
Subject: [PATCH v2 06/22] arm64: KVM: Implement HVC_SOFT_RESTART in the init code
Date: Thu, 23 Feb 2017 10:26:41 +0000	[thread overview]
Message-ID: <20170223102657.23100-7-marc.zyngier@arm.com> (raw)
In-Reply-To: <20170223102657.23100-1-marc.zyngier@arm.com>

Another missing stub hypercall is HVC_SOFT_RESTART. It turns out
that it is pretty easy to implement in terms of HVC_RESET_VECTORS
(since it needs to turn the MMU off).

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm64/kvm/hyp-init.S | 31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/arch/arm64/kvm/hyp-init.S b/arch/arm64/kvm/hyp-init.S
index b53e95efc1c5..128d6e9732b9 100644
--- a/arch/arm64/kvm/hyp-init.S
+++ b/arch/arm64/kvm/hyp-init.S
@@ -129,21 +129,36 @@ ENTRY(__kvm_handle_stub_hvc)
 	mrs	x0, vbar_el2
 	b	exit
 
+1:	cmp	x0, #HVC_SOFT_RESTART
+	b.ne	1f
+
+	/* This is where we're about to jump, staying at EL2 */
+	msr	elr_el2, x1
+	mov	x0, #(PSR_F_BIT | PSR_I_BIT | PSR_A_BIT | PSR_D_BIT | PSR_MODE_EL2h)
+	msr	spsr_el2, x0
+
+	/* Shuffle the arguments, and don't come back */
+	mov	x0, x2
+	mov	x1, x3
+	mov	x2, x4
+	b	reset
+
 1:	cmp	x0, #HVC_RESET_VECTORS
 	b.ne	1f
+reset:
 	/*
-	 * Reset kvm back to the hyp stub.
+	 * Reset kvm back to the hyp stub. Do not clobber x0-x4 in
+	 * case we coming via HVC_SOFT_RESTART.
 	 */
-	/* We're now in idmap, disable MMU */
-	mrs	x0, sctlr_el2
-	ldr	x1, =SCTLR_ELx_FLAGS
-	bic	x0, x0, x1		// Clear SCTL_M and etc
-	msr	sctlr_el2, x0
+	mrs	x5, sctlr_el2
+	ldr	x6, =SCTLR_ELx_FLAGS
+	bic	x5, x5, x6		// Clear SCTL_M and etc
+	msr	sctlr_el2, x5
 	isb
 
 	/* Install stub vectors */
-	adr_l	x0, __hyp_stub_vectors
-	msr	vbar_el2, x0
+	adr_l	x5, __hyp_stub_vectors
+	msr	vbar_el2, x5
 	b	exit
 
 1:	mov	x0, #-1
-- 
2.11.0

WARNING: multiple messages have this Message-ID (diff)
From: marc.zyngier@arm.com (Marc Zyngier)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 06/22] arm64: KVM: Implement HVC_SOFT_RESTART in the init code
Date: Thu, 23 Feb 2017 10:26:41 +0000	[thread overview]
Message-ID: <20170223102657.23100-7-marc.zyngier@arm.com> (raw)
In-Reply-To: <20170223102657.23100-1-marc.zyngier@arm.com>

Another missing stub hypercall is HVC_SOFT_RESTART. It turns out
that it is pretty easy to implement in terms of HVC_RESET_VECTORS
(since it needs to turn the MMU off).

Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm64/kvm/hyp-init.S | 31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/arch/arm64/kvm/hyp-init.S b/arch/arm64/kvm/hyp-init.S
index b53e95efc1c5..128d6e9732b9 100644
--- a/arch/arm64/kvm/hyp-init.S
+++ b/arch/arm64/kvm/hyp-init.S
@@ -129,21 +129,36 @@ ENTRY(__kvm_handle_stub_hvc)
 	mrs	x0, vbar_el2
 	b	exit
 
+1:	cmp	x0, #HVC_SOFT_RESTART
+	b.ne	1f
+
+	/* This is where we're about to jump, staying at EL2 */
+	msr	elr_el2, x1
+	mov	x0, #(PSR_F_BIT | PSR_I_BIT | PSR_A_BIT | PSR_D_BIT | PSR_MODE_EL2h)
+	msr	spsr_el2, x0
+
+	/* Shuffle the arguments, and don't come back */
+	mov	x0, x2
+	mov	x1, x3
+	mov	x2, x4
+	b	reset
+
 1:	cmp	x0, #HVC_RESET_VECTORS
 	b.ne	1f
+reset:
 	/*
-	 * Reset kvm back to the hyp stub.
+	 * Reset kvm back to the hyp stub. Do not clobber x0-x4 in
+	 * case we coming via HVC_SOFT_RESTART.
 	 */
-	/* We're now in idmap, disable MMU */
-	mrs	x0, sctlr_el2
-	ldr	x1, =SCTLR_ELx_FLAGS
-	bic	x0, x0, x1		// Clear SCTL_M and etc
-	msr	sctlr_el2, x0
+	mrs	x5, sctlr_el2
+	ldr	x6, =SCTLR_ELx_FLAGS
+	bic	x5, x5, x6		// Clear SCTL_M and etc
+	msr	sctlr_el2, x5
 	isb
 
 	/* Install stub vectors */
-	adr_l	x0, __hyp_stub_vectors
-	msr	vbar_el2, x0
+	adr_l	x5, __hyp_stub_vectors
+	msr	vbar_el2, x5
 	b	exit
 
 1:	mov	x0, #-1
-- 
2.11.0

  parent reply	other threads:[~2017-02-23 10:27 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-23 10:26 [PATCH v2 00/22] arm/arm64: KVM: Rework the hyp-stub API Marc Zyngier
2017-02-23 10:26 ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 01/22] arm64: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 02/22] arm64: KVM: " Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 03/22] arm64: KVM: Implement HVC_GET_VECTORS in the init code Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 04/22] arm64: KVM: Allow the main HYP code to use the init hyp stub implementation Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 05/22] arm64: KVM: Convert __cpu_reset_hyp_mode to using __hyp_reset_vectors Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` Marc Zyngier [this message]
2017-02-23 10:26   ` [PATCH v2 06/22] arm64: KVM: Implement HVC_SOFT_RESTART in the init code Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 07/22] ARM: hyp-stub: improve ABI Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 08/22] ARM: soft-reboot into same mode that we entered the kernel Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 09/22] ARM: KVM: Convert KVM to use HVC_GET_VECTORS Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 10/22] ARM: Update cpu_v7_reset documentation Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 11/22] ARM: hyp-stub: Use r1 for the soft-restart address Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 12/22] ARM: Expose the VA/IDMAP offset Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 13/22] ARM: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 14/22] ARM: KVM: " Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 15/22] ARM: KVM: Implement HVC_GET_VECTORS in the init code Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 16/22] ARM: KVM: Allow the main HYP code to use the init hyp stub implementation Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 17/22] ARM: KVM: Convert __cpu_reset_hyp_mode to using __hyp_reset_vectors Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 18/22] ARM: KVM: Implement HVC_SOFT_RESTART in the init code Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 19/22] arm/arm64: KVM: Use __hyp_reset_vectors() directly Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 20/22] arm/arm64: KVM: Remove kvm_get_idmap_start Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 21/22] arm/arm64: KVM: Use HVC_RESET_VECTORS to reinit HYP mode Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier
2017-02-23 10:26 ` [PATCH v2 22/22] arm/arm64: Add hyp-stub API documentation Marc Zyngier
2017-02-23 10:26   ` Marc Zyngier

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=20170223102657.23100-7-marc.zyngier@arm.com \
    --to=marc.zyngier@arm.com \
    --cc=ard.biesheuvel@linaro.org \
    --cc=catalin.marinas@arm.com \
    --cc=christoffer.dall@linaro.org \
    --cc=james.morse@arm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux@arm.linux.org.uk \
    --cc=mark.rutland@arm.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.