]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
wl12xx: use ieee80211_free_txskb()
authorEliad Peller <eliad@wizery.com>
Tue, 13 Dec 2011 13:26:38 +0000 (15:26 +0200)
committerLuciano Coelho <coelho@ti.com>
Thu, 15 Dec 2011 07:58:42 +0000 (09:58 +0200)
Use the newly introduced ieee80211_free_txskb() instead
of dev_kfree_skb() for failed tx packets.

Additionally, if the skb is a dummy packet, re-enqueue
it (as the fw expects it) instead of freeing it.

Reported-by: Arik Nemtsov <arik@wizery.com>
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
drivers/net/wireless/wl12xx/main.c
drivers/net/wireless/wl12xx/tx.c

index 2f7bfa86c8cd51e8256710ce10528119289acfcc..333bc294f1d9446e77e0237e4131086234c4a41d 100644 (file)
@@ -1448,7 +1448,7 @@ static void wl1271_op_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
        if (hlid == WL12XX_INVALID_LINK_ID ||
            (wlvif && !test_bit(hlid, wlvif->links_map))) {
                wl1271_debug(DEBUG_TX, "DROP skb hlid %d q %d", hlid, q);
-               dev_kfree_skb(skb);
+               ieee80211_free_txskb(hw, skb);
                goto out;
        }
 
index 7d727ee6ddf6216228af8f13bce9b3e710905ecb..4508ccd78328017b173215fbfec69ea3a6c5c413 100644 (file)
@@ -740,7 +740,14 @@ void wl1271_tx_work_locked(struct wl1271 *wl)
                        set_bit(WL1271_FLAG_FW_TX_BUSY, &wl->flags);
                        goto out_ack;
                } else if (ret < 0) {
-                       dev_kfree_skb(skb);
+                       if (wl12xx_is_dummy_packet(wl, skb))
+                               /*
+                                * fw still expects dummy packet,
+                                * so re-enqueue it
+                                */
+                               wl1271_skb_queue_head(wl, wlvif, skb);
+                       else
+                               ieee80211_free_txskb(wl->hw, skb);
                        goto out_ack;
                }
                buf_offset += ret;