Date: Sun, 24 Jan 2010 15:07:00 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: cvs-src-old@freebsd.org Subject: cvs commit: src/share/man/man9 kthread.9 src/sys/kern kern_kthread.c src/sys/sys kthread.h Message-ID: <201001241510.o0OFAS6H064822@repoman.freebsd.org>
index | next in thread | raw e-mail
attilio 2010-01-24 15:07:00 UTC
FreeBSD src repository
Modified files:
share/man/man9 kthread.9
sys/kern kern_kthread.c
sys/sys kthread.h
Log:
SVN rev 202933 on 2010-01-24 15:07:00Z by attilio
- Fix the kthread_{suspend, resume, suspend_check}() locking.
In the current code, the locking is completely broken and may lead
easilly to deadlocks. Fix it by using the proc_mtx, linked to the
suspending thread, as lock for the operation. Keep using the
thread_lock for setting and reading the flag even if it is not entirely
necessary (atomic ops may do it as well, but this way the code is more
readable).
- Fix a deadlock within kthread_suspend().
The suspender should not sleep on a different channel wrt the suspended
thread, or, otherwise, the awaker should wakeup both. Uniform the
interface to what the kproc_* counterparts do (sleeping on the same
channel).
- Change the kthread_suspend_check() prototype.
kthread_suspend_check() always assumes curthread and must only refer to
it, so skip the thread pointer as it may be easilly mistaken.
If curthread is not a kthread, the system will panic.
In collabouration with: jhb
Tested by: Giovanni Trematerra
<giovanni dot trematerra at gmail dot com>
MFC: 2 weeks
Revision Changes Path
1.21 +4 -7 src/share/man/man9/kthread.9
1.51 +52 -18 src/sys/kern/kern_kthread.c
1.13 +1 -1 src/sys/sys/kthread.h
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001241510.o0OFAS6H064822>
