Merge tag 'x86-urgent-2022-04-03' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / tools / testing / selftests / x86 / amx.c
index 3615ef4..2189f03 100644 (file)
@@ -368,9 +368,16 @@ static void req_xtiledata_perm(void)
 
 static void validate_req_xcomp_perm(enum expected_result exp)
 {
-       unsigned long bitmask;
+       unsigned long bitmask, expected_bitmask;
        long rc;
 
+       rc = syscall(SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask);
+       if (rc) {
+               fatal_error("prctl(ARCH_GET_XCOMP_PERM) error: %ld", rc);
+       } else if (!(bitmask & XFEATURE_MASK_XTILECFG)) {
+               fatal_error("ARCH_GET_XCOMP_PERM returns XFEATURE_XTILECFG off.");
+       }
+
        rc = syscall(SYS_arch_prctl, ARCH_REQ_XCOMP_PERM, XFEATURE_XTILEDATA);
        if (exp == FAIL_EXPECTED) {
                if (rc) {
@@ -383,10 +390,15 @@ static void validate_req_xcomp_perm(enum expected_result exp)
                fatal_error("ARCH_REQ_XCOMP_PERM saw unexpected failure.\n");
        }
 
+       expected_bitmask = bitmask | XFEATURE_MASK_XTILEDATA;
+
        rc = syscall(SYS_arch_prctl, ARCH_GET_XCOMP_PERM, &bitmask);
        if (rc) {
                fatal_error("prctl(ARCH_GET_XCOMP_PERM) error: %ld", rc);
-       } else if (bitmask & XFEATURE_MASK_XTILE) {
+       } else if (bitmask != expected_bitmask) {
+               fatal_error("ARCH_REQ_XCOMP_PERM set a wrong bitmask: %lx, expected: %lx.\n",
+                           bitmask, expected_bitmask);
+       } else {
                printf("\tARCH_REQ_XCOMP_PERM is successful.\n");
        }
 }