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>,
	Keerthy <j-keerthy@ti.com>
Subject: [PATCH v5 29/34] ARM: decompressor: Remove __hyp_get_vectors usage
Date: Mon,  3 Apr 2017 19:38:02 +0100	[thread overview]
Message-ID: <20170403183807.1620-30-marc.zyngier@arm.com> (raw)
In-Reply-To: <20170403183807.1620-1-marc.zyngier@arm.com>

When the compressed image needs to be relocated to avoid being
overwritten by the decompression process, we need to relocate
the hyp vectors as well so that we can find them once the
decompression has taken effect.

For that, we perform the following calculation:
	u32 v = __hyp_get_vectors();
	v += offset;
	__hyp_set_vectors(v);

But we're guaranteed that the initial value of v as returned by
__hyp_get_vectors is always __hyp_stub_vectors, because we have
just set it by calling __hyp_stub_install.

So let's remove the use of __hyp_get_vectors, and directly use
__hyp_stub_vectors instead.

Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm/boot/compressed/head.S | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index 9150f9732785..7c711ba61417 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -422,7 +422,17 @@ dtb_check_done:
 		cmp	r0, #HYP_MODE
 		bne	1f
 
-		bl	__hyp_get_vectors
+		/*
+		 * Compute the address of the hyp vectors after relocation.
+		 * This requires some arithmetic since we cannot directly
+		 * reference __hyp_stub_vectors in a PC-relative way.
+		 * Call __hyp_set_vectors with the new address so that we
+		 * can HVC again after the copy.
+		 */
+0:		adr	r0, 0b
+		movw	r1, #:lower16:__hyp_stub_vectors - 0b
+		movt	r1, #:upper16:__hyp_stub_vectors - 0b
+		add	r0, r0, r1
 		sub	r0, r0, r5
 		add	r0, r0, r10
 		bl	__hyp_set_vectors
-- 
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 v5 29/34] ARM: decompressor: Remove __hyp_get_vectors usage
Date: Mon,  3 Apr 2017 19:38:02 +0100	[thread overview]
Message-ID: <20170403183807.1620-30-marc.zyngier@arm.com> (raw)
In-Reply-To: <20170403183807.1620-1-marc.zyngier@arm.com>

When the compressed image needs to be relocated to avoid being
overwritten by the decompression process, we need to relocate
the hyp vectors as well so that we can find them once the
decompression has taken effect.

For that, we perform the following calculation:
	u32 v = __hyp_get_vectors();
	v += offset;
	__hyp_set_vectors(v);

But we're guaranteed that the initial value of v as returned by
__hyp_get_vectors is always __hyp_stub_vectors, because we have
just set it by calling __hyp_stub_install.

So let's remove the use of __hyp_get_vectors, and directly use
__hyp_stub_vectors instead.

Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
 arch/arm/boot/compressed/head.S | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index 9150f9732785..7c711ba61417 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -422,7 +422,17 @@ dtb_check_done:
 		cmp	r0, #HYP_MODE
 		bne	1f
 
-		bl	__hyp_get_vectors
+		/*
+		 * Compute the address of the hyp vectors after relocation.
+		 * This requires some arithmetic since we cannot directly
+		 * reference __hyp_stub_vectors in a PC-relative way.
+		 * Call __hyp_set_vectors with the new address so that we
+		 * can HVC again after the copy.
+		 */
+0:		adr	r0, 0b
+		movw	r1, #:lower16:__hyp_stub_vectors - 0b
+		movt	r1, #:upper16:__hyp_stub_vectors - 0b
+		add	r0, r0, r1
 		sub	r0, r0, r5
 		add	r0, r0, r10
 		bl	__hyp_set_vectors
-- 
2.11.0

  parent reply	other threads:[~2017-04-03 18:39 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-03 18:37 [PATCH v5 00/34] arm/arm64: KVM: Rework the hyp-stub API Marc Zyngier
2017-04-03 18:37 ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 01/34] arm64: hyp-stub: Stop pointlessly clobbering lr Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 02/34] arm64: KVM: Move lr save/restore to do_el2_call Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 03/34] arm64: hyp-stub: Don't save lr in the EL1 code Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 04/34] arm64: hyp-stub: Define a return value for failed stub calls Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 05/34] arm64: hyp-stub: Update documentation in asm/virt.h Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 06/34] arm64: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 07/34] arm64: KVM: Implement HVC_RESET_VECTORS stub hypercall in the init code Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 08/34] arm64: KVM: Implement HVC_GET_VECTORS " Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 09/34] arm64: KVM: Allow the main HYP code to use the init hyp stub implementation Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 10/34] arm64: KVM: Convert __cpu_reset_hyp_mode to using __hyp_reset_vectors Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 11/34] arm64: KVM: Implement HVC_SOFT_RESTART in the init code Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 12/34] ARM: hyp-stub: improve ABI Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 13/34] ARM: soft-reboot into same mode that we entered the kernel Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 14/34] ARM: KVM: Convert KVM to use HVC_GET_VECTORS Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 15/34] ARM: Update cpu_v7_reset documentation Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 16/34] ARM: hyp-stub: Use r1 for the soft-restart address Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 17/34] ARM: Expose the VA/IDMAP offset Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 18/34] ARM: hyp-stub: Define a return value for failed stub calls Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 19/34] ARM: hyp-stub: Implement HVC_RESET_VECTORS stub hypercall Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 20/34] ARM: KVM: Implement HVC_RESET_VECTORS stub hypercall in the init code Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 21/34] ARM: KVM: Implement HVC_GET_VECTORS " Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 22/34] ARM: KVM: Allow the main HYP code to use the init hyp stub implementation Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 23/34] ARM: KVM: Convert __cpu_reset_hyp_mode to using __hyp_reset_vectors Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 24/34] ARM: KVM: Implement HVC_SOFT_RESTART in the init code Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 25/34] ARM: KVM: Gracefully handle hyp-stubs being restored from under our feet Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:37 ` [PATCH v5 26/34] arm/arm64: KVM: Use __hyp_reset_vectors() directly Marc Zyngier
2017-04-03 18:37   ` Marc Zyngier
2017-04-03 18:38 ` [PATCH v5 27/34] arm/arm64: KVM: Remove kvm_get_idmap_start Marc Zyngier
2017-04-03 18:38   ` Marc Zyngier
2017-04-03 18:38 ` [PATCH v5 28/34] arm/arm64: KVM: Use HVC_RESET_VECTORS to reinit HYP mode Marc Zyngier
2017-04-03 18:38   ` Marc Zyngier
2017-04-03 18:38 ` Marc Zyngier [this message]
2017-04-03 18:38   ` [PATCH v5 29/34] ARM: decompressor: Remove __hyp_get_vectors usage Marc Zyngier
2017-04-03 18:38 ` [PATCH v5 30/34] ARM: hyp-stub/KVM: Kill __hyp_get_vectors Marc Zyngier
2017-04-03 18:38   ` Marc Zyngier
2017-04-03 18:38 ` [PATCH v5 31/34] arm64: " Marc Zyngier
2017-04-03 18:38   ` Marc Zyngier
2017-04-03 18:38 ` [PATCH v5 32/34] arm64: hyp-stub: Zero x0 on successful stub handling Marc Zyngier
2017-04-03 18:38   ` Marc Zyngier
2017-04-03 18:38 ` [PATCH v5 33/34] ARM: hyp-stub: Zero r0 " Marc Zyngier
2017-04-03 18:38   ` Marc Zyngier
2017-04-03 18:38 ` [PATCH v5 34/34] arm/arm64: Add hyp-stub API documentation Marc Zyngier
2017-04-03 18:38   ` Marc Zyngier
2017-04-04 12:04 ` [PATCH v5 00/34] arm/arm64: KVM: Rework the hyp-stub API Christoffer Dall
2017-04-04 12:04   ` Christoffer Dall

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=20170403183807.1620-30-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=j-keerthy@ti.com \
    --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.