diff options
author | Christian Lamparter <chunkeey@googlemail.com> | 2010-09-17 18:15:13 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-09-21 11:05:26 -0400 |
commit | 2c7808d9345b91bb19f6bfaebf7b9e0916b0859a (patch) | |
tree | 623d614f7320b5164f64aba758a02dd2e40d02c8 /drivers | |
parent | 735761108f435a30bbabb5254fc5a8e17b99f2a1 (diff) |
carl9170: fix hang in AP mode when HT STA does PSM
This is a obvious bug, skb_queue_walk does not
work if the iterator gets removed from the queue.
Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath/carl9170/main.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c index ea49d54ce03b..43de9dfa5820 100644 --- a/drivers/net/wireless/ath/carl9170/main.c +++ b/drivers/net/wireless/ath/carl9170/main.c | |||
@@ -1412,7 +1412,7 @@ static void carl9170_op_sta_notify(struct ieee80211_hw *hw, | |||
1412 | { | 1412 | { |
1413 | struct ar9170 *ar = hw->priv; | 1413 | struct ar9170 *ar = hw->priv; |
1414 | struct carl9170_sta_info *sta_info = (void *) sta->drv_priv; | 1414 | struct carl9170_sta_info *sta_info = (void *) sta->drv_priv; |
1415 | struct sk_buff *skb; | 1415 | struct sk_buff *skb, *tmp; |
1416 | struct sk_buff_head free; | 1416 | struct sk_buff_head free; |
1417 | int i; | 1417 | int i; |
1418 | 1418 | ||
@@ -1462,7 +1462,7 @@ static void carl9170_op_sta_notify(struct ieee80211_hw *hw, | |||
1462 | 1462 | ||
1463 | for (i = 0; i < ar->hw->queues; i++) { | 1463 | for (i = 0; i < ar->hw->queues; i++) { |
1464 | spin_lock_bh(&ar->tx_pending[i].lock); | 1464 | spin_lock_bh(&ar->tx_pending[i].lock); |
1465 | skb_queue_walk(&ar->tx_pending[i], skb) { | 1465 | skb_queue_walk_safe(&ar->tx_pending[i], skb, tmp) { |
1466 | struct _carl9170_tx_superframe *super; | 1466 | struct _carl9170_tx_superframe *super; |
1467 | struct ieee80211_hdr *hdr; | 1467 | struct ieee80211_hdr *hdr; |
1468 | 1468 | ||