]> granicus.if.org Git - strace/commitdiff
tests/membarrier.c: fix expected output on nohz_full systems
authorEugene Syromyatnikov <evgsyr@gmail.com>
Thu, 8 Feb 2018 10:09:01 +0000 (11:09 +0100)
committerDmitry V. Levin <ldv@altlinux.org>
Fri, 9 Feb 2018 01:16:13 +0000 (01:16 +0000)
If nohz_full is enabled, MEMBARRIER_CMD_GLOBAL is not available.

* tests/membarrier.c: check availability of MEMBARRIER_CMD_GLOBAL
separately.

tests/membarrier.c

index f195063f11bb61fb762c1856b4379ca64a303b6e..9c76be5f6f56f3d51b35204f3fab3e51ce214f0a 100644 (file)
@@ -44,34 +44,35 @@ main(void)
        printf("membarrier(0x3 /* MEMBARRIER_CMD_??? */, 255) = %s\n",
               sprintrc(-1));
        if (saved_errno != ENOSYS) {
+               const char *text_global;
                const char *text;
                int rc = syscall(__NR_membarrier, 0, 0);
 
-               switch (rc) {
-               case 1:
-                       text = "MEMBARRIER_CMD_GLOBAL";
+               assert(rc >= 0);
+
+               text_global = rc & 1 ? "MEMBARRIER_CMD_GLOBAL" : "";
+
+               switch (rc & ~1) {
+               case 0:
+                       text = "";
                        break;
-               case 1|8:
-                       text = "MEMBARRIER_CMD_GLOBAL|"
-                              "MEMBARRIER_CMD_PRIVATE_EXPEDITED";
+               case 8:
+                       text = "MEMBARRIER_CMD_PRIVATE_EXPEDITED";
                        break;
-               case 1|8|16:
-                       text = "MEMBARRIER_CMD_GLOBAL|"
-                              "MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
+               case 8|16:
+                       text = "MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
                               "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED";
                        break;
 
-               case 1|2|4|8|16:
-                       text = "MEMBARRIER_CMD_GLOBAL|"
-                              "MEMBARRIER_CMD_GLOBAL_EXPEDITED|"
+               case 2|4|8|16:
+                       text = "MEMBARRIER_CMD_GLOBAL_EXPEDITED|"
                               "MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED|"
                               "MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
                               "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED";
                        break;
 
-               case 1|2|4|8|16|32|64:
-                       text = "MEMBARRIER_CMD_GLOBAL|"
-                              "MEMBARRIER_CMD_GLOBAL_EXPEDITED|"
+               case 2|4|8|16|32|64:
+                       text = "MEMBARRIER_CMD_GLOBAL_EXPEDITED|"
                               "MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED|"
                               "MEMBARRIER_CMD_PRIVATE_EXPEDITED|"
                               "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED|"
@@ -83,8 +84,9 @@ main(void)
                        error_msg_and_fail("membarrier returned %#x, does"
                                           " the test have to be updated?", rc);
                }
-               printf("membarrier(MEMBARRIER_CMD_QUERY, 0) = %#x (%s)\n",
-                      rc, text);
+               printf("membarrier(MEMBARRIER_CMD_QUERY, 0) = %#x (%s%s%s)\n",
+                      rc, text_global, text[0] && text_global[0] ? "|" : "",
+                      text);
        }
        puts("+++ exited with 0 +++");
        return 0;