On Wed, Feb 20, 2013 at 09:41:08AM -0800, greearb@xxxxxxxxxxxxxxx wrote: > From: Ben Greear <greearb@xxxxxxxxxxxxxxx> > > Re-order the quiesce code so that timers are > always stopped before work-items are flushed. This was > not the problem I saw, but I think it may still be more > correct. I posted patch which remove quiesce functions, so this one can be skipped. http://marc.info/?l=linux-wireless&m=136179302820130&w=2 Stanislaw > --- > net/mac80211/mlme.c | 13 ++++++++----- > 1 files changed, 8 insertions(+), 5 deletions(-) > > diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c > index 164ecf0..4001d1c 100644 > --- a/net/mac80211/mlme.c > +++ b/net/mac80211/mlme.c > @@ -2946,6 +2946,13 @@ void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata) > { > struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; > > + /* Stop timers before deleting work items, as timers could > + * race and re-add the work-items. > + * These will be re-established on connection. > + */ > + del_timer_sync(&ifmgd->conn_mon_timer); > + del_timer_sync(&ifmgd->bcn_mon_timer); > + > /* > * we need to use atomic bitops for the running bits > * only because both timers might fire at the same > @@ -2960,13 +2967,9 @@ void ieee80211_sta_quiesce(struct ieee80211_sub_if_data *sdata) > if (del_timer_sync(&ifmgd->timer)) > set_bit(TMR_RUNNING_TIMER, &ifmgd->timers_running); > > - cancel_work_sync(&ifmgd->chswitch_work); > if (del_timer_sync(&ifmgd->chswitch_timer)) > set_bit(TMR_RUNNING_CHANSW, &ifmgd->timers_running); > - > - /* these will just be re-established on connection */ > - del_timer_sync(&ifmgd->conn_mon_timer); > - del_timer_sync(&ifmgd->bcn_mon_timer); > + cancel_work_sync(&ifmgd->chswitch_work); > } > > void ieee80211_sta_restart(struct ieee80211_sub_if_data *sdata) > -- > 1.7.3.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-wireless" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html