On Mon, 2011-11-21 at 10:57 -0500, Nikolay Martynov wrote:
quoted
quoted
@@ -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