c1721eba53ebfeadbdd33ddbff01eb3a7326f08d
[openwrt.git] / package / mac80211 / patches / 565-ath9k_fix_lockup.patch
1 --- a/drivers/net/wireless/ath/ath9k/xmit.c
2 +++ b/drivers/net/wireless/ath/ath9k/xmit.c
3 @@ -189,8 +189,11 @@ static void ath_tx_flush_tid(struct ath_
4                 tid->state &= ~AGGR_CLEANUP;
5         }
6  
7 -       if (sendbar)
8 +       if (sendbar) {
9 +               spin_unlock_bh(&txq->axq_lock);
10                 ath_send_bar(tid, tid->seq_start);
11 +               spin_lock_bh(&txq->axq_lock);
12 +       }
13  }
14  
15  static void ath_tx_update_baw(struct ath_softc *sc, struct ath_atx_tid *tid,
16 @@ -566,7 +569,9 @@ static void ath_tx_complete_aggr(struct 
17  
18         if (bar_index >= 0) {
19                 u16 bar_seq = ATH_BA_INDEX2SEQ(seq_first, bar_index);
20 +               spin_unlock_bh(&txq->axq_lock);
21                 ath_send_bar(tid, ATH_BA_INDEX2SEQ(seq_first, bar_index + 1));
22 +               spin_lock_bh(&txq->axq_lock);
23                 if (BAW_WITHIN(tid->seq_start, tid->baw_size, bar_seq))
24                         tid->bar_index = ATH_BA_INDEX(tid->seq_start, bar_seq);
25         }