From: Mathieu Desnoyers Date: Mon, 17 Jan 2022 19:10:15 +0000 (-0500) Subject: Test for membarrier private expedited rseq availability X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=d4bff8eda32f9da4ed417b9b329713da5bd2edd4;p=librseq.git Test for membarrier private expedited rseq availability Signed-off-by: Mathieu Desnoyers Change-Id: Ib24ee6e84f2614b614650f391e7312121f26ab17 --- diff --git a/tests/param_test.c b/tests/param_test.c index e71e92c..a273b9d 100644 --- a/tests/param_test.c +++ b/tests/param_test.c @@ -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"); }