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