svn commit: r191912 - in head/sys/dev: ipw iwi

Andrew Thompson thompsa at FreeBSD.org
Fri May 8 17:49:21 UTC 2009


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


More information about the svn-src-head mailing list