Date: Tue, 3 Jun 2003 10:34:04 -0700 (PDT) From: Nate Lawson <nate@root.org> To: Sam Leffler <sam@errno.com> Cc: cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/dev/ubsec ubsec.c ubsecvar.h Message-ID: <20030603101652.V23167@root.org> In-Reply-To: <088401c329de$e82f7a50$52557f42@errno.com> References: <20030602233211.2492D37B4A2@hub.freebsd.org> <20030602234329.T22029@root.org> <088401c329de$e82f7a50$52557f42@errno.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 3 Jun 2003, Sam Leffler wrote: > > On Mon, 2 Jun 2003, Sam Leffler wrote: > > > o don't use locking on detach; disabling interrupts is sufficient (I > think) > > > > Unfortunately it's not if you're on a shared interrupt. You need to > > call bus_teardown_intr() before you are detached from the ithread. See > > the thread near this message: > > Message-ID: <1742240000.1051807110@aslan.btc.adaptec.com> > > If you're interested look at the change. I understood the device could be > on a shared irq. Reviewing the change is what prompted the comment: #### @@ -500,11 +502,11 @@ ubsec_detach(device_t dev) { struct ubsec_softc *sc = device_get_softc(dev); -KASSERT(sc != NULL, ("ubsec_detach: null software carrier")); - /* XXX wait/abort active ops */ -UBSEC_LOCK(sc); +/* disable interrupts */ +WRITE_REG(sc, BS_CTRL, READ_REG(sc, BS_CTRL) &~ +(BS_CTRL_MCR2INT | BS_CTRL_MCR1INT | BS_CTRL_DMAERR)); callout_stop(&sc->sc_rngto); #### That disables the device's interrupts but does not unhook the ih. That happens further down. So if interrupts occur, you are depending on ubsec_intr()'s check whether it is enabled or not (BS_STAT) to see if the interrupt is for ubsec. That seems fine to me (after further review). But if an instance of ubsec_intr() is already active, might there be problems? I'm thinking of it locking mcr1lock and then detach() calling mtx_destroy() while it is active or other similar issues. This is probably why you have "/* XXX wait/abort active ops */" at the top. My question was whether this should be a function of the underlying ithread subsystem and not the responsibility of each driver. -Nate
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030603101652.V23167>