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
next prev 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: linkBe 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.