arm64/sve: Thin out initialisation sanity-checks for sve_max_vl
authorDave Martin <Dave.Martin@arm.com>
Fri, 1 Jun 2018 10:10:13 +0000 (11:10 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 1 Jun 2018 14:53:07 +0000 (15:53 +0100)
Now that the kernel SVE support is reasonably mature, it is
excessive to default sve_max_vl to the invalid value -1 and then
sprinkle WARN_ON()s around the place to make sure it has been
initialised before use.  The cpufeatures code already runs pretty
early, and will ensure sve_max_vl gets initialised.

This patch initialises sve_max_vl to something sane that will be
supported by every SVE implementation, and removes most of the
sanity checks.

The checks in find_supported_vector_length() are retained for now.
If anything goes horribly wrong, we are likely to trip a check here
sooner or later.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/fpsimd.c
arch/arm64/kernel/ptrace.c

index 3db8ed5..d15f38a 100644 (file)
@@ -128,7 +128,7 @@ static int sve_default_vl = -1;
 #ifdef CONFIG_ARM64_SVE
 
 /* Maximum supported vector length across all CPUs (initially poisoned) */
-int __ro_after_init sve_max_vl = -1;
+int __ro_after_init sve_max_vl = SVE_VL_MIN;
 /* Set of available vector lengths, as vq_to_bit(vq): */
 static __ro_after_init DECLARE_BITMAP(sve_vq_map, SVE_VQ_MAX);
 static void __percpu *efi_sve_state;
@@ -359,22 +359,13 @@ static int sve_proc_do_default_vl(struct ctl_table *table, int write,
                return ret;
 
        /* Writing -1 has the special meaning "set to max": */
-       if (vl == -1) {
-               /* Fail safe if sve_max_vl wasn't initialised */
-               if (WARN_ON(!sve_vl_valid(sve_max_vl)))
-                       vl = SVE_VL_MIN;
-               else
-                       vl = sve_max_vl;
-
-               goto chosen;
-       }
+       if (vl == -1)
+               vl = sve_max_vl;
 
        if (!sve_vl_valid(vl))
                return -EINVAL;
 
-       vl = find_supported_vector_length(vl);
-chosen:
-       sve_default_vl = vl;
+       sve_default_vl = find_supported_vector_length(vl);
        return 0;
 }
 
index f847285..bd73264 100644 (file)
@@ -766,9 +766,6 @@ static void sve_init_header_from_task(struct user_sve_header *header,
        vq = sve_vq_from_vl(header->vl);
 
        header->max_vl = sve_max_vl;
-       if (WARN_ON(!sve_vl_valid(sve_max_vl)))
-               header->max_vl = header->vl;
-
        header->size = SVE_PT_SIZE(vq, header->flags);
        header->max_size = SVE_PT_SIZE(sve_vq_from_vl(header->max_vl),
                                      SVE_PT_REGS_SVE);