1*053f45beSAndroid Build Coastguard WorkerFrom cd15fde3f6ff9bff56b04090c1fde3cc40378453 Mon Sep 17 00:00:00 2001
2*053f45beSAndroid Build Coastguard WorkerFrom: Edward Liaw <[email protected]>
3*053f45beSAndroid Build Coastguard WorkerDate: Fri, 6 Oct 2023 20:04:21 +0000
4*053f45beSAndroid Build Coastguard WorkerSubject: [PATCH] futex: Skip when futex_waitv/shmget not implemented
5*053f45beSAndroid Build Coastguard Worker
6*053f45beSAndroid Build Coastguard Workergetshm and futex_waitv are not implemented in Android.  These rely on
7*053f45beSAndroid Build Coastguard WorkerSystem V shared memory functions which is disallowed by selinux.
8*053f45beSAndroid Build Coastguard Worker
9*053f45beSAndroid Build Coastguard WorkerBug: 234151152
10*053f45beSAndroid Build Coastguard WorkerTest: atest vts_linux_kselftest_arm_64:futex_functional_run.sh_arm_64
11*053f45beSAndroid Build Coastguard WorkerSigned-off-by: Edward Liaw <[email protected]>
12*053f45beSAndroid Build Coastguard Worker---
13*053f45beSAndroid Build Coastguard Worker .../testing/selftests/futex/functional/futex_wait.c |  5 +++++
14*053f45beSAndroid Build Coastguard Worker .../selftests/futex/functional/futex_wait_timeout.c | 11 ++++++++---
15*053f45beSAndroid Build Coastguard Worker .../futex/functional/futex_wait_wouldblock.c        | 13 +++++++++----
16*053f45beSAndroid Build Coastguard Worker tools/testing/selftests/futex/functional/run.sh     |  6 ++----
17*053f45beSAndroid Build Coastguard Worker 4 files changed, 24 insertions(+), 11 deletions(-)
18*053f45beSAndroid Build Coastguard Worker
19*053f45beSAndroid Build Coastguard Workerdiff --git a/tools/testing/selftests/futex/functional/futex_wait.c b/tools/testing/selftests/futex/functional/futex_wait.c
20*053f45beSAndroid Build Coastguard Workerindex 685140d9b93d..6267680c3567 100644
21*053f45beSAndroid Build Coastguard Worker--- a/tools/testing/selftests/futex/functional/futex_wait.c
22*053f45beSAndroid Build Coastguard Worker+++ b/tools/testing/selftests/futex/functional/futex_wait.c
23*053f45beSAndroid Build Coastguard Worker@@ -96,6 +96,11 @@ int main(int argc, char *argv[])
24*053f45beSAndroid Build Coastguard Worker 	/* Testing an anon page shared memory */
25*053f45beSAndroid Build Coastguard Worker 	shm_id = shmget(IPC_PRIVATE, 4096, IPC_CREAT | 0666);
26*053f45beSAndroid Build Coastguard Worker 	if (shm_id < 0) {
27*053f45beSAndroid Build Coastguard Worker+		if (errno == ENOSYS) {
28*053f45beSAndroid Build Coastguard Worker+			ksft_test_result_skip("shmget returned: %d %s",
29*053f45beSAndroid Build Coastguard Worker+					      errno, strerror(errno));
30*053f45beSAndroid Build Coastguard Worker+			exit(KSFT_SKIP);
31*053f45beSAndroid Build Coastguard Worker+		}
32*053f45beSAndroid Build Coastguard Worker 		perror("shmget");
33*053f45beSAndroid Build Coastguard Worker 		exit(1);
34*053f45beSAndroid Build Coastguard Worker 	}
35*053f45beSAndroid Build Coastguard Workerdiff --git a/tools/testing/selftests/futex/functional/futex_wait_timeout.c b/tools/testing/selftests/futex/functional/futex_wait_timeout.c
36*053f45beSAndroid Build Coastguard Workerindex 3651ce17beeb..cff38f9de0ca 100644
37*053f45beSAndroid Build Coastguard Worker--- a/tools/testing/selftests/futex/functional/futex_wait_timeout.c
38*053f45beSAndroid Build Coastguard Worker+++ b/tools/testing/selftests/futex/functional/futex_wait_timeout.c
39*053f45beSAndroid Build Coastguard Worker@@ -61,9 +61,14 @@ void *get_pi_lock(void *arg)
40*053f45beSAndroid Build Coastguard Worker static void test_timeout(int res, int *ret, char *test_name, int err)
41*053f45beSAndroid Build Coastguard Worker {
42*053f45beSAndroid Build Coastguard Worker 	if (!res || errno != err) {
43*053f45beSAndroid Build Coastguard Worker-		ksft_test_result_fail("%s returned %d\n", test_name,
44*053f45beSAndroid Build Coastguard Worker-				      res < 0 ? errno : res);
45*053f45beSAndroid Build Coastguard Worker-		*ret = RET_FAIL;
46*053f45beSAndroid Build Coastguard Worker+		if (errno == ENOSYS) {
47*053f45beSAndroid Build Coastguard Worker+			ksft_test_result_skip("%s returned %d\n", test_name,
48*053f45beSAndroid Build Coastguard Worker+					      errno);
49*053f45beSAndroid Build Coastguard Worker+		} else {
50*053f45beSAndroid Build Coastguard Worker+			ksft_test_result_fail("%s returned %d\n", test_name,
51*053f45beSAndroid Build Coastguard Worker+					      res < 0 ? errno : res);
52*053f45beSAndroid Build Coastguard Worker+			*ret = RET_FAIL;
53*053f45beSAndroid Build Coastguard Worker+		}
54*053f45beSAndroid Build Coastguard Worker 	} else {
55*053f45beSAndroid Build Coastguard Worker 		ksft_test_result_pass("%s succeeds\n", test_name);
56*053f45beSAndroid Build Coastguard Worker 	}
57*053f45beSAndroid Build Coastguard Workerdiff --git a/tools/testing/selftests/futex/functional/futex_wait_wouldblock.c b/tools/testing/selftests/futex/functional/futex_wait_wouldblock.c
58*053f45beSAndroid Build Coastguard Workerindex 7d7a6a06cdb7..7606440e01a0 100644
59*053f45beSAndroid Build Coastguard Worker--- a/tools/testing/selftests/futex/functional/futex_wait_wouldblock.c
60*053f45beSAndroid Build Coastguard Worker+++ b/tools/testing/selftests/futex/functional/futex_wait_wouldblock.c
61*053f45beSAndroid Build Coastguard Worker@@ -98,10 +98,15 @@ int main(int argc, char *argv[])
62*053f45beSAndroid Build Coastguard Worker 	info("Calling futex_waitv on f1: %u @ %p with val=%u\n", f1, &f1, f1+1);
63*053f45beSAndroid Build Coastguard Worker 	res = futex_waitv(&waitv, 1, 0, &to, CLOCK_MONOTONIC);
64*053f45beSAndroid Build Coastguard Worker 	if (!res || errno != EWOULDBLOCK) {
65*053f45beSAndroid Build Coastguard Worker-		ksft_test_result_pass("futex_waitv returned: %d %s\n",
66*053f45beSAndroid Build Coastguard Worker-				      res ? errno : res,
67*053f45beSAndroid Build Coastguard Worker-				      res ? strerror(errno) : "");
68*053f45beSAndroid Build Coastguard Worker-		ret = RET_FAIL;
69*053f45beSAndroid Build Coastguard Worker+		if (errno == ENOSYS) {
70*053f45beSAndroid Build Coastguard Worker+			ksft_test_result_skip("futex_waitv returned %d\n",
71*053f45beSAndroid Build Coastguard Worker+					      errno);
72*053f45beSAndroid Build Coastguard Worker+		} else {
73*053f45beSAndroid Build Coastguard Worker+			ksft_test_result_fail("futex_waitv returned: %d %s\n",
74*053f45beSAndroid Build Coastguard Worker+					      res ? errno : res,
75*053f45beSAndroid Build Coastguard Worker+					      res ? strerror(errno) : "");
76*053f45beSAndroid Build Coastguard Worker+			ret = RET_FAIL;
77*053f45beSAndroid Build Coastguard Worker+		}
78*053f45beSAndroid Build Coastguard Worker 	} else {
79*053f45beSAndroid Build Coastguard Worker 		ksft_test_result_pass("futex_waitv\n");
80*053f45beSAndroid Build Coastguard Worker 	}
81*053f45beSAndroid Build Coastguard Workerdiff --git a/tools/testing/selftests/futex/functional/run.sh b/tools/testing/selftests/futex/functional/run.sh
82*053f45beSAndroid Build Coastguard Workerindex f7bd16078707..82ccc3f04d33 100755
83*053f45beSAndroid Build Coastguard Worker--- a/tools/testing/selftests/futex/functional/run.sh
84*053f45beSAndroid Build Coastguard Worker+++ b/tools/testing/selftests/futex/functional/run.sh
85*053f45beSAndroid Build Coastguard Worker@@ -84,10 +84,8 @@ echo
86*053f45beSAndroid Build Coastguard Worker run_test ./futex_wait_uninitialized_heap $COLOR
87*053f45beSAndroid Build Coastguard Worker run_test ./futex_wait_private_mapped_file $COLOR
88*053f45beSAndroid Build Coastguard Worker
89*053f45beSAndroid Build Coastguard Worker-# b/234151152
90*053f45beSAndroid Build Coastguard Worker-# Disable because system v shared memory not available
91*053f45beSAndroid Build Coastguard Worker-#echo
92*053f45beSAndroid Build Coastguard Worker-#run_test ./futex_wait $COLOR
93*053f45beSAndroid Build Coastguard Worker+echo
94*053f45beSAndroid Build Coastguard Worker+run_test ./futex_wait $COLOR
95*053f45beSAndroid Build Coastguard Worker
96*053f45beSAndroid Build Coastguard Worker echo
97*053f45beSAndroid Build Coastguard Worker run_test ./futex_requeue $COLOR
98*053f45beSAndroid Build Coastguard Worker--
99*053f45beSAndroid Build Coastguard Worker2.42.0.609.gbb76f46606-goog
100*053f45beSAndroid Build Coastguard Worker
101