.. | .. |
---|
68 | 68 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
---|
69 | 69 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); |
---|
70 | 70 | struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[BEACON_QUEUE]; |
---|
| 71 | + struct sk_buff_head free_list; |
---|
71 | 72 | unsigned long flags; |
---|
72 | 73 | |
---|
| 74 | + skb_queue_head_init(&free_list); |
---|
73 | 75 | spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags); |
---|
74 | 76 | while (skb_queue_len(&ring->queue)) { |
---|
75 | 77 | struct rtl_tx_desc *entry = &ring->desc[ring->idx]; |
---|
.. | .. |
---|
79 | 81 | rtlpriv->cfg->ops->get_desc(hw, (u8 *)entry, |
---|
80 | 82 | true, HW_DESC_TXBUFF_ADDR), |
---|
81 | 83 | skb->len, DMA_TO_DEVICE); |
---|
82 | | - kfree_skb(skb); |
---|
| 84 | + __skb_queue_tail(&free_list, skb); |
---|
83 | 85 | ring->idx = (ring->idx + 1) % ring->entries; |
---|
84 | 86 | } |
---|
85 | 87 | spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags); |
---|
| 88 | + |
---|
| 89 | + __skb_queue_purge(&free_list); |
---|
86 | 90 | } |
---|
87 | 91 | |
---|
88 | 92 | static void _rtl88ee_disable_bcn_sub_func(struct ieee80211_hw *hw) |
---|