From: Marc Zyngier <maz@kernel.org>
To: David Brazdil <dbrazdil@google.com>
Cc: kernel-team@android.com,
Suzuki K Poulose <suzuki.poulose@arm.com>,
android-kvm@google.com, Catalin Marinas <catalin.marinas@arm.com>,
linux-kernel@vger.kernel.org, James Morse <james.morse@arm.com>,
linux-arm-kernel@lists.infradead.org,
Will Deacon <will@kernel.org>,
kvmarm@lists.cs.columbia.edu,
Julien Thierry <julien.thierry.kdev@gmail.com>,
Andrew Scull <ascull@google.com>
Subject: Re: [PATCH v3 04/15] arm64: kvm: Handle calls to prefixed hyp functions
Date: Thu, 18 Jun 2020 17:51:27 +0100 [thread overview]
Message-ID: <a31b7ee9ad1edaa38aa122ac90cc605c@kernel.org> (raw)
In-Reply-To: <20200618122537.9625-5-dbrazdil@google.com>
Hi David,
On 2020-06-18 13:25, David Brazdil wrote:
> From: Andrew Scull <ascull@google.com>
>
> This patch is part of a series which builds KVM's non-VHE hyp code
> separately
> from VHE and the rest of the kernel.
>
> Once hyp functions are moved to a hyp object, they will have prefixed
> symbols.
> This change declares and gets the address of the prefixed version for
> calls to
> the hyp functions.
>
> To aid migration, the hyp functions that have not yet moved have their
> prefixed
> versions aliased to their non-prefixed version. This begins with all
> the hyp
> functions being listed and will reduce to none of them once the
> migration is
> complete.
>
> Signed-off-by: Andrew Scull <ascull@google.com>
>
> Extracted kvm_call_hyp nVHE branches into own helper macros.
> Signed-off-by: David Brazdil <dbrazdil@google.com>
nit: if you want to add this kind of comment, try to write it between
square brackets, without blank lines in between:
Signed-off-by: Andrew Scull <ascull@google.com>
[David: Extracted kvm_call_hyp nVHE branches into own helper macros.]
Signed-off-by: David Brazdil <dbrazdil@google.com>
> ---
> arch/arm64/include/asm/kvm_asm.h | 19 +++++++++++++++++++
> arch/arm64/include/asm/kvm_host.h | 19 ++++++++++++++++---
> arch/arm64/kernel/image-vars.h | 15 +++++++++++++++
> 3 files changed, 50 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm64/include/asm/kvm_asm.h
> b/arch/arm64/include/asm/kvm_asm.h
> index 352aaebf4198..6a682d66a640 100644
> --- a/arch/arm64/include/asm/kvm_asm.h
> +++ b/arch/arm64/include/asm/kvm_asm.h
> @@ -42,6 +42,24 @@
>
> #include <linux/mm.h>
>
> +/*
> + * Translate name of a symbol defined in nVHE hyp to the name seen
> + * by kernel proper. All nVHE symbols are prefixed by the build system
> + * to avoid clashes with the VHE variants.
> + */
> +#define kvm_nvhe_sym(sym) __kvm_nvhe_##sym
> +
> +#define DECLARE_KVM_VHE_SYM(sym) extern char sym[]
> +#define DECLARE_KVM_NVHE_SYM(sym) extern char kvm_nvhe_sym(sym)[]
> +
> +/*
> + * Define a pair of symbols sharing the same name but one defined in
> + * VHE and the other in nVHE hyp implementations.
> + */
> +#define DECLARE_KVM_HYP_SYM(sym) \
> + DECLARE_KVM_VHE_SYM(sym); \
> + DECLARE_KVM_NVHE_SYM(sym)
> +
> /* Translate a kernel address of @sym into its equivalent linear
> mapping */
> #define kvm_ksym_ref(sym) \
> ({ \
> @@ -50,6 +68,7 @@
> val = lm_alias(&sym); \
> val; \
> })
> +#define kvm_ksym_ref_nvhe(sym) kvm_ksym_ref(kvm_nvhe_sym(sym))
>
> struct kvm;
> struct kvm_vcpu;
> diff --git a/arch/arm64/include/asm/kvm_host.h
> b/arch/arm64/include/asm/kvm_host.h
> index c3e6fcc664b1..e782f98243d3 100644
> --- a/arch/arm64/include/asm/kvm_host.h
> +++ b/arch/arm64/include/asm/kvm_host.h
> @@ -448,6 +448,20 @@ void kvm_arm_resume_guest(struct kvm *kvm);
>
> u64 __kvm_call_hyp(void *hypfn, ...);
>
> +#define kvm_call_hyp_nvhe(f, ...) \
> + do { \
> + DECLARE_KVM_NVHE_SYM(f); \
I wanted to move this out to __kvm_call_hyp, but the nVHE ssbs code
got in the way... Oh well.
> + __kvm_call_hyp(kvm_ksym_ref_nvhe(f), ##__VA_ARGS__); \
> + } while(0)
> +
> +#define kvm_call_hyp_nvhe_ret(f, ...) \
> + ({ \
> + DECLARE_KVM_NVHE_SYM(f); \
> + typeof(f(__VA_ARGS__)) ret; \
> + ret = __kvm_call_hyp(kvm_ksym_ref_nvhe(f), \
> + ##__VA_ARGS__); \
You don't need to redefine ret here. actually, you can just evaluate
the expression and let C do its magic:
diff --git a/arch/arm64/include/asm/kvm_host.h
b/arch/arm64/include/asm/kvm_host.h
index e782f98243d3..49d1a5cd8f8f 100644
--- a/arch/arm64/include/asm/kvm_host.h
+++ b/arch/arm64/include/asm/kvm_host.h
@@ -457,9 +457,7 @@ u64 __kvm_call_hyp(void *hypfn, ...);
#define kvm_call_hyp_nvhe_ret(f, ...) \
({ \
DECLARE_KVM_NVHE_SYM(f); \
- typeof(f(__VA_ARGS__)) ret; \
- ret = __kvm_call_hyp(kvm_ksym_ref_nvhe(f), \
- ##__VA_ARGS__); \
+ __kvm_call_hyp(kvm_ksym_ref_nvhe(f), ##__VA_ARGS__); \
})
/*
> + })
> +
> /*
> * The couple of isb() below are there to guarantee the same behaviour
> * on VHE as on !VHE, where the eret to EL1 acts as a context
> @@ -459,7 +473,7 @@ u64 __kvm_call_hyp(void *hypfn, ...);
> f(__VA_ARGS__); \
> isb(); \
> } else { \
> - __kvm_call_hyp(kvm_ksym_ref(f), ##__VA_ARGS__); \
> + kvm_call_hyp_nvhe(f, ##__VA_ARGS__); \
> } \
> } while(0)
>
> @@ -471,8 +485,7 @@ u64 __kvm_call_hyp(void *hypfn, ...);
> ret = f(__VA_ARGS__); \
> isb(); \
> } else { \
> - ret = __kvm_call_hyp(kvm_ksym_ref(f), \
> - ##__VA_ARGS__); \
> + ret = kvm_call_hyp_nvhe_ret(f, ##__VA_ARGS__); \
> } \
> \
> ret; \
> diff --git a/arch/arm64/kernel/image-vars.h
> b/arch/arm64/kernel/image-vars.h
> index f32b406e90c0..89affa38b143 100644
> --- a/arch/arm64/kernel/image-vars.h
> +++ b/arch/arm64/kernel/image-vars.h
> @@ -61,6 +61,21 @@ __efistub__ctype = _ctype;
> * memory mappings.
> */
>
> +__kvm_nvhe___kvm_enable_ssbs = __kvm_enable_ssbs;
> +__kvm_nvhe___kvm_flush_vm_context = __kvm_flush_vm_context;
> +__kvm_nvhe___kvm_get_mdcr_el2 = __kvm_get_mdcr_el2;
> +__kvm_nvhe___kvm_timer_set_cntvoff = __kvm_timer_set_cntvoff;
> +__kvm_nvhe___kvm_tlb_flush_local_vmid = __kvm_tlb_flush_local_vmid;
> +__kvm_nvhe___kvm_tlb_flush_vmid = __kvm_tlb_flush_vmid;
> +__kvm_nvhe___kvm_tlb_flush_vmid_ipa = __kvm_tlb_flush_vmid_ipa;
> +__kvm_nvhe___kvm_vcpu_run_nvhe = __kvm_vcpu_run_nvhe;
> +__kvm_nvhe___vgic_v3_get_ich_vtr_el2 = __vgic_v3_get_ich_vtr_el2;
> +__kvm_nvhe___vgic_v3_init_lrs = __vgic_v3_init_lrs;
> +__kvm_nvhe___vgic_v3_read_vmcr = __vgic_v3_read_vmcr;
> +__kvm_nvhe___vgic_v3_restore_aprs = __vgic_v3_restore_aprs;
> +__kvm_nvhe___vgic_v3_save_aprs = __vgic_v3_save_aprs;
> +__kvm_nvhe___vgic_v3_write_vmcr = __vgic_v3_write_vmcr;
> +
> #endif /* CONFIG_KVM */
>
> #endif /* __ARM64_KERNEL_IMAGE_VARS_H */
Otherwise looks good.
Thanks,
M.
--
Jazz is not dead. It just smells funny...
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-06-18 16:51 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-18 12:25 [PATCH v3 00/15] Split off nVHE hyp code David Brazdil
2020-06-18 12:25 ` [PATCH v3 01/15] arm64: kvm: Fix symbol dependency in __hyp_call_panic_nvhe David Brazdil
2020-06-18 12:25 ` [PATCH v3 02/15] arm64: kvm: Move __smccc_workaround_1_smc to .rodata David Brazdil
2020-06-18 13:57 ` Marc Zyngier
2020-06-19 9:51 ` David Brazdil
2020-06-19 10:06 ` Marc Zyngier
2020-06-18 12:25 ` [PATCH v3 03/15] arm64: kvm: Add build rules for separate nVHE object files David Brazdil
2020-06-18 16:34 ` Marc Zyngier
2020-06-19 12:11 ` David Brazdil
2020-06-18 12:25 ` [PATCH v3 04/15] arm64: kvm: Handle calls to prefixed hyp functions David Brazdil
2020-06-18 16:51 ` Marc Zyngier [this message]
2020-06-18 12:25 ` [PATCH v3 05/15] arm64: kvm: Build hyp-entry.S separately for VHE/nVHE David Brazdil
2020-06-18 17:17 ` Marc Zyngier
[not found] ` <20200622102041.myve2otyoj5q7j5s@google.com>
2020-06-25 8:12 ` Marc Zyngier
2020-06-25 11:53 ` David Brazdil
2020-06-18 12:25 ` [PATCH v3 06/15] arm64: kvm: Move hyp-init.S to nVHE David Brazdil
2020-06-18 12:25 ` [PATCH v3 07/15] arm64: kvm: Split hyp/tlb.c to VHE/nVHE David Brazdil
2020-06-19 8:28 ` Marc Zyngier
2020-06-18 12:25 ` [PATCH v3 08/15] arm64: kvm: Split hyp/switch.c " David Brazdil
2020-06-18 19:52 ` kernel test robot
2020-06-25 5:03 ` kernel test robot
2020-06-25 8:16 ` Marc Zyngier
2020-06-25 8:34 ` Will Deacon
2020-06-25 18:26 ` Nick Desaulniers
2020-06-25 16:37 ` Luc Van Oostenryck
2020-06-25 17:55 ` Ard Biesheuvel
2020-06-18 12:25 ` [PATCH v3 09/15] arm64: kvm: Split hyp/debug-sr.c " David Brazdil
2020-06-18 12:25 ` [PATCH v3 10/15] arm64: kvm: Split hyp/sysreg-sr.c " David Brazdil
2020-06-18 12:25 ` [PATCH v3 11/15] arm64: kvm: Split hyp/timer-sr.c " David Brazdil
2020-06-18 12:25 ` [PATCH v3 12/15] arm64: kvm: Compile remaining hyp/ files for both VHE/nVHE David Brazdil
2020-06-18 12:25 ` [PATCH v3 13/15] arm64: kvm: Add comments around __kvm_nvhe_ symbol aliases David Brazdil
2020-06-18 12:25 ` [PATCH v3 14/15] arm64: kvm: Remove __hyp_text macro, use build rules instead David Brazdil
2020-06-18 12:25 ` [PATCH v3 15/15] arm64: kvm: Lift instrumentation restrictions on VHE David Brazdil
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=a31b7ee9ad1edaa38aa122ac90cc605c@kernel.org \
--to=maz@kernel.org \
--cc=android-kvm@google.com \
--cc=ascull@google.com \
--cc=catalin.marinas@arm.com \
--cc=dbrazdil@google.com \
--cc=james.morse@arm.com \
--cc=julien.thierry.kdev@gmail.com \
--cc=kernel-team@android.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=suzuki.poulose@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).