aboutsummaryrefslogtreecommitdiff
path: root/lib/libthr/tests/Makefile
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2020-11-17 03:34:01 +0000
committerKyle Evans <kevans@FreeBSD.org>2020-11-17 03:34:01 +0000
commit4be0a1b5874b9713962580bafed2e452c6d104eb (patch)
treeca12a08b2a00e82f55d218cc634720aaa2475fad /lib/libthr/tests/Makefile
parent231f59920aeae8e07e7d5619df14063e128bfc38 (diff)
downloadsrc-4be0a1b5874b9713962580bafed2e452c6d104eb.tar.gz
src-4be0a1b5874b9713962580bafed2e452c6d104eb.zip
_umtx_op: fix a compat32 bug in UMTX_OP_NWAKE_PRIVATE
Specifically, if we're waking up some value n > BATCH_SIZE, then the copyin(9) is wrong on the second iteration due to upp being the wrong type. upp is currently a uint32_t**, so upp + pos advances it by twice as many elements as it should (host pointer size vs. compat32 pointer size). Fix it by just making upp a uint32_t*; it's still technically a double pointer, but the distinction doesn't matter all that much here since we're just doing arithmetic on it. Add a test case that demonstrates the problem, placed with the libthr tests since one messing with _umtx_op should be running these tests. Running under compat32, the new test case will hang as threads after the first 128 get missed in the wake. it's not immediately clear how to hit it in practice, since pthread_cond_broadcast() uses a smaller (sleepq batch?) size observed to be around ~50 -- I did not spend much time digging into it. The uintptr_t change makes no functional difference, but i've tossed it in since it's more accurate (semantically). Reported by: Andrew Gierth (andrew_tao173.riddles.org.uk, inspection) Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D27231
Notes
Notes: svn path=/head/; revision=367743
Diffstat (limited to 'lib/libthr/tests/Makefile')
-rw-r--r--lib/libthr/tests/Makefile2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/libthr/tests/Makefile b/lib/libthr/tests/Makefile
index 9330297bc579..8dd0b8f1dcc0 100644
--- a/lib/libthr/tests/Makefile
+++ b/lib/libthr/tests/Makefile
@@ -35,6 +35,8 @@ NETBSD_ATF_TESTS_SH+= cancel_test
NETBSD_ATF_TESTS_SH+= exit_test
NETBSD_ATF_TESTS_SH+= resolv_test
+ATF_TESTS_C+= umtx_op_test
+
LIBADD+= pthread
LIBADD.fpu_test+= m
LIBADD.sem_test+= rt