Test for membarrier private expedited rseq availability
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 17 Jan 2022 19:10:15 +0000 (14:10 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 17 Jan 2022 19:10:15 +0000 (14:10 -0500)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ib24ee6e84f2614b614650f391e7312121f26ab17

tests/param_test.c

index e71e92c82b1b39e00c720a618f98c7b1219cae53..a273b9da82f4f20c472a1853068b0d1d5cb7fb52 100644 (file)
@@ -1310,6 +1310,20 @@ void *test_membarrier_manager_thread(void *arg)
        return NULL;
 }
 
+static
+bool membarrier_private_expedited_rseq_available(void)
+{
+       int status = sys_membarrier(MEMBARRIER_CMD_QUERY, 0, 0);
+
+       if (status < 0) {
+               perror("membarrier");
+               return false;
+       }
+       if (!(status & MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ))
+               return false;
+       return true;
+}
+
 static
 void test_membarrier(void)
 {
@@ -1319,6 +1333,11 @@ void test_membarrier(void)
        pthread_t manager_thread;
        int i, ret;
 
+       if (!membarrier_private_expedited_rseq_available()) {
+               fprintf(stderr, "Membarrier private expedited rseq not available. "
+                               "Skipping membarrier test.\n");
+               return;
+       }
        if (sys_membarrier(MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ, 0, 0)) {
                perror("sys_membarrier");
                abort();
@@ -1366,6 +1385,11 @@ void test_membarrier(void)
 static
 void test_membarrier(void)
 {
+       if (!membarrier_private_expedited_rseq_available()) {
+               fprintf(stderr, "Membarrier private expedited rseq not available. "
+                               "Skipping membarrier test.\n");
+               return;
+       }
        fprintf(stderr, "rseq_offset_deref_addv is not implemented on this architecture. "
                        "Skipping membarrier test.\n");
 }
This page took 0.037436 seconds and 4 git commands to generate.