From c2bacdd427e44b07160f45f821725441a8284af4 Mon Sep 17 00:00:00 2001 From: Eugene Syromyatnikov Date: Thu, 8 Feb 2018 11:09:01 +0100 Subject: [PATCH 2/2] tests/membarrier.c: fix expected output on nohz_full systems If nohz_full is enabled, MEMBARRIER_CMD_GLOBAL is not available. * tests/membarrier.c: check availability of MEMBARRIER_CMD_GLOBAL separately. --- tests/membarrier.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) [ ES: Also patch files in tests-m32 an tests-mx32 directories ] diff --git a/tests/membarrier.c b/tests/membarrier.c index f195063..9c76be5 100644 --- a/tests/membarrier.c +++ b/tests/membarrier.c @@ -44,34 +44,35 @@ main(void) printf("membarrier(0x3 /* MEMBARRIER_CMD_??? */, 255) = -1 %s (%m)\n", errno2name()); if (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; diff --git a/tests-m32/membarrier.c b/tests-m32/membarrier.c index f195063..9c76be5 100644 --- a/tests-m32/membarrier.c +++ b/tests-m32/membarrier.c @@ -44,34 +44,35 @@ main(void) printf("membarrier(0x3 /* MEMBARRIER_CMD_??? */, 255) = -1 %s (%m)\n", errno2name()); if (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; diff --git a/tests-mx32/membarrier.c b/tests-mx32/membarrier.c index f195063..9c76be5 100644 --- a/tests-mx32/membarrier.c +++ b/tests-mx32/membarrier.c @@ -44,34 +44,35 @@ main(void) printf("membarrier(0x3 /* MEMBARRIER_CMD_??? */, 255) = -1 %s (%m)\n", errno2name()); if (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; -- 2.1.4