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