- if (sw->tx_ring.desc) {
- for (i = 0; i < TX_DESCS; i++) {
- struct _tx_ring *tx_ring = &sw->tx_ring;
- struct tx_desc *desc = &(tx_ring)->desc[i];
- struct sk_buff *skb = sw->tx_ring.buff_tab[i];
- if (skb) {
- dma_unmap_single(sw->dev, desc->sdp,
- skb->len, DMA_TO_DEVICE);
- dev_kfree_skb(skb);
- }
- }
- dma_pool_free(tx_dma_pool, sw->tx_ring.desc, sw->tx_ring.phys_addr);
- dma_pool_destroy(tx_dma_pool);
- tx_dma_pool = 0;
- sw->tx_ring.desc = 0;
+
+ for (i = 0; i < TX_DESCS; i++) {
+ struct _tx_ring *tx_ring = &sw->tx_ring;
+ struct tx_desc *desc = &(tx_ring)->desc[i];
+ struct sk_buff *skb = sw->tx_ring.buff_tab[i];
+
+ if (!skb)
+ continue;
+
+ dma_unmap_single(sw->dev, desc->sdp, skb->len, DMA_TO_DEVICE);
+ dev_kfree_skb(skb);