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 @@ ...@@ -12,6 +12,7 @@
* *
* HISTORY * HISTORY
* 2009-Nov-14: Initial version by Gowrishankar <gowrishankar.m@in.ibm.com> * 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[]) ...@@ -40,6 +41,7 @@ int main(int argc, char *argv[])
{ {
struct timespec to = {.tv_sec = 0, .tv_nsec = timeout_ns}; struct timespec to = {.tv_sec = 0, .tv_nsec = timeout_ns};
futex_t f1 = FUTEX_INITIALIZER; futex_t f1 = FUTEX_INITIALIZER;
struct futex_wait_block fwb = {&f1, f1+1, 0};
int res, ret = RET_PASS; int res, ret = RET_PASS;
int c; int c;
...@@ -61,7 +63,7 @@ int main(int argc, char *argv[]) ...@@ -61,7 +63,7 @@ int main(int argc, char *argv[])
} }
ksft_print_header(); ksft_print_header();
ksft_set_plan(1); ksft_set_plan(2);
ksft_print_msg("%s: Test the unexpected futex value in FUTEX_WAIT\n", ksft_print_msg("%s: Test the unexpected futex value in FUTEX_WAIT\n",
basename(argv[0])); basename(argv[0]));
...@@ -71,8 +73,30 @@ int main(int argc, char *argv[]) ...@@ -71,8 +73,30 @@ int main(int argc, char *argv[])
fail("futex_wait returned: %d %s\n", fail("futex_wait returned: %d %s\n",
res ? errno : res, res ? strerror(errno) : ""); res ? errno : res, res ? strerror(errno) : "");
ret = RET_FAIL; 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; 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