Date: Tue, 15 Mar 2016 19:13:35 +0100 From: Hans Petter Selasky <hps@selasky.org> To: John Baldwin <jhb@freebsd.org> Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r296909 - head/sys/ofed/drivers/infiniband/ulp/ipoib Message-ID: <56E850CF.1000804@selasky.org> In-Reply-To: <2420759.o4YiE5Za4X@ralph.baldwin.cx> References: <201603151547.u2FFlQKN078643@repo.freebsd.org> <2420759.o4YiE5Za4X@ralph.baldwin.cx>
next in thread | previous in thread | raw e-mail | index | archive | help
On 03/15/16 18:43, John Baldwin wrote: > On Tuesday, March 15, 2016 03:47:26 PM Hans Petter Selasky wrote: >> Author: hselasky >> Date: Tue Mar 15 15:47:26 2016 >> New Revision: 296909 >> URL: https://svnweb.freebsd.org/changeset/base/296909 >> >> Log: >> Fix witness panic in the ipoib_ioctl() function when unloading the >> ipoib module. >> >> The bpfdetach() function is trying to turn off promiscious mode on the >> network interface it is attached to while holding a mutex. The fix >> consists of ignoring any further calls to the ipoib_ioctl() function >> when the network interface is going to be detached. The ipoib_ioctl() >> function might sleep. >> >> Sponsored by: Mellanox Technologies >> MFC after: 1 week > > In all of the other NIC drivers I have worked on the fix has been to call > if_detach (or ether_ifdetach) as the first step in your detach method before > you try to stop the interface. The idea is to remove external connections > from your driver first, and the only after those have drained do you actually > shut down the hardware. Given you are calling if_detach() just before > if_free() below, ipoib just seems to be broken here. > > For example, detach in a typical NIC driver does this: > > struct foo_softc *sc; > > sc = device_get_softc(dev); > ether_ifdetach(sc->sc_ifp); > FOO_LOCK(sc); > foo_stop(sc); > FOO_UNLOCK(sc); > callout_drain(&sc->timer); > bus_teardown_intr(...); > bus_release_resource(...); > if_free(sc->sc_ifp); > > Similarly, devices with a character device in /dev should be calling > destroy_dev() first before shutting down hardware, etc. > I'll have a look at it. Thank you for your input. --HPS
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?56E850CF.1000804>