]>
git.ipfire.org Git - thirdparty/kernel/linux.git/blob - tools/testing/selftests/membarrier/membarrier_test.c
2 #include <linux/membarrier.h>
8 #include "../kselftest.h"
10 static int sys_membarrier(int cmd
, int flags
)
12 return syscall(__NR_membarrier
, cmd
, flags
);
15 static int test_membarrier_cmd_fail(void)
17 int cmd
= -1, flags
= 0;
19 if (sys_membarrier(cmd
, flags
) != -1) {
21 "sys membarrier invalid command test: command = %d, flags = %d. Should fail, but passed\n",
25 ksft_test_result_pass(
26 "sys membarrier invalid command test: command = %d, flags = %d. Failed as expected\n",
31 static int test_membarrier_flags_fail(void)
33 int cmd
= MEMBARRIER_CMD_QUERY
, flags
= 1;
35 if (sys_membarrier(cmd
, flags
) != -1) {
37 "sys membarrier MEMBARRIER_CMD_QUERY invalid flags test: flags = %d. Should fail, but passed\n",
41 ksft_test_result_pass(
42 "sys membarrier MEMBARRIER_CMD_QUERY invalid flags test: flags = %d. Failed as expected\n",
47 static int test_membarrier_success(void)
49 int cmd
= MEMBARRIER_CMD_SHARED
, flags
= 0;
50 const char *test_name
= "sys membarrier MEMBARRIER_CMD_SHARED\n";
52 if (sys_membarrier(cmd
, flags
) != 0) {
54 "sys membarrier MEMBARRIER_CMD_SHARED test: flags = %d\n",
58 ksft_test_result_pass(
59 "sys membarrier MEMBARRIER_CMD_SHARED test: flags = %d\n",
64 static int test_membarrier(void)
68 status
= test_membarrier_cmd_fail();
71 status
= test_membarrier_flags_fail();
74 status
= test_membarrier_success();
80 static int test_membarrier_query(void)
84 ret
= sys_membarrier(MEMBARRIER_CMD_QUERY
, flags
);
86 if (errno
== ENOSYS
) {
88 * It is valid to build a kernel with
89 * CONFIG_MEMBARRIER=n. However, this skips the tests.
92 "sys membarrier (CONFIG_MEMBARRIER) is disabled.\n");
94 ksft_exit_fail_msg("sys_membarrier() failed\n");
96 if (!(ret
& MEMBARRIER_CMD_SHARED
))
97 ksft_exit_fail_msg("sys_membarrier is not supported.\n");
99 ksft_test_result_pass("sys_membarrier available\n");
103 int main(int argc
, char **argv
)
107 test_membarrier_query();