.. | .. |
---|
26 | 26 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
---|
27 | 27 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); |
---|
28 | 28 | struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[BEACON_QUEUE]; |
---|
| 29 | + struct sk_buff_head free_list; |
---|
29 | 30 | unsigned long flags; |
---|
30 | 31 | |
---|
| 32 | + skb_queue_head_init(&free_list); |
---|
31 | 33 | spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags); |
---|
32 | 34 | while (skb_queue_len(&ring->queue)) { |
---|
33 | 35 | struct rtl_tx_desc *entry = &ring->desc[ring->idx]; |
---|
.. | .. |
---|
37 | 39 | rtlpriv->cfg->ops->get_desc(hw, (u8 *)entry, |
---|
38 | 40 | true, HW_DESC_TXBUFF_ADDR), |
---|
39 | 41 | skb->len, DMA_TO_DEVICE); |
---|
40 | | - kfree_skb(skb); |
---|
| 42 | + __skb_queue_tail(&free_list, skb); |
---|
41 | 43 | ring->idx = (ring->idx + 1) % ring->entries; |
---|
42 | 44 | } |
---|
43 | 45 | spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags); |
---|
| 46 | + |
---|
| 47 | + __skb_queue_purge(&free_list); |
---|
44 | 48 | } |
---|
45 | 49 | |
---|
46 | 50 | static void _rtl8821ae_set_bcn_ctrl_reg(struct ieee80211_hw *hw, |
---|