Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Oct 2007 21:20:31 -0600 (MDT)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        julian@elischer.org
Cc:        cvs-src@freebsd.org, src-committers@freebsd.org, julian@freebsd.org, cvs-all@freebsd.org, jhb@freebsd.org
Subject:   Re: cvs commit: src/sys/sys kthread.h src/sys/kern kern_kthread.c
Message-ID:  <20071026.212031.-1607499905.imp@bsdimp.com>
In-Reply-To: <4722399E.3090209@elischer.org>
References:  <200710261703.l9QH3Nmt061137@repoman.freebsd.org> <200710261420.34168.jhb@freebsd.org> <4722399E.3090209@elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <4722399E.3090209@elischer.org>
            Julian Elischer <julian@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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071026.212031.-1607499905.imp>