Skip to content
Snippets Groups Projects
Commit ec85ea95 authored by Gabriel Krisman Bertazi's avatar Gabriel Krisman Bertazi Committed by André Almeida
Browse files

selftests: futex: Add FUTEX_WAIT_MULTIPLE wouldblock test


Add test for wouldblock return when waiting for multiple futexes. Skip
the test if it's a x32 application and the kernel returned the approtiaded
error, since this ABI is not supported for this operation.

Signed-off-by: default avatarGabriel Krisman Bertazi <krisman@collabora.com>
Co-developed-by: default avatarAndré Almeida <andrealmeid@collabora.com>
Signed-off-by: default avatarAndré Almeida <andrealmeid@collabora.com>
---
Changes since v2: none
parent 714afdc1
No related branches found
No related tags found
No related merge requests found
......@@ -12,6 +12,7 @@
*
* HISTORY
* 2009-Nov-14: Initial version by Gowrishankar <gowrishankar.m@in.ibm.com>
* 2019-Dec-13: Add WAIT_MULTIPLE test by Krisman <krisman@collabora.com>
*
*****************************************************************************/
......@@ -40,6 +41,7 @@ int main(int argc, char *argv[])
{
struct timespec to = {.tv_sec = 0, .tv_nsec = timeout_ns};
futex_t f1 = FUTEX_INITIALIZER;
struct futex_wait_block fwb = {&f1, f1+1, 0};
int res, ret = RET_PASS;
int c;
......@@ -61,7 +63,7 @@ int main(int argc, char *argv[])
}
ksft_print_header();
ksft_set_plan(1);
ksft_set_plan(2);
ksft_print_msg("%s: Test the unexpected futex value in FUTEX_WAIT\n",
basename(argv[0]));
......@@ -71,8 +73,30 @@ int main(int argc, char *argv[])
fail("futex_wait returned: %d %s\n",
res ? errno : res, res ? strerror(errno) : "");
ret = RET_FAIL;
} else
ksft_test_result_pass("futex_wait wouldblock succeeds\n");
info("Calling futex_wait_multiple on f1: %u @ %p with val=%u\n",
f1, &f1, f1+1);
res = futex_wait_multiple(&fwb, 1, NULL, FUTEX_PRIVATE_FLAG);
#ifdef __ILP32__
if (res != -1 || errno != ENOSYS) {
ksft_test_result_fail("futex_wait_multiple returned %d\n",
res < 0 ? errno : res);
ret = RET_FAIL;
} else {
ksft_test_result_skip("futex_wait_multiple not supported at x32\n");
}
#else
if (!res || errno != EWOULDBLOCK) {
ksft_test_result_fail("futex_wait_multiple returned %d\n",
res < 0 ? errno : res);
ret = RET_FAIL;
}
ksft_test_result_pass("futex_wait_multiple wouldblock succeeds\n");
#endif /* __ILP32__ */
print_result(TEST_NAME, ret);
ksft_print_cnts();
return ret;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment