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.
This commit is contained in:
Eugene Syromyatnikov 2018-02-08 11:09:01 +01:00 committed by Dmitry V. Levin
parent e87c073ecc
commit c2bacdd427

View 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;