diff options
author | attilio <attilio@FreeBSD.org> | 2007-07-27 09:21:18 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2007-07-27 09:21:18 +0000 |
commit | c2dedaa0a97d92108e28cc25b06bf5442d7488e9 (patch) | |
tree | 5ce631f90c03f140488b25b2b959bec880345b06 /sys/kern/subr_bus.c | |
parent | fec5a725735c325ad4cc919954caed39059983c6 (diff) | |
download | FreeBSD-src-c2dedaa0a97d92108e28cc25b06bf5442d7488e9.zip FreeBSD-src-c2dedaa0a97d92108e28cc25b06bf5442d7488e9.tar.gz |
Actually, upcalls cannot be freed while destroying the thread because we
should call uma_zfree() with various spinlock helds. Rearranging the
code would not help here because we cannot break atomicity respect
prcess spinlock, so the only one choice we have is to defer the operation.
In order to do this use a global queue synchronized through the kse_lock
spinlock which is freed at any thread_alloc() / thread_wait() through a
call to thread_reap().
Note that this approach is not ideal as we should want a per-process
list of zombie upcalls, but it follows initial guidelines of KSE authors.
Tested by: jkim, pav
Approved by: jeff, julian
Approved by: re
Diffstat (limited to 'sys/kern/subr_bus.c')
0 files changed, 0 insertions, 0 deletions