Skip site navigation (1)Skip section navigation (2)
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>