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