mac80211: use ieee80211_free_txskb in a few more places
[openwrt/openwrt.git] / package / mac80211 / patches / 527-mac80211_use_ieee80211_free_txskb.patch
1 --- a/net/mac80211/tx.c
2 +++ b/net/mac80211/tx.c
3 @@ -354,7 +354,7 @@ static void purge_old_ps_buffers(struct
4 total += skb_queue_len(&sta->ps_tx_buf[ac]);
5 if (skb) {
6 purged++;
7 - dev_kfree_skb(skb);
8 + ieee80211_free_txskb(&local->hw, skb);
9 break;
10 }
11 }
12 @@ -466,7 +466,7 @@ ieee80211_tx_h_unicast_ps_buf(struct iee
13 ps_dbg(tx->sdata,
14 "STA %pM TX buffer for AC %d full - dropping oldest frame\n",
15 sta->sta.addr, ac);
16 - dev_kfree_skb(old);
17 + ieee80211_free_txskb(&local->hw, old);
18 } else
19 tx->local->total_ps_buffered++;
20
21 @@ -1103,7 +1103,7 @@ static bool ieee80211_tx_prep_agg(struct
22 spin_unlock(&tx->sta->lock);
23
24 if (purge_skb)
25 - dev_kfree_skb(purge_skb);
26 + ieee80211_free_txskb(&tx->local->hw, purge_skb);
27 }
28
29 /* reset session timer */
30 @@ -1214,7 +1214,7 @@ static bool ieee80211_tx_frags(struct ie
31 #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
32 if (WARN_ON_ONCE(q >= local->hw.queues)) {
33 __skb_unlink(skb, skbs);
34 - dev_kfree_skb(skb);
35 + ieee80211_free_txskb(&local->hw, skb);
36 continue;
37 }
38 #endif
39 @@ -1356,7 +1356,7 @@ static int invoke_tx_handlers(struct iee
40 if (unlikely(res == TX_DROP)) {
41 I802_DEBUG_INC(tx->local->tx_handlers_drop);
42 if (tx->skb)
43 - dev_kfree_skb(tx->skb);
44 + ieee80211_free_txskb(&tx->local->hw, tx->skb);
45 else
46 __skb_queue_purge(&tx->skbs);
47 return -1;
48 @@ -1393,7 +1393,7 @@ static bool ieee80211_tx(struct ieee8021
49 res_prepare = ieee80211_tx_prepare(sdata, &tx, skb);
50
51 if (unlikely(res_prepare == TX_DROP)) {
52 - dev_kfree_skb(skb);
53 + ieee80211_free_txskb(&local->hw, skb);
54 goto out;
55 } else if (unlikely(res_prepare == TX_QUEUED)) {
56 goto out;
57 @@ -1465,7 +1465,7 @@ void ieee80211_xmit(struct ieee80211_sub
58 headroom = max_t(int, 0, headroom);
59
60 if (ieee80211_skb_resize(sdata, skb, headroom, may_encrypt)) {
61 - dev_kfree_skb(skb);
62 + ieee80211_free_txskb(&local->hw, skb);
63 rcu_read_unlock();
64 return;
65 }
66 @@ -2056,8 +2056,10 @@ netdev_tx_t ieee80211_subif_start_xmit(s
67 head_need += IEEE80211_ENCRYPT_HEADROOM;
68 head_need += local->tx_headroom;
69 head_need = max_t(int, 0, head_need);
70 - if (ieee80211_skb_resize(sdata, skb, head_need, true))
71 - goto fail;
72 + if (ieee80211_skb_resize(sdata, skb, head_need, true)) {
73 + ieee80211_free_txskb(&local->hw, skb);
74 + return NETDEV_TX_OK;
75 + }
76 }
77
78 if (encaps_data) {
79 @@ -2190,7 +2192,7 @@ void ieee80211_tx_pending(unsigned long
80 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
81
82 if (WARN_ON(!info->control.vif)) {
83 - kfree_skb(skb);
84 + ieee80211_free_txskb(&local->hw, skb);
85 continue;
86 }
87
88 --- a/net/mac80211/status.c
89 +++ b/net/mac80211/status.c
90 @@ -34,7 +34,7 @@ void ieee80211_tx_status_irqsafe(struct
91 skb_queue_len(&local->skb_queue_unreliable);
92 while (tmp > IEEE80211_IRQSAFE_QUEUE_LIMIT &&
93 (skb = skb_dequeue(&local->skb_queue_unreliable))) {
94 - dev_kfree_skb_irq(skb);
95 + ieee80211_free_txskb(hw, skb);
96 tmp--;
97 I802_DEBUG_INC(local->tx_status_drop);
98 }
99 @@ -159,7 +159,7 @@ static void ieee80211_handle_filtered_fr
100 "dropped TX filtered frame, queue_len=%d PS=%d @%lu\n",
101 skb_queue_len(&sta->tx_filtered[ac]),
102 !!test_sta_flag(sta, WLAN_STA_PS_STA), jiffies);
103 - dev_kfree_skb(skb);
104 + ieee80211_free_txskb(&local->hw, skb);
105 }
106
107 static void ieee80211_check_pending_bar(struct sta_info *sta, u8 *addr, u8 tid)
108 --- a/net/mac80211/iface.c
109 +++ b/net/mac80211/iface.c
110 @@ -826,7 +826,7 @@ static void ieee80211_do_stop(struct iee
111 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
112 if (info->control.vif == &sdata->vif) {
113 __skb_unlink(skb, &local->pending[i]);
114 - dev_kfree_skb_irq(skb);
115 + ieee80211_free_txskb(&local->hw, skb);
116 }
117 }
118 }
119 --- a/net/mac80211/sta_info.c
120 +++ b/net/mac80211/sta_info.c
121 @@ -587,7 +587,7 @@ static bool sta_info_cleanup_expire_buff
122 */
123 if (!skb)
124 break;
125 - dev_kfree_skb(skb);
126 + ieee80211_free_txskb(&local->hw, skb);
127 }
128
129 /*
130 @@ -616,7 +616,7 @@ static bool sta_info_cleanup_expire_buff
131 local->total_ps_buffered--;
132 ps_dbg(sta->sdata, "Buffered frame expired (STA %pM)\n",
133 sta->sta.addr);
134 - dev_kfree_skb(skb);
135 + ieee80211_free_txskb(&local->hw, skb);
136 }
137
138 /*
139 --- a/net/mac80211/util.c
140 +++ b/net/mac80211/util.c
141 @@ -406,7 +406,7 @@ void ieee80211_add_pending_skb(struct ie
142 int queue = info->hw_queue;
143
144 if (WARN_ON(!info->control.vif)) {
145 - kfree_skb(skb);
146 + ieee80211_free_txskb(&local->hw, skb);
147 return;
148 }
149
150 @@ -431,7 +431,7 @@ void ieee80211_add_pending_skbs_fn(struc
151 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
152
153 if (WARN_ON(!info->control.vif)) {
154 - kfree_skb(skb);
155 + ieee80211_free_txskb(&local->hw, skb);
156 continue;
157 }
158