cvs commit: src/sys/sys kthread.h src/sys/kern kern_kthread.c
M. Warner Losh
imp at bsdimp.com
Fri Oct 26 20:21:08 PDT 2007
In message: <4722399E.3090209 at elischer.org>
Julian Elischer <julian at elischer.org> writes:
: John Baldwin wrote:
: > On Friday 26 October 2007 01:03:22 pm Julian Elischer wrote:
: >> julian 2007-10-26 17:03:22 UTC
: >>
: >> FreeBSD src repository
: >>
: >> Modified files:
: >> sys/sys kthread.h
: >> sys/kern kern_kthread.c
: >> Log:
: >> kthread_exit needs no stinkin argument.
: >
: > So an important property of the old kthread_exit() (now kproc_exit()) was that
: > a kernel module could safely ensure that a kthread it created was out of the
: > kernel module's text segment before returning from a module unload hook to
: > prevent kernel panics by sleeping on the proc pointer with the proc lock like
: > so:
: >
: > mtx_lock(&mylock);
: > PROC_LOCK(p);
: > signal_death = 1;
: > mtx_unlock(&mylock);
: > msleep(p, &p->p_mtx, ...);
: > PROC_UNLOCK(p);
: >
: > And have the main thread do this:
: >
: > ...
: > mtx_lock(&mylock);
: > while (!signal_death) {
: > ... fetch work, may drop mylock...
: > }
: > mtx_unlock(&mylock);
: > kthread_exit(0);
:
: the kproc_exit still does..
:
: I didn't see any users of it in the code that I've switched to kthreads
: so far so I haven't added it to the kthread_exit() yet.
:
: the intr code does:
: thread_lock(td);
: ithread->it_flags |= IT_DEAD;
: if (TD_AWAITING_INTR(td)) {
: TD_CLR_IWAIT(td);
: sched_add(td, SRQ_INTR);
: }
: thread_unlock(td);
:
: but no wait.
:
: but I'll look further.. maybe it's in the drivers?
See dev/pccbb/pccbb.c for an example of the old usage.
Warner
More information about the cvs-src
mailing list