From owner-cvs-src@FreeBSD.ORG Thu Sep 23 22:47:41 2004 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 60E0E16A4CE; Thu, 23 Sep 2004 22:47:41 +0000 (GMT) Received: from green.homeunix.org (pcp04368961pcs.nrockv01.md.comcast.net [69.140.212.7]) by mx1.FreeBSD.org (Postfix) with ESMTP id CDE7F43D5A; Thu, 23 Sep 2004 22:47:40 +0000 (GMT) (envelope-from green@green.homeunix.org) Received: from green.homeunix.org (green@localhost [127.0.0.1]) by green.homeunix.org (8.13.1/8.13.1) with ESMTP id i8NMleTv019228; Thu, 23 Sep 2004 18:47:40 -0400 (EDT) (envelope-from green@green.homeunix.org) Received: (from green@localhost) by green.homeunix.org (8.13.1/8.13.1/Submit) id i8NMldBe019227; Thu, 23 Sep 2004 18:47:39 -0400 (EDT) (envelope-from green) Date: Thu, 23 Sep 2004 18:47:39 -0400 From: Brian Fundakowski Feldman To: John Baldwin Message-ID: <20040923224739.GE959@green.homeunix.org> References: <200409232112.i8NLCLgQ065917@repoman.freebsd.org> <200409231748.19685.jhb@FreeBSD.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200409231748.19685.jhb@FreeBSD.org> User-Agent: Mutt/1.5.6i cc: cvs-src@FreeBSD.org cc: src-committers@FreeBSD.org cc: cvs-all@FreeBSD.org cc: Joerg Wunsch Subject: Re: cvs commit: src/sys/dev/fdc fdc.c fdcvar.h X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Sep 2004 22:47:41 -0000 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@FreeBSD.org \ The Power to Serve! \ Opinions expressed are my own. \,,,,,,,,,,,,,,,,,,,,,,\