diff options
author | Felix Fietkau <nbd@openwrt.org> | 2010-11-19 21:08:46 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-11-22 15:58:38 -0500 |
commit | e1566d1f322b41b1ac3acf33407a0cfe2a311b75 (patch) | |
tree | 9cd53f171436ec3070e3e82e1b51cbde18b09f20 /drivers/net/wireless | |
parent | b5bb2f2beb4d54597fd54075480fc4874a9c08dc (diff) |
ath9k: fix recursive locking in the tx flush path
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Tested-by: Ben Greear <greearb@candelatech.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index c63e283ff97f..495432ec85a9 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -163,6 +163,7 @@ static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid) | |||
163 | bf = list_first_entry(&tid->buf_q, struct ath_buf, list); | 163 | bf = list_first_entry(&tid->buf_q, struct ath_buf, list); |
164 | list_move_tail(&bf->list, &bf_head); | 164 | list_move_tail(&bf->list, &bf_head); |
165 | 165 | ||
166 | spin_unlock_bh(&txq->axq_lock); | ||
166 | fi = get_frame_info(bf->bf_mpdu); | 167 | fi = get_frame_info(bf->bf_mpdu); |
167 | if (fi->retries) { | 168 | if (fi->retries) { |
168 | ath_tx_update_baw(sc, tid, fi->seqno); | 169 | ath_tx_update_baw(sc, tid, fi->seqno); |
@@ -170,6 +171,7 @@ static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid) | |||
170 | } else { | 171 | } else { |
171 | ath_tx_send_normal(sc, txq, tid, &bf_head); | 172 | ath_tx_send_normal(sc, txq, tid, &bf_head); |
172 | } | 173 | } |
174 | spin_lock_bh(&txq->axq_lock); | ||
173 | } | 175 | } |
174 | 176 | ||
175 | spin_unlock_bh(&txq->axq_lock); | 177 | spin_unlock_bh(&txq->axq_lock); |