Date: Fri, 8 May 2009 10:49:14 -0700 From: Andrew Thompson <thompsa@FreeBSD.org> To: John Baldwin <jhb@FreeBSD.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r191912 - in head/sys/dev: ipw iwi Message-ID: <20090508174914.GC93351@citylink.fud.org.nz> In-Reply-To: <4A046EB0.9060009@FreeBSD.org> References: <200905081344.n48DiYJI092605@svn.freebsd.org> <4A046EB0.9060009@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, May 08, 2009 at 01:41:04PM -0400, John Baldwin wrote: > Andrew Thompson wrote: >> Author: thompsa >> Date: Fri May 8 13:44:33 2009 >> New Revision: 191912 >> URL: http://svn.freebsd.org/changeset/base/191912 >> >> Log: >> Drain the tasks before the interface stop call in case a restart was queued. > > Actually, you have to drain it after if_detach() so you can safely destroy > the lock. The proper order should be something like this: > > bpfdetach(ifp); > ieee80211_ifdetach(ic); > > ipw_stop(sc); > > callout_drain(); > ieee80211_draintask(); > > ipw_release(sc); > > This is the order other NIC drivers use where they do something like: > > ether_ifdetach(ifp); > FOO_LOCK(sc); > foo_stop(sc); // calls callout_stop() > FOO_UNLOCK(sc); > > callout_drain(); > taskqueue_drain(); // only if it uses tasks > > if_free(); > mtx_destroy(); ieee80211_ifdetach() will actually free the taskqueue, it doesnt use one of the persistent system ones. It wasnt incorrect before as the interface would still be brought down before net80211 detached, it was just to reduce the flip flopping. With that noted does it still need reordering? Andrew
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090508174914.GC93351>