On Mon, 2011-11-21 at 10:57 -0500, Nikolay Martynov wrote: > >> @@ -689,6 +716,8 @@ void ieee80211_stop_tx_ba_cb(struct ieee80211_vif *vif, u8 *ra, u8 tid) > >> * more. > >> */ > >> > >> + del_timer_sync(&tid_tx->session_timer); > >> + > >> ieee80211_agg_splice_packets(local, tid_tx, tid); > > > > This is a deadlock waiting to happen. > I'd really appreciate if you could be a bit more specific on why > this could lead to deadlock. Thanks! It's within the spinlock, and you take the spinlock in the timer. So this can happen: cpu 1 cpu 2 stop_tx_ba_cb spin_lock_bh(&sta->lock); start your timer function del_timer_sync wait for timer to finish spin_lock_bh(&sta->lock); johannes -- 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