Fix membarrier test.

Some older kernels do not support all membarrier commands. For example,
the 4.9.x kernel only supports MEMBARRIER_CMD_QUERY and MEMBARRIER_CMD_SHARED.

Test: Ran unit tests on hikey.
Change-Id: I5d4b93df6aa5f443c4700e8f7d33f46953f74e87
diff --git a/tests/membarrier_test.cpp b/tests/membarrier_test.cpp
index 4c58d30..74c8ed2 100644
--- a/tests/membarrier_test.cpp
+++ b/tests/membarrier_test.cpp
@@ -28,9 +28,9 @@
   ~ScopedErrnoCleaner() { errno = 0; }
 };
 
-bool HasMembarrier() {
+bool HasMembarrier(int membarrier_cmd) {
   ScopedErrnoCleaner errno_cleaner;
-  bool present = syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0) > 0;
+  bool present = syscall(__NR_membarrier, membarrier_cmd, 0) > 0;
   return present;
 }
 
@@ -45,7 +45,8 @@
 }
 
 TEST(membarrier, global_barrier) {
-  if (!HasMembarrier()) {
+  if (!HasMembarrier(MEMBARRIER_CMD_GLOBAL)) {
+    GTEST_LOG_(INFO) << "MEMBARRIER_CMD_GLOBAL not supported, skipping test.";
     return;
   }
 
@@ -58,9 +59,39 @@
   }
 }
 
+static const char* MembarrierCommandToName(int membarrier_cmd) {
+  switch (membarrier_cmd) {
+  case MEMBARRIER_CMD_QUERY:
+    return "MEMBARRIER_CMD_QUERY";
+  case MEMBARRIER_CMD_GLOBAL:
+    return "MEMBARRIER_CMD_GLOBAL";
+  case MEMBARRIER_CMD_GLOBAL_EXPEDITED:
+    return "MEMBARRIER_CMD_GLOBAL_EXPEDITED";
+  case MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED:
+    return "MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED";
+  case MEMBARRIER_CMD_PRIVATE_EXPEDITED:
+    return "MEMBARRIER_CMD_PRIVATE_EXPEDITED";
+  case MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED:
+    return "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED";
+  case MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE:
+    return "MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE";
+  case MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE:
+    return "MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE";
+  default:
+    return "MEMBARRIER_UNKNOWN";
+  }
+}
+
 static void TestRegisterAndBarrierCommands(int membarrier_cmd_register,
                                            int membarrier_cmd_barrier) {
-  if (!HasMembarrier()) {
+  if (!HasMembarrier(membarrier_cmd_register)) {
+    GTEST_LOG_(INFO) << MembarrierCommandToName(membarrier_cmd_register)
+        << " not supported, skipping test.";
+    return;
+  }
+  if (!HasMembarrier(membarrier_cmd_barrier)) {
+    GTEST_LOG_(INFO) << MembarrierCommandToName(membarrier_cmd_barrier)
+        << " not supported, skipping test.";
     return;
   }