svn commit: r296909 - head/sys/ofed/drivers/infiniband/ulp/ipoib

Hans Petter Selasky hps at selasky.org
Tue Mar 15 18:20:18 UTC 2016


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


More information about the svn-src-head mailing list