kselftest/arm64: sme: Add SME support to vlset
authorMark Brown <broonie@kernel.org>
Tue, 19 Apr 2022 11:22:37 +0000 (12:22 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Thu, 28 Apr 2022 16:57:11 +0000 (17:57 +0100)
The Scalable Matrix Extenions (SME) introduces additional register state
with configurable vector lengths, similar to SVE but configured separately.
Extend vlset to support configuring this state with a --sme or -s command
line option.

Signed-off-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Shuah Khan <skhan@linuxfoundation.org>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20220419112247.711548-30-broonie@kernel.org
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
tools/testing/selftests/arm64/fp/vlset.c

index 308d27a68226987cc7063b2479976bcb5d7a144d..76912a581a95fc30a01e041d7499380b0e2d90aa 100644 (file)
@@ -22,12 +22,15 @@ static int inherit = 0;
 static int no_inherit = 0;
 static int force = 0;
 static unsigned long vl;
+static int set_ctl = PR_SVE_SET_VL;
+static int get_ctl = PR_SVE_GET_VL;
 
 static const struct option options[] = {
        { "force",      no_argument, NULL, 'f' },
        { "inherit",    no_argument, NULL, 'i' },
        { "max",        no_argument, NULL, 'M' },
        { "no-inherit", no_argument, &no_inherit, 1 },
+       { "sme",        no_argument, NULL, 's' },
        { "help",       no_argument, NULL, '?' },
        {}
 };
@@ -50,6 +53,9 @@ static int parse_options(int argc, char **argv)
                case 'M':       vl = SVE_VL_MAX; break;
                case 'f':       force = 1; break;
                case 'i':       inherit = 1; break;
+               case 's':       set_ctl = PR_SME_SET_VL;
+                               get_ctl = PR_SME_GET_VL;
+                               break;
                case 0:         break;
                default:        goto error;
                }
@@ -125,14 +131,14 @@ int main(int argc, char **argv)
        if (inherit)
                flags |= PR_SVE_VL_INHERIT;
 
-       t = prctl(PR_SVE_SET_VL, vl | flags);
+       t = prctl(set_ctl, vl | flags);
        if (t < 0) {
                fprintf(stderr, "%s: PR_SVE_SET_VL: %s\n",
                        program_name, strerror(errno));
                goto error;
        }
 
-       t = prctl(PR_SVE_GET_VL);
+       t = prctl(get_ctl);
        if (t == -1) {
                fprintf(stderr, "%s: PR_SVE_GET_VL: %s\n",
                        program_name, strerror(errno));