[PATCH v3 07/42] arm64/sve: Put system wide vector length information into structs
Catalin Marinas
catalin.marinas at arm.com
Fri Oct 22 04:23:20 PDT 2021
On Tue, Oct 19, 2021 at 06:22:12PM +0100, Mark Brown wrote:
> diff --git a/arch/arm64/include/asm/fpsimd.h b/arch/arm64/include/asm/fpsimd.h
> index d164e2f35837..5a1f79a4a500 100644
> --- a/arch/arm64/include/asm/fpsimd.h
> +++ b/arch/arm64/include/asm/fpsimd.h
> @@ -77,10 +77,6 @@ extern void sve_kernel_enable(const struct arm64_cpu_capabilities *__unused);
>
> extern u64 read_zcr_features(void);
>
> -extern int __ro_after_init sve_max_vl;
> -extern int __ro_after_init sve_max_virtualisable_vl;
> -extern __ro_after_init DECLARE_BITMAP(sve_vq_map, SVE_VQ_MAX);
> -
> /*
> * Helpers to translate bit indices in sve_vq_map to VQ values (and
> * vice versa). This allows find_next_bit() to be used to find the
[...]
> @@ -139,11 +151,63 @@ static inline void sve_user_enable(void)
[...]
> +static inline int sve_max_virtualisable_vl(void)
> +{
> + return vec_max_virtualisable_vl(ARM64_VEC_SVE);
> +}
With this change, sve_max_virtualisable_vl() is only defined if
CONFIG_ARM64_SVE is enabled but it's still referenced from
kvm_arm_init_sve() and kvm_vcpu_finalize_sve(), so the build fails if
SVE is disabled.
> +static struct vl_config vl_config[ARM64_VEC_MAX];
> +
> +static int get_default_vl(enum vec_type type)
> +{
> + return READ_ONCE(vl_config[type].__default_vl);
> +}
>
> static int get_sve_default_vl(void)
> {
> - return READ_ONCE(__sve_default_vl);
> + return get_default_vl(ARM64_VEC_SVE);
> }
>
> #ifdef CONFIG_ARM64_SVE
I think after patch 9 I think I also get a warning on
get_sve_default_vl() defined but not used when SVE is disabled. Maybe
move the #ifdef higher but also make these static inline.
>
> -static void set_sve_default_vl(int val)
> +static void set_default_vl(enum vec_type type, int val)
> {
> - WRITE_ONCE(__sve_default_vl, val);
> + WRITE_ONCE(vl_config[type].__default_vl, val);
> }
Same here, it should probably be static inline.
>
> -/* Maximum supported vector length across all CPUs (initially poisoned) */
> -int __ro_after_init sve_max_vl = SVE_VL_MIN;
> -int __ro_after_init sve_max_virtualisable_vl = SVE_VL_MIN;
> -
> -/*
> - * Set of available vector lengths,
> - * where length vq encoded as bit __vq_to_bit(vq):
> - */
> -__ro_after_init DECLARE_BITMAP(sve_vq_map, SVE_VQ_MAX);
> -/* Set of vector lengths present on at least one cpu: */
> -static __ro_after_init DECLARE_BITMAP(sve_vq_partial_map, SVE_VQ_MAX);
> +static void set_sve_default_vl(int val)
> +{
> + set_default_vl(ARM64_VEC_SVE, val);
> +}
And here.
--
Catalin
More information about the linux-arm-kernel
mailing list