aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ath/ath9k/hif_usb.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c
index 3d8f0f468f8d..fe994e229898 100644
--- a/drivers/net/wireless/ath/ath9k/hif_usb.c
+++ b/drivers/net/wireless/ath/ath9k/hif_usb.c
@@ -149,6 +149,13 @@ static void hif_usb_tx_cb(struct urb *urb)
149 } 149 }
150} 150}
151 151
152static inline void ath9k_skb_queue_purge(struct sk_buff_head *list)
153{
154 struct sk_buff *skb;
155 while ((skb = __skb_dequeue(list)) != NULL)
156 dev_kfree_skb_any(skb);
157}
158
152/* TX lock has to be taken */ 159/* TX lock has to be taken */
153static int __hif_usb_tx(struct hif_device_usb *hif_dev) 160static int __hif_usb_tx(struct hif_device_usb *hif_dev)
154{ 161{
@@ -207,7 +214,7 @@ static int __hif_usb_tx(struct hif_device_usb *hif_dev)
207 ret = usb_submit_urb(tx_buf->urb, GFP_ATOMIC); 214 ret = usb_submit_urb(tx_buf->urb, GFP_ATOMIC);
208 if (ret) { 215 if (ret) {
209 tx_buf->len = tx_buf->offset = 0; 216 tx_buf->len = tx_buf->offset = 0;
210 __skb_queue_purge(&tx_buf->skb_queue); 217 ath9k_skb_queue_purge(&tx_buf->skb_queue);
211 __skb_queue_head_init(&tx_buf->skb_queue); 218 __skb_queue_head_init(&tx_buf->skb_queue);
212 list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf); 219 list_move_tail(&tx_buf->list, &hif_dev->tx.tx_buf);
213 hif_dev->tx.tx_buf_cnt++; 220 hif_dev->tx.tx_buf_cnt++;
@@ -274,7 +281,7 @@ static void hif_usb_stop(void *hif_handle, u8 pipe_id)
274 unsigned long flags; 281 unsigned long flags;
275 282
276 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags); 283 spin_lock_irqsave(&hif_dev->tx.tx_lock, flags);
277 __skb_queue_purge(&hif_dev->tx.tx_skb_queue); 284 ath9k_skb_queue_purge(&hif_dev->tx.tx_skb_queue);
278 hif_dev->tx.tx_skb_cnt = 0; 285 hif_dev->tx.tx_skb_cnt = 0;
279 hif_dev->tx.flags |= HIF_USB_TX_STOP; 286 hif_dev->tx.flags |= HIF_USB_TX_STOP;
280 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags); 287 spin_unlock_irqrestore(&hif_dev->tx.tx_lock, flags);