svn commit: r196159 - head/sys/net80211
Robert Watson
rwatson at FreeBSD.org
Wed Aug 12 21:55:47 UTC 2009
On Wed, 12 Aug 2009, Sam Leffler wrote:
> Drain link state event changes posted during vap destroy. This is a
> band-aid for the general problem that if_link_state_change can be
> called between if_detach and if_free leaving a task queued that has
> been free'd.
FYI to others -- we believe the proper fix should be in the ifnet framework,
but this change was the lowest-risk way to resolve the problem for 8.0.
Following the release we'll investigate having the ifnet framework provide
this protection automatically for drivers.
Robert N M Watson
Computer Laboratory
University of Cambridge
> Spotted by: thompsa
> Reviewed by: rwatson
> Approved by: re (rwatson)
>
> Modified:
> head/sys/net80211/ieee80211.c
>
> Modified: head/sys/net80211/ieee80211.c
> ==============================================================================
> --- head/sys/net80211/ieee80211.c Wed Aug 12 21:06:43 2009 (r196158)
> +++ head/sys/net80211/ieee80211.c Wed Aug 12 21:19:19 2009 (r196159)
> @@ -573,11 +573,13 @@ ieee80211_vap_detach(struct ieee80211vap
>
> /*
> * Flush any deferred vap tasks.
> - * NB: must be before ether_ifdetach() and removal from ic_vaps list
> */
> ieee80211_draintask(ic, &vap->iv_nstate_task);
> ieee80211_draintask(ic, &vap->iv_swbmiss_task);
>
> + /* XXX band-aid until ifnet handles this for us */
> + taskqueue_drain(taskqueue_swi, &ifp->if_linktask);
> +
> IEEE80211_LOCK(ic);
> KASSERT(vap->iv_state == IEEE80211_S_INIT , ("vap still running"));
> TAILQ_REMOVE(&ic->ic_vaps, vap, iv_next);
>
More information about the svn-src-head
mailing list