syscalls/membarrier: Add membarrier() initial test
PATCH 1/1 syscalls/membarrier: Add membarrier() initial test
Initial test for membarrier() syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.
Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
--- runtest/syscalls | 2 + .../kernel/syscalls/membarrier/.gitignore | 1 + testcases/kernel/syscalls/membarrier/Makefile | 8 + .../kernel/syscalls/membarrier/membarrier01.c | 337 ++++++++++++++++++ 4 files changed, 348 insertions(+) create mode 100644 testcases/kernel/syscalls/membarrier/.gitignore create mode 100644 testcases/kernel/syscalls/membarrier/Makefile create mode 100644 testcases/kernel/syscalls/membarrier/membarrier01.c
runtest/syscalls +2 -0
@@ -1504,3 +1504,5 @@ statx02 statx02 statx03 statx03 statx04 statx04 statx05 statx05 + +membarrier01 membarrier01
testcases/kernel/syscalls/membarrier/.gitignore new file +1 -0
@@ -0,0 +1 @@ +/membarrier01
testcases/kernel/syscalls/membarrier/Makefile new file +8 -0
@@ -0,0 +1,8 @@ +# Copyright (c) 2018 - Linaro Limited. All rights reserved. +# SPDX-License-Identifier: GPL-2.0-or-later + +top_srcdir ?= ../../../.. + +include $(top_srcdir)/include/mk/testcases.mk + +include $(top_srcdir)/include/mk/generic_leaf_target.mk
testcases/kernel/syscalls/membarrier/membarrier01.c new file +337 -0
337 lines not on this page · raw message
Signature · 1 line
2.19.0.rc2
PATCH 1/1 syscalls/membarrier: Add membarrier() initial test
Quoted 6 lines · Rafael David Tinoco
Fixes #265Initial test for
membarrier()syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.
Quoted 8 lines
Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
Signed-off-by Rafael David Tinoco <[email protected]>---
membarrier01 test output for 2 iterations on different kernel versions, considering behavior is changed depending on membarrier(2) feature supportability.
#### 4.4
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:284: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:321: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:284: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:284: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:321: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:284: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:321: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:284: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:284: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:321: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
#### 4.9
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:284: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:321: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:284: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:284: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:321: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:284: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:321: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:284: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:284: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:321: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
#### 4.14
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:302: PASS: membarrier(2): cmd_private_expedited_fail failed as expected
membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_register_success passed membarrier01.c:296: PASS: membarrier(2): cmd_private_expedited_success passed
membarrier01.c:284: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:284: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:321: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:302: PASS: membarrier(2): cmd_private_expedited_fail failed as expected
membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_register_success passed membarrier01.c:296: PASS: membarrier(2): cmd_private_expedited_success passed
membarrier01.c:284: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:284: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:321: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:321: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
#### 4.16
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:302: PASS: membarrier(2): cmd_private_expedited_fail failed as expected
membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_register_success passed membarrier01.c:296: PASS: membarrier(2): cmd_private_expedited_success passed
membarrier01.c:302: PASS: membarrier(2):cmd_private_expedited_sync_core_fail failed as expected membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success passed membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_success passed membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed membarrier01.c:296: PASS: membarrier(2):cmd_global_expedited_register_success passed
membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:302: PASS: membarrier(2): cmd_private_expedited_fail failed as expected
membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_register_success passed membarrier01.c:296: PASS: membarrier(2): cmd_private_expedited_success passed
membarrier01.c:302: PASS: membarrier(2):cmd_private_expedited_sync_core_fail failed as expected membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success passed membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_success passed membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed membarrier01.c:296: PASS: membarrier(2):cmd_global_expedited_register_success passed
membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed
Summary:
passed 12 failed 0 skipped 0
warnings 0
#### 4.17
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:302: PASS: membarrier(2): cmd_private_expedited_fail failed as expected
membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_register_success passed membarrier01.c:296: PASS: membarrier(2): cmd_private_expedited_success passed
membarrier01.c:302: PASS: membarrier(2):cmd_private_expedited_sync_core_fail failed as expected membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success passed membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_success passed membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed membarrier01.c:296: PASS: membarrier(2):cmd_global_expedited_register_success passed
membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:302: PASS: membarrier(2): cmd_private_expedited_fail failed as expected
membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_register_success passed membarrier01.c:296: PASS: membarrier(2): cmd_private_expedited_success passed
membarrier01.c:302: PASS: membarrier(2):cmd_private_expedited_sync_core_fail failed as expected membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success passed membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_success passed membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed membarrier01.c:296: PASS: membarrier(2):cmd_global_expedited_register_success passed
membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed
Summary:
passed 12 failed 0 skipped 0
warnings 0
#### 4.18
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:302: PASS: membarrier(2): cmd_private_expedited_fail failed as expected
membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_register_success passed membarrier01.c:296: PASS: membarrier(2): cmd_private_expedited_success passed
membarrier01.c:302: PASS: membarrier(2):cmd_private_expedited_sync_core_fail failed as expected membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success passed membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_success passed membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed membarrier01.c:296: PASS: membarrier(2):cmd_global_expedited_register_success passed
membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:302: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:302: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:296: PASS: membarrier(2): cmd_global_success passed membarrier01.c:302: PASS: membarrier(2): cmd_private_expedited_fail failed as expected
membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_register_success passed membarrier01.c:296: PASS: membarrier(2): cmd_private_expedited_success passed
membarrier01.c:302: PASS: membarrier(2):cmd_private_expedited_sync_core_fail failed as expected membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success passed membarrier01.c:296: PASS: membarrier(2):cmd_private_expedited_sync_core_success passed membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed membarrier01.c:296: PASS: membarrier(2):cmd_global_expedited_register_success passed
membarrier01.c:296: PASS: membarrier(2): cmd_global_expedited_success passed
Summary:
passed 12 failed 0 skipped 0
warnings 0
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.linux.it/pipermail/ltp/attachments/20180927/2858cd9d/attachment-0001.html>
PATCH 1/1 syscalls/membarrier: Add membarrier() initial test
In reply to Rafael David TinocoHi,
----- Original Message -----
Quoted 48 lines
Fixes: #265
+/*
+ * Basic tests for membarrier(2) syscall. Tests bellow are responsible for
+ * testing the membarrier(2) interface only, without checking if the barrier was
+ * successful or not.
+ *
+ * There are 11 test cases:
+ *
+ * 00) invalid cmd:
+ * - enabled by default
+ * - should always fail with EINVAL
+ * 01) invalid flags:
+ * - enabled by default
+ * - should always fail with EINVAL
+ * ----
+ * 02) global barrier:
+ * - ALWAYS enabled byCMD_QUERY
+ * - should always succeed
+ * ----
+ * commit22e4ebb975(v4.14-rc1) added following feature:
+ *
+ * 03) private expedited barrier with no registrations:
+ * - should fail with errno=EPERM due to no registrations
+ * - or be skipped if unsupported by running kernel
+ * 04) register private expedited
+ * - should succeed when supported by running kernel
+ * - or fail with errno=EINVAL if unsupported and forced
+ * 05) private expedited barrier with registration
+ * - should succeed due to existing registration (case 04)
+ * - or fail with errno=EINVAL if unsupported and forced
+ * - NOTE: if unsupported, and forced, on < 4.10, errno is EINVAL
+ * ----
+ * commit70216e18e5(v4.16-rc1) added following feature:
+ *
+ * 06) private expedited sync core barrier with no registrations
+ * - should fail with errno=EPERM due to no registrations
+ * - or be skipped if unsupported by running kernel
+ * 07) register private expedited sync core
+ * - should succeed when supported by running kernel
+ * - or fail with errno=EINVAL if unsupported and forced
+ * 08) private expedited sync core barrier with registration
+ * - should succeed due to existing registration (case 07)
+ * - or fail with errno=EINVAL if unsupported and forced
+ * ----
+ * commitc5f58bd58f4(v4.16-rc1) added following feature:
+ *
+ * 09) global expedited barrier with no registrations
Quoted 8 lines
+ * - should never fail due to no registrations
+ * - or be skipped if unsupported by running kernel
+ * 10) register global expedited
+ * - should succeed when supported by running kernel
+ * - or fail with errno=EINVAL if unsupported and forced
+ * 11) global expedited barrier with registration
+ * - should succeed due to existing registration (case 10) or not
+ * - or fail with errno=EINVAL if unsupported and forced
I'd move these comments to test_case array. Because your cases depend on each other, it'd be good to have description there.
Quoted 4 lines
+ * ----
+ * OBSERVATION:
+ *
+ * Linux kernel does not provide a way to unregister (mm->membarrier_state)
This breaks -i parameter, maybe fork a child?
testcases/kernel/syscalls/membarrier/membarrier01.c line 72
Quoted 9 lines
the
+ * process intent of being affected by the membarrier(2) call.
+ */testcases/kernel/syscalls/membarrier/membarrier01.c new file +6
-0+ +#include "config.h" +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <linux/membarrier.h>
Including linux headers directly is discouraged.
This breaks compilation on older distros:
membarrier01.c:72:30: error: linux/membarrier.h: No such file or directory
So we either need lapi header or configure check.
Quoted 9 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +9
-0+#include <syscall.h> +#include <errno.h> +#include <fcntl.h> +#include <unistd.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "tst_test.h"
<snip>
Quoted 4 lines
static int
sys_membarrier(int cmd, int flags){ return syscall(__NR_membarrier, cmd, flags); }
Needs syscall define in lapi/syscalls:
membarrier01.c:146: error: ‘__NR_membarrier’ undeclared (first use in this function)
testcases/kernel/syscalls/membarrier/membarrier01.c line 164
Quoted 5 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +5
-0+ +struct test_case tc[] = { + { +/* case 00 */ + .testname ="cmd_fail\0" ,
string literals already contain null terminating character
Quoted 90 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +90
-0+ .command = -1, + .exp_ret = -1, + .exp_errno = EINVAL, + .enabled = 1, + }, + { + /* case 01 */ + .testname = "cmd_flags_fail\0", + .command = MEMBARRIER_CMD_QUERY, + .flags = 1, + .exp_ret = -1, + .exp_errno = EINVAL, + .enabled = 1, + }, + { + /* case 02 */ + .testname = "cmd_global_success\0", + .command = MEMBARRIER_CMD_GLOBAL, + .flags = 0, + .exp_ret = 0, + .always = 1, + }, + { + /* case 03 */ + .testname = "cmd_private_expedited_fail\0", + .command = MEMBARRIER_CMD_PRIVATE_EXPEDITED, + .flags = 0, + .exp_ret = -1, + .exp_errno = EPERM, + }, + { + /* case 04 */ + .testname = "cmd_private_expedited_register_success\0", + .command = MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED, + .flags = 0, + .exp_ret = 0, + .force = 1, + .force_exp_errno = EINVAL, + }, + { + /* case 05 */ + .testname = "cmd_private_expedited_success\0", + .command = MEMBARRIER_CMD_PRIVATE_EXPEDITED, + .flags = 0, + .exp_ret = 0, + .force = 1, + .force_exp_errno = EINVAL, + }, + { + /* case 06 */ + .testname = "cmd_private_expedited_sync_core_fail\0", + .command = MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE, + .flags = 0, + .exp_ret = -1, + .exp_errno = EPERM, + }, + { + /* case 07 */ + .testname = "cmd_private_expedited_sync_core_register_success\0", + .command = MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE, + .flags = 0, + .exp_ret = 0, + .force = 1, + .force_exp_errno = EINVAL, + }, + { + /* case 08 */ + .testname = "cmd_private_expedited_sync_core_success\0", + .command = MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE, + .flags = 0, + .exp_ret = 0, + .force = 1, + .force_exp_errno = EINVAL, + }, + { + /* case 09 */ + .testname = "cmd_global_expedited_success\0", + .command = MEMBARRIER_CMD_GLOBAL_EXPEDITED, + .flags = 0, + .exp_ret = 0, + }, + { + /* case 10 */ + .testname = "cmd_global_expedited_register_success\0", + .command = MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED, + .flags = 0, + .exp_ret = 0, + .force = 1, + .force_exp_errno = EINVAL, + },
testcases/kernel/syscalls/membarrier/membarrier01.c line 264
Quoted 10 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +10
-0+ { +/* case 11 */ + .testname = "cmd_global_expedited_success\0", + .command = MEMBARRIER_CMD_GLOBAL_EXPEDITED, + .flags = 0, + .exp_ret = 0, + .force = 1, + .force_exp_errno = EINVAL, + }, +};
Same as for membarrier header applies to commands:
We either need configure check or lapi header to not break LTP build on older distros.
Quoted 63 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +63
-0+ +static void verify_membarrier (unsigned int i) +{ +/* skips tests depending on supportability */ + +if (tc[i].enabled !=1 && tc[i].force !=1 ) { +if (tc[i].always ==0 ) +skipped (tc[i]); + +skipped_fail (tc[i]); + } + +TEST (sys_membarrier (tc[i].command, tc[i].flags)); + +/* cmd passes */ + +if (tc[i].exp_ret ==TST_RET ) { + +if (TST_RET >=0 ) +passed_ok (tc[i]); +else { +if (tc[i].enabled ==1 && tc[i].force !=1 ) { +if (tc[i].exp_errno !=TST_ERR ) +failed_not_ok (tc[i],TST_RET ,TST_ERR ); +else +failed_ok (tc[i]); + }else { +if (tc[i].force_exp_errno !=TST_ERR ) +failed_not_ok (tc[i],TST_RET ,TST_ERR ); +else +failed_ok_unsupported (tc[i]); + } + } + +/* cmd fails */ + + }else { +if (tc[i].enabled ==1 && tc[i].force !=1 ) { +if (TST_RET >=0 ) +passed_unexpectedly (tc[i]); +else +failed_unexpectedly (tc[i],TST_RET ,TST_ERR ); + }else { +if (tc[i].force_exp_errno ==TST_ERR ) +failed_ok_unsupported (tc[i]); +else +failed_not_ok (tc[i],TST_RET ,TST_ERR ); + } + } +} + +static void setup (void ) +{ +size_t i; +int ret; + + ret =sys_membarrier (MEMBARRIER_CMD_QUERY ,0 ); +if (ret <0 ) { +if (errno ==ENOSYS ) +tst_brk (TCONF ,"sys_membarrier(2) not supported" ); + } + +for (i =0 ; i <ARRAY_SIZE (tc); i++) {
testcases/kernel/syscalls/membarrier/membarrier01.c line 337
Quoted 10 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +10
-0+if ((tc[i].command >0 ) && (ret & tc[i].command)) + tc[i].enabled =1 ; + } +} + +static struct tst_test test = { + .setup = setup, + .test = verify_membarrier, + .tcnt =ARRAY_SIZE (tc), +};
Presumably, this syscall won't see many backports to older trees, so I'd add minimum supported kernel version here.
Regards,
Jan
PATCH v2 1/1 syscalls/membarrier: Add membarrier() initial test
Initial test for membarrier() syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.
Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
Tests are done in a child process due to inexistent kernel interface to "unregister" the process from being affected by membarrier() call.
--- configure.ac | 1 + include/lapi/syscalls/aarch64.in | 1 + include/lapi/syscalls/arm.in | 1 + include/lapi/syscalls/hppa.in | 1 + include/lapi/syscalls/i386.in | 1 + include/lapi/syscalls/ia64.in | 1 + include/lapi/syscalls/powerpc.in | 1 + include/lapi/syscalls/powerpc64.in | 1 + include/lapi/syscalls/s390.in | 1 + include/lapi/syscalls/s390x.in | 1 + include/lapi/syscalls/sparc.in | 1 + include/lapi/syscalls/sparc64.in | 1 + include/lapi/syscalls/x86_64.in | 1 + runtest/syscalls | 2 + .../kernel/syscalls/membarrier/.gitignore | 1 + testcases/kernel/syscalls/membarrier/Makefile | 8 + .../kernel/syscalls/membarrier/membarrier01.c | 411 ++++++++++++++++++ 17 files changed, 435 insertions(+) create mode 100644 testcases/kernel/syscalls/membarrier/.gitignore create mode 100644 testcases/kernel/syscalls/membarrier/Makefile create mode 100644 testcases/kernel/syscalls/membarrier/membarrier01.c
configure.ac +1 -0
@@ -45,6 +45,7 @@ AC_CHECK_HEADERS([ \ linux/mempolicy.h \ linux/module.h \ linux/netlink.h \ + linux/membarrier.h \ mm.h \ netinet/sctp.h \ pthread.h \
include/lapi/syscalls/aarch64.in +1 -0
@@ -256,6 +256,7 @@ sendmmsg 269 kcmp 272 getrandom 278 memfd_create 279 +membarrier 283 mlock2 284 copy_file_range 285 _sysctl 1078
include/lapi/syscalls/arm.in +1 -0
@@ -341,6 +341,7 @@ renameat2 (__NR_SYSCALL_BASE+382) getrandom (__NR_SYSCALL_BASE+384) memfd_create (__NR_SYSCALL_BASE+385) execveat (__NR_SYSCALL_BASE+387) +membarrier (__NR_SYSCALL_BASE+389) mlock2 (__NR_SYSCALL_BASE+390) copy_file_range (__NR_SYSCALL_BASE+391) statx (__NR_SYSCALL_BASE+397)
include/lapi/syscalls/hppa.in +1 -0
@@ -17,5 +17,6 @@ splice 291 tee 293 vmsplice 294 memfd_create 340 +membarrier 343 mlock2 345 copy_file_range 346
include/lapi/syscalls/i386.in +1 -0
@@ -343,4 +343,5 @@ memfd_create 356 execveat 358 mlock2 376 copy_file_range 377 +membarrier 375 statx 383
include/lapi/syscalls/ia64.in +1 -0
@@ -296,5 +296,6 @@ prlimit64 1325 renameat2 1338 getrandom 1339 memfd_create 1340 +membarrier 1344 mlock2 1346 copy_file_range 1347
include/lapi/syscalls/powerpc.in +1 -0
@@ -347,6 +347,7 @@ sched_getattr 356 renameat2 357 getrandom 359 memfd_create 360 +membarrier 365 mlock2 378 copy_file_range 379 statx 383
include/lapi/syscalls/powerpc64.in +1 -0
@@ -347,6 +347,7 @@ sched_getattr 356 renameat2 357 getrandom 359 memfd_create 360 +membarrier 365 mlock2 378 copy_file_range 379 statx 383
include/lapi/syscalls/s390.in +1 -0
@@ -331,6 +331,7 @@ sched_getattr 346 renameat2 347 getrandom 349 memfd_create 350 +membarrier 356 execveat 354 mlock2 374 copy_file_range 375
include/lapi/syscalls/s390x.in +1 -0
@@ -331,5 +331,6 @@ sched_getattr 346 renameat2 347 getrandom 349 memfd_create 350 +membarrier 356 mlock2 374 copy_file_range 375
include/lapi/syscalls/sparc.in +1 -0
@@ -336,5 +336,6 @@ kcmp 341 renameat2 345 getrandom 347 memfd_create 348 +membarrier 350 mlock2 356 copy_file_range 357
include/lapi/syscalls/sparc64.in +1 -0
@@ -312,5 +312,6 @@ kcmp 341 renameat2 345 getrandom 347 memfd_create 348 +membarrier 350 mlock2 356 copy_file_range 357
include/lapi/syscalls/x86_64.in +1 -0
@@ -308,6 +308,7 @@ renameat2 316 getrandom 318 memfd_create 319 execveat 322 +membarrier 324 mlock2 325 copy_file_range 326 statx 332
runtest/syscalls +2 -0
@@ -1504,3 +1504,5 @@ statx02 statx02 statx03 statx03 statx04 statx04 statx05 statx05 + +membarrier01 membarrier01
testcases/kernel/syscalls/membarrier/.gitignore new file +1 -0
@@ -0,0 +1 @@ +/membarrier01
testcases/kernel/syscalls/membarrier/Makefile new file +8 -0
@@ -0,0 +1,8 @@ +# Copyright (c) 2018 - Linaro Limited. All rights reserved. +# SPDX-License-Identifier: GPL-2.0-or-later + +top_srcdir ?= ../../../.. + +include $(top_srcdir)/include/mk/testcases.mk + +include $(top_srcdir)/include/mk/generic_leaf_target.mk
testcases/kernel/syscalls/membarrier/membarrier01.c new file +411 -0
411 lines not on this page · raw message
Signature · 1 line
2.19.0.rc2
PATCH v2 1/1 syscalls/membarrier: Add membarrier() initial test
Quoted 11 lines · Rafael David Tinoco
Fixes #265Initial test for
membarrier()syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
Quoted 5 lines
Tests are done in a child process due to inexistent kernel interface to "unregister" the process from being affected by
membarrier()call.Signed-off-by Rafael David Tinoco <[email protected]>---
Jan,
Hopefully I have addressed all your review points in this version, please let me know if not, I'll be happy to make a new version if needed.
I have added a corner case for a return code that has changed after 4.16, and I'm running the tests now in a child process (so I needed to create a pre-req registration flag). All this together with what you have asked for, I believe.
Please find bellow the tests done for this v2:
## 4.4
membarrier01.c:313: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:313: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:309: PASS: membarrier(2): cmd_global_success passed membarrier01.c:287: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:287: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:287: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:313: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:313: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:309: PASS: membarrier(2): cmd_global_success passed membarrier01.c:287: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:287: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:287: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
## 4.9
membarrier01.c:313: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:313: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:309: PASS: membarrier(2): cmd_global_success passed membarrier01.c:287: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:287: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:287: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:313: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:313: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:309: PASS: membarrier(2): cmd_global_success passed membarrier01.c:287: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:287: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:287: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
## 4.14
membarrier01.c:313: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:313: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:309: PASS: membarrier(2): cmd_global_success passed membarrier01.c:287: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:287: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:287: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:313: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:313: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:309: PASS: membarrier(2): cmd_global_success passed membarrier01.c:287: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:287: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:287: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
## 4.16
membarrier01.c:313: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:313: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:309: PASS: membarrier(2): cmd_global_success passed membarrier01.c:287: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:287: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:287: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:313: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:313: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:309: PASS: membarrier(2): cmd_global_success passed membarrier01.c:287: PASS: membarrier(2): cmd_private_expedited_fail skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_private_expedited_success failed as expected (unsupported)
membarrier01.c:287: PASS: membarrier(2):cmd_private_expedited_sync_core_fail skipped (unsupported) membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success failed as expected (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_private_expedited_sync_core_success failed as expected (unsupported) membarrier01.c:287: PASS: membarrier(2): cmd_global_expedited_success skipped (unsupported)
membarrier01.c:328: PASS: membarrier(2):cmd_global_expedited_register_success failed as expected (unsupported) membarrier01.c:328: PASS: membarrier(2): cmd_global_expedited_success failed as expected (unsupported)
Summary:
passed 12 failed 0 skipped 0
warnings 0
## 4.18
membarrier01.c:313: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:313: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:309: PASS: membarrier(2): cmd_global_success passed membarrier01.c:313: PASS: membarrier(2): cmd_private_expedited_fail failed as expected
membarrier01.c:340: PASS: membarrier(2):cmd_private_expedited_register_success passed membarrier01.c:340: PASS: membarrier(2): cmd_private_expedited_success passed
membarrier01.c:313: PASS: membarrier(2):cmd_private_expedited_sync_core_fail failed as expected membarrier01.c:340: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success passed membarrier01.c:340: PASS: membarrier(2):cmd_private_expedited_sync_core_success passed membarrier01.c:309: PASS: membarrier(2): cmd_global_expedited_success passed membarrier01.c:340: PASS: membarrier(2):cmd_global_expedited_register_success passed
membarrier01.c:340: PASS: membarrier(2): cmd_global_expedited_success passed
Summary:
passed 12 failed 0 skipped 0
warnings 0
membarrier01.c:313: PASS: membarrier(2): cmd_fail failed as expected membarrier01.c:313: PASS: membarrier(2): cmd_flags_fail failed as expected membarrier01.c:309: PASS: membarrier(2): cmd_global_success passed membarrier01.c:313: PASS: membarrier(2): cmd_private_expedited_fail failed as expected
membarrier01.c:340: PASS: membarrier(2):cmd_private_expedited_register_success passed membarrier01.c:340: PASS: membarrier(2): cmd_private_expedited_success passed
membarrier01.c:313: PASS: membarrier(2):cmd_private_expedited_sync_core_fail failed as expected membarrier01.c:340: PASS: membarrier(2):cmd_private_expedited_sync_core_register_success passed membarrier01.c:340: PASS: membarrier(2):cmd_private_expedited_sync_core_success passed membarrier01.c:309: PASS: membarrier(2): cmd_global_expedited_success passed membarrier01.c:340: PASS: membarrier(2):cmd_global_expedited_register_success passed
membarrier01.c:340: PASS: membarrier(2): cmd_global_expedited_success passed
Summary:
passed 12 failed 0 skipped 0
warnings 0
Signature · 1 line
Rafael D. Tinoco
PATCH v3 1/1 syscalls/membarrier: Add membarrier() initial test
In reply to Jan StancekInitial test for membarrier() syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.
Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
Tests are done in a child process due to inexistent kernel interface to "unregister" the process from being affected by membarrier() call.
--- configure.ac | 1 + include/lapi/syscalls/aarch64.in | 1 + include/lapi/syscalls/arm.in | 1 + include/lapi/syscalls/hppa.in | 1 + include/lapi/syscalls/i386.in | 1 + include/lapi/syscalls/ia64.in | 1 + include/lapi/syscalls/powerpc.in | 1 + include/lapi/syscalls/powerpc64.in | 1 + include/lapi/syscalls/s390.in | 1 + include/lapi/syscalls/s390x.in | 1 + include/lapi/syscalls/sparc.in | 1 + include/lapi/syscalls/sparc64.in | 1 + include/lapi/syscalls/x86_64.in | 1 + runtest/syscalls | 2 + .../kernel/syscalls/membarrier/.gitignore | 1 + testcases/kernel/syscalls/membarrier/Makefile | 8 + .../kernel/syscalls/membarrier/membarrier01.c | 411 ++++++++++++++++++ 17 files changed, 435 insertions(+) create mode 100644 testcases/kernel/syscalls/membarrier/.gitignore create mode 100644 testcases/kernel/syscalls/membarrier/Makefile create mode 100644 testcases/kernel/syscalls/membarrier/membarrier01.c
configure.ac +1 -0
@@ -45,6 +45,7 @@ AC_CHECK_HEADERS([ \ linux/mempolicy.h \ linux/module.h \ linux/netlink.h \ + linux/membarrier.h \ mm.h \ netinet/sctp.h \ pthread.h \
include/lapi/syscalls/aarch64.in +1 -0
@@ -256,6 +256,7 @@ sendmmsg 269 kcmp 272 getrandom 278 memfd_create 279 +membarrier 283 mlock2 284 copy_file_range 285 _sysctl 1078
include/lapi/syscalls/arm.in +1 -0
@@ -341,6 +341,7 @@ renameat2 (__NR_SYSCALL_BASE+382) getrandom (__NR_SYSCALL_BASE+384) memfd_create (__NR_SYSCALL_BASE+385) execveat (__NR_SYSCALL_BASE+387) +membarrier (__NR_SYSCALL_BASE+389) mlock2 (__NR_SYSCALL_BASE+390) copy_file_range (__NR_SYSCALL_BASE+391) statx (__NR_SYSCALL_BASE+397)
include/lapi/syscalls/hppa.in +1 -0
@@ -17,5 +17,6 @@ splice 291 tee 293 vmsplice 294 memfd_create 340 +membarrier 343 mlock2 345 copy_file_range 346
include/lapi/syscalls/i386.in +1 -0
@@ -341,6 +341,7 @@ renameat2 354 getrandom 355 memfd_create 356 execveat 358 +membarrier 375 mlock2 376 copy_file_range 377 statx 383
include/lapi/syscalls/ia64.in +1 -0
@@ -296,5 +296,6 @@ prlimit64 1325 renameat2 1338 getrandom 1339 memfd_create 1340 +membarrier 1344 mlock2 1346 copy_file_range 1347
include/lapi/syscalls/powerpc.in +1 -0
@@ -347,6 +347,7 @@ sched_getattr 356 renameat2 357 getrandom 359 memfd_create 360 +membarrier 365 mlock2 378 copy_file_range 379 statx 383
include/lapi/syscalls/powerpc64.in +1 -0
@@ -347,6 +347,7 @@ sched_getattr 356 renameat2 357 getrandom 359 memfd_create 360 +membarrier 365 mlock2 378 copy_file_range 379 statx 383
include/lapi/syscalls/s390.in +1 -0
@@ -331,6 +331,7 @@ sched_getattr 346 renameat2 347 getrandom 349 memfd_create 350 +membarrier 356 execveat 354 mlock2 374 copy_file_range 375
include/lapi/syscalls/s390x.in +1 -0
@@ -331,5 +331,6 @@ sched_getattr 346 renameat2 347 getrandom 349 memfd_create 350 +membarrier 356 mlock2 374 copy_file_range 375
include/lapi/syscalls/sparc.in +1 -0
@@ -336,5 +336,6 @@ kcmp 341 renameat2 345 getrandom 347 memfd_create 348 +membarrier 350 mlock2 356 copy_file_range 357
include/lapi/syscalls/sparc64.in +1 -0
@@ -312,5 +312,6 @@ kcmp 341 renameat2 345 getrandom 347 memfd_create 348 +membarrier 350 mlock2 356 copy_file_range 357
include/lapi/syscalls/x86_64.in +1 -0
@@ -308,6 +308,7 @@ renameat2 316 getrandom 318 memfd_create 319 execveat 322 +membarrier 324 mlock2 325 copy_file_range 326 statx 332
runtest/syscalls +2 -0
@@ -1504,3 +1504,5 @@ statx02 statx02 statx03 statx03 statx04 statx04 statx05 statx05 + +membarrier01 membarrier01
testcases/kernel/syscalls/membarrier/.gitignore new file +1 -0
@@ -0,0 +1 @@ +/membarrier01
testcases/kernel/syscalls/membarrier/Makefile new file +8 -0
@@ -0,0 +1,8 @@ +# Copyright (c) 2018 - Linaro Limited. All rights reserved. +# SPDX-License-Identifier: GPL-2.0-or-later + +top_srcdir ?= ../../../.. + +include $(top_srcdir)/include/mk/testcases.mk + +include $(top_srcdir)/include/mk/generic_leaf_target.mk
testcases/kernel/syscalls/membarrier/membarrier01.c new file +411 -0
411 lines not on this page · raw message
Signature · 1 line
2.19.0.rc2
PATCH v3 1/1 syscalls/membarrier: Add membarrier() initial test
Quoted 11 lines · Rafael David Tinoco
Fixes #265Initial test for
membarrier()syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
Quoted 4 lines
Tests are done in a child process due to inexistent kernel interface to "unregister" the process from being affected by
membarrier()call.Signed-off-by Rafael David Tinoco <[email protected]>
v3 is just a rebase fixing include/lapi/syscalls/i386.in position.
Thank you
-
Rafael
PATCH v3 1/1 syscalls/membarrier: Add membarrier() initial test
In reply to Rafael David TinocoHi,
----- Original Message -----
Quoted 163 lines
Fixes #265Initial test for
membarrier()syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
Tests are done in a child process due to inexistent kernel interface to "unregister" the process from being affected by
membarrier()call.Signed-off-by Rafael David Tinoco <[email protected]>--- configure.ac | 1 + include/lapi/syscalls/aarch64.in | 1 + include/lapi/syscalls/arm.in | 1 + include/lapi/syscalls/hppa.in | 1 + include/lapi/syscalls/i386.in | 1 + include/lapi/syscalls/ia64.in | 1 + include/lapi/syscalls/powerpc.in | 1 + include/lapi/syscalls/powerpc64.in | 1 + include/lapi/syscalls/s390.in | 1 + include/lapi/syscalls/s390x.in | 1 + include/lapi/syscalls/sparc.in | 1 + include/lapi/syscalls/sparc64.in | 1 + include/lapi/syscalls/x86_64.in | 1 + runtest/syscalls | 2 + .../kernel/syscalls/membarrier/.gitignore | 1 + testcases/kernel/syscalls/membarrier/Makefile | 8 + .../kernel/syscalls/membarrier/membarrier01.c | 411 ++++++++++++++++++ 17 files changed, 435 insertions(+) create mode 100644 testcases/kernel/syscalls/membarrier/.gitignore create mode 100644 testcases/kernel/syscalls/membarrier/Makefile create mode 100644 testcases/kernel/syscalls/membarrier/membarrier01.cconfigure.ac +1
-0@@ -45,6 +45,7 @@ AC_CHECK_HEADERS([ \ linux/mempolicy.h \ linux/module.h \ linux/netlink.h \ + linux/membarrier.h \ mm.h \ netinet/sctp.h \ pthread.h \include/lapi/syscalls/aarch64.in +1
-0@@ -256,6 +256,7 @@ sendmmsg 269 kcmp 272 getrandom 278 memfd_create 279 +membarrier 283 mlock2 284 copy_file_range 285 _sysctl 1078include/lapi/syscalls/arm.in +1
-0@@ -341,6 +341,7 @@ renameat2 (__NR_SYSCALL_BASE+382) getrandom (__NR_SYSCALL_BASE+384) memfd_create (__NR_SYSCALL_BASE+385) execveat (__NR_SYSCALL_BASE+387) +membarrier (__NR_SYSCALL_BASE+389) mlock2 (__NR_SYSCALL_BASE+390) copy_file_range (__NR_SYSCALL_BASE+391) statx (__NR_SYSCALL_BASE+397)include/lapi/syscalls/hppa.in +1
-0@@ -17,5 +17,6 @@ splice 291 tee 293 vmsplice 294 memfd_create 340 +membarrier 343 mlock2 345 copy_file_range 346include/lapi/syscalls/i386.in +1
-0@@ -341,6 +341,7 @@ renameat2 354 getrandom 355 memfd_create 356 execveat 358 +membarrier 375 mlock2 376 copy_file_range 377 statx 383include/lapi/syscalls/ia64.in +1
-0@@ -296,5 +296,6 @@ prlimit64 1325 renameat2 1338 getrandom 1339 memfd_create 1340 +membarrier 1344 mlock2 1346 copy_file_range 1347include/lapi/syscalls/powerpc.in +1
-0@@ -347,6 +347,7 @@ sched_getattr 356 renameat2 357 getrandom 359 memfd_create 360 +membarrier 365 mlock2 378 copy_file_range 379 statx 383include/lapi/syscalls/powerpc64.in +1
-0@@ -347,6 +347,7 @@ sched_getattr 356 renameat2 357 getrandom 359 memfd_create 360 +membarrier 365 mlock2 378 copy_file_range 379 statx 383include/lapi/syscalls/s390.in +1
-0@@ -331,6 +331,7 @@ sched_getattr 346 renameat2 347 getrandom 349 memfd_create 350 +membarrier 356 execveat 354 mlock2 374 copy_file_range 375include/lapi/syscalls/s390x.in +1
-0@@ -331,5 +331,6 @@ sched_getattr 346 renameat2 347 getrandom 349 memfd_create 350 +membarrier 356 mlock2 374 copy_file_range 375include/lapi/syscalls/sparc.in +0
-0
include/lapi/syscalls/sparc.in kcmp 341 · line 339
Quoted 4 lines
include/lapi/syscalls/sparc.in +1
-0@@ -336,5 +336,6 @@ kcmp 341 renameat2 345 getrandom 347 memfd_create 348 +membarrier 350
This should be 351.
include/lapi/syscalls/sparc64.in kcmp 341 · line 315
Quoted 12 lines
include/lapi/syscalls/sparc.in +0
-0mlock2 356 copy_file_range 357include/lapi/syscalls/sparc64.in +1
-0@@ -312,5 +312,6 @@ kcmp 341 renameat2 345 getrandom 347 memfd_create 348 +membarrier 350
Here as well.
Quoted 73 lines
include/lapi/syscalls/sparc64.in +0
-0mlock2 356 copy_file_range 357include/lapi/syscalls/x86_64.in +1
-0@@ -308,6 +308,7 @@ renameat2 316 getrandom 318 memfd_create 319 execveat 322 +membarrier 324 mlock2 325 copy_file_range 326 statx 332runtest/syscalls +2
-0@@ -1504,3 +1504,5 @@ statx02 statx02 statx03 statx03 statx04 statx04 statx05 statx05 + +membarrier01 membarrier01testcases/kernel/syscalls/membarrier/.gitignore new file +1
-0@@ -0,0 +1 @@ +/membarrier01testcases/kernel/syscalls/membarrier/Makefile new file +8
-0@@ -0,0 +1,8 @@ +# Copyright (c) 2018 - Linaro Limited. All rights reserved. +# SPDX-License-Identifier: GPL-2.0-or-later + +top_srcdir ?= ../../../.. + +include $(top_srcdir)/include/mk/testcases.mk + +include $(top_srcdir)/include/mk/generic_leaf_target.mktestcases/kernel/syscalls/membarrier/membarrier01.c new file +9
-0@@ -0,0 +1,411 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* +* Copyright (c) 2018 Linaro Limited. All rights reserved. +* Author: Rafael David Tinoco <[email protected]> +*/ +/* +* Basic tests for membarrier(2) syscall. Tests below are responsible for +* testing the membarrier(2) interface only, without checking if the barrier +* was successful or not. Check test_case structure for each test description.
+ */testcases/kernel/syscalls/membarrier/membarrier01.c new file +6
-0+ +#include "config.h" +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <syscall.h>
testcases/kernel/syscalls/membarrier/membarrier01.c line 26
Quoted 10 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +10
-0+#include <errno.h> +#include <fcntl.h> +#include <unistd.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#ifdef HAVE_LINUX_MEMBARRIER_H +# include <linux/membarrier.h> +#endif
Problem here is that MEMBARRIER_CMD_* will still be undefined, so compilation will fail unless you have all that test is using:
membarrier01.c:65:14: error: ‘MEMBARRIER_CMD_QUERY’ undeclared here (not in a function)
.command = MEMBARRIER_CMD_QUERY,
^
membarrier01.c:78:14: error: ‘MEMBARRIER_CMD_GLOBAL’ undeclared here (not in a function)
.command = MEMBARRIER_CMD_GLOBAL,
^
membarrier01.c:93:14: error: ‘MEMBARRIER_CMD_PRIVATE_EXPEDITED’ undeclared here (not in a function)
.command = MEMBARRIER_CMD_PRIVATE_EXPEDITED,
^
membarrier01.c:105:14: error: ‘MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED’ undeclared here (not in a function)
.command = MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED,
^
membarrier01.c:137:14: error: ‘MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE’ undeclared here (not in a function)
.command = MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE,
^
membarrier01.c:149:14: error: ‘MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE’ undeclared here (not in a function)
.command = MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE,
^
membarrier01.c:179:14: error: ‘MEMBARRIER_CMD_GLOBAL_EXPEDITED’ undeclared here (not in a function)
.command = MEMBARRIER_CMD_GLOBAL_EXPEDITED,
^membarrier01.c:190:14: error: ‘MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED’ undeclared here (not in a function)
.command = MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED,
Even if you have linux/membarrier.h, you may not have all MEMBARRIER_CMD_*. First version (4.3) introduced only MEMBARRIER_CMD_QUERY and MEMBARRIER_CMD_SHARED.
<snip>
Quoted 10 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +10
-0+static void setup (void ) +{ +size_t i; +int ret; + + ret =sys_membarrier (MEMBARRIER_CMD_QUERY ,0 ); +if (ret <0 ) { +if (errno ==ENOSYS ) +tst_brk (TBROK ,"membarrier(2): not supported" ); + }
testcases/kernel/syscalls/membarrier/membarrier01.c line 398
Quoted 10 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +10
-0+ +for (i =0 ; i <ARRAY_SIZE (tc); i++) { +if ((tc[i].command >0 ) && (ret & tc[i].command)) + tc[i].enabled =1 ; + } + +/* case 05: commit 70216e18e5 (v4.16-rc1) changed behavior */ + +if (tst_kvercmp (4 ,16 ,0 ) <0 && tc[5 ].enabled ==0 ) + tc[5 ].force_exp_errno =EINVAL ;
Can you check for this by some flag(s) rather than position in array? If we add to array later, index will shift and this will break.
testcases/kernel/syscalls/membarrier/membarrier01.c line 409
Quoted 11 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +11
-0+} + +static struct tst_test test = { + .setup = setup, + .test = wrap_verify_membarrier, + .tcnt =ARRAY_SIZE (tc), + .min_kver ="4.3.0" ,/* commit: 5b25b13ab0 (sys_membarrier(): ...) */ + .forks_child =1 , +}; + +#else /* HAVE_LINUX_MEMBARRIER_H */
This #else is for HAVE_SYS_XATTR_H.
Regards,
Jan
Quoted 6 lines
testcases/kernel/syscalls/membarrier/membarrier01.c new file +2
-1+TST_TEST_TCONF ("<linux/membarrier.h> does not exist" ); +#endif --2.19.0.rc2
PATCH v4 1/1 syscalls/membarrier: Add membarrier() initial test
In reply to Jan StancekInitial test for membarrier() syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.
Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
Tests are done in a child process due to inexistent kernel interface to "unregister" the process from being affected by membarrier() call.
--- configure.ac | 1 + include/lapi/membarrier.h | 30 ++ include/lapi/syscalls/aarch64.in | 1 + include/lapi/syscalls/arm.in | 1 + include/lapi/syscalls/hppa.in | 1 + include/lapi/syscalls/i386.in | 1 + include/lapi/syscalls/ia64.in | 1 + include/lapi/syscalls/powerpc.in | 1 + include/lapi/syscalls/powerpc64.in | 1 + include/lapi/syscalls/s390.in | 1 + include/lapi/syscalls/s390x.in | 1 + include/lapi/syscalls/sparc.in | 1 + include/lapi/syscalls/sparc64.in | 1 + include/lapi/syscalls/x86_64.in | 1 + runtest/syscalls | 2 + .../kernel/syscalls/membarrier/.gitignore | 1 + testcases/kernel/syscalls/membarrier/Makefile | 8 + .../kernel/syscalls/membarrier/membarrier01.c | 418 ++++++++++++++++++ 18 files changed, 472 insertions(+) create mode 100644 include/lapi/membarrier.h create mode 100644 testcases/kernel/syscalls/membarrier/.gitignore create mode 100644 testcases/kernel/syscalls/membarrier/Makefile create mode 100644 testcases/kernel/syscalls/membarrier/membarrier01.c
configure.ac +1 -0
@@ -45,6 +45,7 @@ AC_CHECK_HEADERS([ \ linux/mempolicy.h \ linux/module.h \ linux/netlink.h \ + linux/membarrier.h \ mm.h \ netinet/sctp.h \ pthread.h \
include/lapi/membarrier.h new file +30 -0
@@ -0,0 +1,30 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* +* Copyright (c) 2018 Linaro Limited. All rights reserved. +* Author: Rafael David Tinoco <[email protected]> +*/ + +#ifndef LAPI_MEMBARRIER_H +#define LAPI_MEMBARRIER_H + +/* +* Having <linux/membarrier.h> is enough to know if the test should run or +* not, but it might not define all needed MEMBARRIER_CMD_* being tested, +* since its first versions included just a few commands. +*/ + +enum membarrier_cmd { +MEMBARRIER_CMD_QUERY =0 , +MEMBARRIER_CMD_GLOBAL = (1 <<0 ), +MEMBARRIER_CMD_GLOBAL_EXPEDITED = (1 <<1 ), +MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED = (1 <<2 ), +MEMBARRIER_CMD_PRIVATE_EXPEDITED = (1 <<3 ), +MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED = (1 <<4 ), +MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE = (1 <<5 ), +MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE = (1 <<6 ), + +/* Alias for header backward compatibility. */ +MEMBARRIER_CMD_SHARED =MEMBARRIER_CMD_GLOBAL , +}; + +#endif
include/lapi/syscalls/aarch64.in +1 -0
@@ -256,6 +256,7 @@ sendmmsg 269 kcmp 272 getrandom 278 memfd_create 279 +membarrier 283 mlock2 284 copy_file_range 285 _sysctl 1078
include/lapi/syscalls/arm.in +1 -0
@@ -341,6 +341,7 @@ renameat2 (__NR_SYSCALL_BASE+382) getrandom (__NR_SYSCALL_BASE+384) memfd_create (__NR_SYSCALL_BASE+385) execveat (__NR_SYSCALL_BASE+387) +membarrier (__NR_SYSCALL_BASE+389) mlock2 (__NR_SYSCALL_BASE+390) copy_file_range (__NR_SYSCALL_BASE+391) statx (__NR_SYSCALL_BASE+397)
include/lapi/syscalls/hppa.in +1 -0
@@ -17,5 +17,6 @@ splice 291 tee 293 vmsplice 294 memfd_create 340 +membarrier 343 mlock2 345 copy_file_range 346
include/lapi/syscalls/i386.in +1 -0
@@ -341,6 +341,7 @@ renameat2 354 getrandom 355 memfd_create 356 execveat 358 +membarrier 375 mlock2 376 copy_file_range 377 statx 383
include/lapi/syscalls/ia64.in +1 -0
@@ -296,5 +296,6 @@ prlimit64 1325 renameat2 1338 getrandom 1339 memfd_create 1340 +membarrier 1344 mlock2 1346 copy_file_range 1347
include/lapi/syscalls/powerpc.in +1 -0
@@ -347,6 +347,7 @@ sched_getattr 356 renameat2 357 getrandom 359 memfd_create 360 +membarrier 365 mlock2 378 copy_file_range 379 statx 383
include/lapi/syscalls/powerpc64.in +1 -0
@@ -347,6 +347,7 @@ sched_getattr 356 renameat2 357 getrandom 359 memfd_create 360 +membarrier 365 mlock2 378 copy_file_range 379 statx 383
include/lapi/syscalls/s390.in +1 -0
@@ -331,6 +331,7 @@ sched_getattr 346 renameat2 347 getrandom 349 memfd_create 350 +membarrier 356 execveat 354 mlock2 374 copy_file_range 375
include/lapi/syscalls/s390x.in +1 -0
@@ -331,5 +331,6 @@ sched_getattr 346 renameat2 347 getrandom 349 memfd_create 350 +membarrier 356 mlock2 374 copy_file_range 375
include/lapi/syscalls/sparc.in +1 -0
@@ -336,5 +336,6 @@ kcmp 341 renameat2 345 getrandom 347 memfd_create 348 +membarrier 351 mlock2 356 copy_file_range 357
include/lapi/syscalls/sparc64.in +1 -0
@@ -312,5 +312,6 @@ kcmp 341 renameat2 345 getrandom 347 memfd_create 348 +membarrier 351 mlock2 356 copy_file_range 357
include/lapi/syscalls/x86_64.in +1 -0
@@ -308,6 +308,7 @@ renameat2 316 getrandom 318 memfd_create 319 execveat 322 +membarrier 324 mlock2 325 copy_file_range 326 statx 332
runtest/syscalls +2 -0
@@ -1504,3 +1504,5 @@ statx02 statx02 statx03 statx03 statx04 statx04 statx05 statx05 + +membarrier01 membarrier01
testcases/kernel/syscalls/membarrier/.gitignore new file +1 -0
@@ -0,0 +1 @@ +/membarrier01
testcases/kernel/syscalls/membarrier/Makefile new file +8 -0
@@ -0,0 +1,8 @@ +# Copyright (c) 2018 - Linaro Limited. All rights reserved. +# SPDX-License-Identifier: GPL-2.0-or-later + +top_srcdir ?= ../../../.. + +include $(top_srcdir)/include/mk/testcases.mk + +include $(top_srcdir)/include/mk/generic_leaf_target.mk
testcases/kernel/syscalls/membarrier/membarrier01.c new file +418 -0
418 lines not on this page · raw message
Signature · 1 line
2.19.0.rc2
PATCH v4 1/1 syscalls/membarrier: Add membarrier() initial test
----- Original Message -----
Quoted 11 lines
Fixes #265Initial test for
membarrier()syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
Quoted 4 lines
Tests are done in a child process due to inexistent kernel interface to "unregister" the process from being affected by
membarrier()call.Signed-off-by Rafael David Tinoco <[email protected]>
Looks good to me.
We probably can drop linux/membarrier.h configure check, right? (since v4 doesn't include it and unsupported kernel should hit ENOSYS and TCONF)
Regards,
Jan
PATCH v4 1/1 syscalls/membarrier: Add membarrier() initial test
Quoted 17 lines · Jan Stancek
----- Original Message -----
Quoted 14 lines
Fixes #265Initial test for
membarrier()syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
Tests are done in a child process due to inexistent kernel interface to "unregister" the process from being affected by
membarrier()call.
Quoted 7 lines
Quoted 1 line
Signed-off-by Rafael David Tinoco <[email protected]>Looks good to me.
We probably can drop
linux/membarrier.hconfigure check, right? (since v4 doesn't include it and unsupported kernel should hit ENOSYS and TCONF)
Ooops, true. No need to check HAVE_LINUX_MEMBARRIER_H if we are declaring all CMDs and will be given ENOSYS. Want me to send a v5 ?
Quoted 3 lines
Regards,
Jan
PATCH v4 1/1 syscalls/membarrier: Add membarrier() initial test
----- Original Message -----
Quoted 20 lines · Jan Stancek
Quoted 19 lines
----- Original Message -----
Quoted 15 lines
Fixes #265Initial test for
membarrier()syscall. It tests all existing membarrier "commands" (or features), including the need (or not) for previous registration for the call to work.Some features did not exist in older kernels and that is covered by skipping some calls, flagging test as skipped & okay, and forcing others, making sure that return codes and errno are set right in those cases.
Tests are done in a child process due to inexistent kernel interface to "unregister" the process from being affected by
membarrier()call.Signed-off-by Rafael David Tinoco <[email protected]>
Quoted 8 lines
Quoted 5 lines
Looks good to me.
We probably can drop
linux/membarrier.hconfigure check, right? (since v4 doesn't include it and unsupported kernel should hit ENOSYS and TCONF)Ooops, true. No need to check
HAVE_LINUX_MEMBARRIER_Hif we are declaring all CMDs and will be given ENOSYS. Want me to send a v5 ?
Let's give a couple days to other potential reviewers. If nothing else comes up, I can drop it before push.
Thanks,
Jan
PATCH v4 1/1 syscalls/membarrier: Add membarrier() initial test
Quoted 11 lines · Jan Stancek
Quoted 8 lines
Quoted 5 lines
Looks good to me.
We probably can drop
linux/membarrier.hconfigure check, right? (since v4 doesn't include it and unsupported kernel should hit ENOSYS and TCONF)Ooops, true. No need to check
HAVE_LINUX_MEMBARRIER_Hif we are declaring all CMDs and will be given ENOSYS. Want me to send a v5 ?Let's give a couple days to other potential reviewers. If nothing else comes up, I can drop it before push.
Thanks a lot for reviewing this.
Best,
Rafael
PATCH v4 1/1 syscalls/membarrier: Add membarrier() initial test
----- Original Message -----
Quoted 7 lines · Jan Stancek
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Looks good to me.
We probably can drop
linux/membarrier.hconfigure check, right? (since v4 doesn't include it and unsupported kernel should hit ENOSYS and TCONF)
Quoted 7 lines
Quoted 5 lines
Quoted 2 lines
Ooops, true. No need to check
HAVE_LINUX_MEMBARRIER_Hif we are declaring all CMDs and will be given ENOSYS. Want me to send a v5 ?Let's give a couple days to other potential reviewers. If nothing else comes up, I can drop it before push.
Thanks a lot for reviewing this.
Pushed.
Regards,
Jan