summaryrefslogtreecommitdiffstats
path: root/sys/sys/kthread.h
diff options
context:
space:
mode:
authorattilio <attilio@FreeBSD.org>2010-01-24 15:07:00 +0000
committerattilio <attilio@FreeBSD.org>2010-01-24 15:07:00 +0000
commita4281bb8848a39a697bf8c77c4e958baf048bdea (patch)
treeb9469e81eedd64257cbfcad33ebdccc86a58a8d2 /sys/sys/kthread.h
parent62a013da482cd3be2013620de2512c32e56adb68 (diff)
downloadFreeBSD-src-a4281bb8848a39a697bf8c77c4e958baf048bdea.zip
FreeBSD-src-a4281bb8848a39a697bf8c77c4e958baf048bdea.tar.gz
- 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
Diffstat (limited to 'sys/sys/kthread.h')
-rw-r--r--sys/sys/kthread.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/sys/kthread.h b/sys/sys/kthread.h
index e4d9c5a..b06ff69 100644
--- a/sys/sys/kthread.h
+++ b/sys/sys/kthread.h
@@ -73,7 +73,7 @@ int kthread_resume(struct thread *);
void kthread_shutdown(void *, int);
void kthread_start(const void *);
int kthread_suspend(struct thread *, int);
-void kthread_suspend_check(struct thread *);
+void kthread_suspend_check(void);
#endif /* !_SYS_KTHREAD_H_ */
OpenPOWER on IntegriCloud