cvs commit: src/sys/dev/fdc fdc.c fdcvar.h

Brian Fundakowski Feldman green at FreeBSD.org
Thu Sep 23 15:47:41 PDT 2004


On Thu, Sep 23, 2004 at 05:48:19PM -0400, John Baldwin wrote:
> On Thursday 23 September 2004 05:12 pm, Joerg Wunsch wrote:
> > joerg       2004-09-23 21:12:21 UTC
> >
> >   FreeBSD src repository
> >
> >   Modified files:
> >     sys/dev/fdc          fdc.c fdcvar.h
> >   Log:
> >   Implement terminating the worker thread when the driver is about to
> >   be deregistered.
> >
> >   Not yet tested, since by now, GEOM doesn't want us to deregister.  PHK
> >   wants to fix that RSN.
> 
> Note that relying on a wakeup from your own code is not safe if you expect fdc 
> to be a module since you could wakeup the thread doing the kldunload (and 
> thus detach) and then be interrupted for an interrupt and it could unmap the 
> memory backing that function before you get a chance to run again resulting 
> in a panic.  There is a special wakeup on the proc pointer in exit1() for 
> kthreads to handle this case.  I should likely move that into kthread_exit() 
> however (which wouldn't be a functional change as far as you are concerned).

For example, in pff(4), ignoring the unrelated lines of code:

static void
pff_per_device_kthread(void *argp)
{
	mtx_lock(&sc->sc_lock);
	while (!sck->sck_exit) {
		if (!sck->sck_update && !sck->sck_reset &&
		    STAILQ_EMPTY(&sck->sck_traps))
			cv_wait(&sck->sck_needed, &sc->sc_lock);
	}
	mtx_unlock(&sc->sc_lock);
	kthread_exit(0);
}

static void
pff_kill_kthread(struct pff_softc *sc)
{
	if (sc->sc_flags & SC_KTHREAD) {
		mtx_lock(&sc->sc_lock);
		sc->sc_kthread.sck_exit = 1;
		cv_signal(&sc->sc_kthread.sck_needed);
		msleep(sc->sc_kthread.sck_proc, &sc->sc_lock, PPAUSE | PDROP,
		    "pffktc", 0);
	}
}

-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green at FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\


More information about the cvs-src mailing list