svn commit: r192604 - in user/kmacy/releng_7_2_fcs/sys: dev/hwpmc sys

John Baldwin jhb at freebsd.org
Tue May 26 18:38:09 UTC 2009


On Tuesday 26 May 2009 2:18:00 pm Kip Macy wrote:
> On Tue, May 26, 2009 at 5:30 AM, John Baldwin <jhb at freebsd.org> wrote:
> > On Friday 22 May 2009 5:45:43 pm Kip Macy wrote:
> >> Author: kmacy
> >> Date: Fri May 22 21:45:43 2009
> >> New Revision: 192604
> >> URL: http://svn.freebsd.org/changeset/base/192604
> >>
> >> Log:
> >>   - remove pmc_kthread_mtx
> >>   - replace sleep/wakeup on kthread with a condvar
> >
> > If you do not sleep on the kthread/kproc when waiting for a kthread to
> > exit, then you open up a race window.  Usually this matters more for
> > any kthreads that live in a module since the race allows the module to
> > be unmapped before the thread is finished executing code from the module
> > resulting in a fatal page fault in the kernel.
> 
> 
> Yes, that is why the kthread explicitly calls cv_signal after clearing
> the kthread pointer.

Umm, that doesn't help.  Your kthread's main routine is "physically" located 
in your kld.  It needs to get into the text of kthread_exit() before it is 
safe for your module to unload, and so you have to sleep on the kthread/kproc 
pointer to wait for the wakeup in kthread_exit() to fire.  You could have 
easily used msleep_spin() for this w/o hacking up condvar's to support spin 
locks too, FWIW.

-- 
John Baldwin


More information about the svn-src-user mailing list