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
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to