aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJuuso Oikarinen <juuso.oikarinen@nokia.com>2010-04-01 04:38:24 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-04-06 16:55:14 -0400
commit6bbe89de24ffe0f849e67edba7def3f39f1f80d8 (patch)
tree3041f359325cfb45b2703fee8aee671692897eb6 /drivers
parent1a186a515a1e4446cdde2b4341dc361ba6bc76ed (diff)
wl1271: Fix tx queue flushing
This patch modifies tx-queue flushing to correspond with tx-path - i.e. also frames for which no ack was requested are forwarded to the mac80211 for disposal. Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com> Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/wl12xx/wl1271_tx.c18
1 files changed, 1 insertions, 17 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1271_tx.c b/drivers/net/wireless/wl12xx/wl1271_tx.c
index 0b8cdb4e22b6..62db79508ddf 100644
--- a/drivers/net/wireless/wl12xx/wl1271_tx.c
+++ b/drivers/net/wireless/wl12xx/wl1271_tx.c
@@ -416,35 +416,19 @@ void wl1271_tx_flush(struct wl1271 *wl)
416{ 416{
417 int i; 417 int i;
418 struct sk_buff *skb; 418 struct sk_buff *skb;
419 struct ieee80211_tx_info *info;
420 419
421 /* TX failure */ 420 /* TX failure */
422/* control->flags = 0; FIXME */ 421/* control->flags = 0; FIXME */
423 422
424 while ((skb = skb_dequeue(&wl->tx_queue))) { 423 while ((skb = skb_dequeue(&wl->tx_queue))) {
425 info = IEEE80211_SKB_CB(skb);
426
427 wl1271_debug(DEBUG_TX, "flushing skb 0x%p", skb); 424 wl1271_debug(DEBUG_TX, "flushing skb 0x%p", skb);
428
429 if (!(info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS)) {
430 kfree_skb(skb);
431 continue;
432 }
433
434 ieee80211_tx_status(wl->hw, skb); 425 ieee80211_tx_status(wl->hw, skb);
435 } 426 }
436 427
437 for (i = 0; i < ACX_TX_DESCRIPTORS; i++) 428 for (i = 0; i < ACX_TX_DESCRIPTORS; i++)
438 if (wl->tx_frames[i] != NULL) { 429 if (wl->tx_frames[i] != NULL) {
439 skb = wl->tx_frames[i]; 430 skb = wl->tx_frames[i];
440 info = IEEE80211_SKB_CB(skb);
441
442 if (!(info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS)) {
443 kfree_skb(skb);
444 continue;
445 }
446
447 ieee80211_tx_status(wl->hw, skb);
448 wl->tx_frames[i] = NULL; 431 wl->tx_frames[i] = NULL;
432 ieee80211_tx_status(wl->hw, skb);
449 } 433 }
450} 434}