Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/membarrier: Test MEMBARRIER_CMD_GET_REGISTRATIONS

Keep track of previously issued registrations and compare the result
with MEMBARRIER_CMD_GET_REGISTRATIONS return value.

Signed-off-by: Michal Clapinski <mclapinski@google.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Acked-by: Paul E. McKenney <paulmck@kernel.org>
Link: https://lore.kernel.org/r/20221207164338.1535591-3-mclapinski@google.com

authored by

Michal Clapinski and committed by
Ingo Molnar
d74f87f3 544a4f2e

+39 -2
+33
tools/testing/selftests/membarrier/membarrier_test_impl.h
··· 9 9 10 10 #include "../kselftest.h" 11 11 12 + static int registrations; 13 + 12 14 static int sys_membarrier(int cmd, int flags) 13 15 { 14 16 return syscall(__NR_membarrier, cmd, flags); 17 + } 18 + 19 + static int test_membarrier_get_registrations(int cmd) 20 + { 21 + int ret, flags = 0; 22 + const char *test_name = 23 + "sys membarrier MEMBARRIER_CMD_GET_REGISTRATIONS"; 24 + 25 + registrations |= cmd; 26 + 27 + ret = sys_membarrier(MEMBARRIER_CMD_GET_REGISTRATIONS, 0); 28 + if (ret < 0) { 29 + ksft_exit_fail_msg( 30 + "%s test: flags = %d, errno = %d\n", 31 + test_name, flags, errno); 32 + } else if (ret != registrations) { 33 + ksft_exit_fail_msg( 34 + "%s test: flags = %d, ret = %d, registrations = %d\n", 35 + test_name, flags, ret, registrations); 36 + } 37 + ksft_test_result_pass( 38 + "%s test: flags = %d, ret = %d, registrations = %d\n", 39 + test_name, flags, ret, registrations); 40 + 41 + return 0; 15 42 } 16 43 17 44 static int test_membarrier_cmd_fail(void) ··· 140 113 ksft_test_result_pass( 141 114 "%s test: flags = %d\n", 142 115 test_name, flags); 116 + 117 + test_membarrier_get_registrations(cmd); 143 118 return 0; 144 119 } 145 120 ··· 199 170 ksft_test_result_pass( 200 171 "%s test: flags = %d\n", 201 172 test_name, flags); 173 + 174 + test_membarrier_get_registrations(cmd); 202 175 return 0; 203 176 } 204 177 ··· 235 204 ksft_test_result_pass( 236 205 "%s test: flags = %d\n", 237 206 test_name, flags); 207 + 208 + test_membarrier_get_registrations(cmd); 238 209 return 0; 239 210 } 240 211
+1 -1
tools/testing/selftests/membarrier/membarrier_test_multi_thread.c
··· 62 62 int main(int argc, char **argv) 63 63 { 64 64 ksft_print_header(); 65 - ksft_set_plan(13); 65 + ksft_set_plan(16); 66 66 67 67 test_membarrier_query(); 68 68
+5 -1
tools/testing/selftests/membarrier/membarrier_test_single_thread.c
··· 12 12 int main(int argc, char **argv) 13 13 { 14 14 ksft_print_header(); 15 - ksft_set_plan(13); 15 + ksft_set_plan(18); 16 + 17 + test_membarrier_get_registrations(/*cmd=*/0); 16 18 17 19 test_membarrier_query(); 18 20 19 21 test_membarrier_fail(); 20 22 21 23 test_membarrier_success(); 24 + 25 + test_membarrier_get_registrations(/*cmd=*/0); 22 26 23 27 return ksft_exit_pass(); 24 28 }