]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
arm64/sme: Implement sysctl to set the default vector length
authorMark Brown <broonie@kernel.org>
Tue, 19 Apr 2022 11:22:18 +0000 (12:22 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 22 Apr 2022 17:50:52 +0000 (18:50 +0100)
As for SVE provide a sysctl which allows the default SME vector length to
be configured.

Signed-off-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20220419112247.711548-11-broonie@kernel.org
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/fpsimd.c

index 5e5fbd9cba7525d9e93213dae1a15a39265ee101..754a96563f6f8d809de782e9eb6f60b029ad38e2 100644 (file)
@@ -489,6 +489,30 @@ static int __init sve_sysctl_init(void)
 static int __init sve_sysctl_init(void) { return 0; }
 #endif /* ! (CONFIG_ARM64_SVE && CONFIG_SYSCTL) */
 
+#if defined(CONFIG_ARM64_SME) && defined(CONFIG_SYSCTL)
+static struct ctl_table sme_default_vl_table[] = {
+       {
+               .procname       = "sme_default_vector_length",
+               .mode           = 0644,
+               .proc_handler   = vec_proc_do_default_vl,
+               .extra1         = &vl_info[ARM64_VEC_SME],
+       },
+       { }
+};
+
+static int __init sme_sysctl_init(void)
+{
+       if (system_supports_sme())
+               if (!register_sysctl("abi", sme_default_vl_table))
+                       return -EINVAL;
+
+       return 0;
+}
+
+#else /* ! (CONFIG_ARM64_SME && CONFIG_SYSCTL) */
+static int __init sme_sysctl_init(void) { return 0; }
+#endif /* ! (CONFIG_ARM64_SME && CONFIG_SYSCTL) */
+
 #define ZREG(sve_state, vq, n) ((char *)(sve_state) +          \
        (SVE_SIG_ZREG_OFFSET(vq, n) - SVE_SIG_REGS_OFFSET))
 
@@ -1687,6 +1711,9 @@ static int __init fpsimd_init(void)
        if (cpu_have_named_feature(SME) && !cpu_have_named_feature(SVE))
                pr_notice("SME is implemented but not SVE\n");
 
-       return sve_sysctl_init();
+       sve_sysctl_init();
+       sme_sysctl_init();
+
+       return 0;
 }
 core_initcall(fpsimd_init);