|
@@ -8020,29 +8020,23 @@ static int ixgbe_tx_map(struct ixgbe_ring *tx_ring,
|
|
return 0;
|
|
return 0;
|
|
dma_error:
|
|
dma_error:
|
|
dev_err(tx_ring->dev, "TX DMA map failed\n");
|
|
dev_err(tx_ring->dev, "TX DMA map failed\n");
|
|
- tx_buffer = &tx_ring->tx_buffer_info[i];
|
|
|
|
|
|
|
|
/* clear dma mappings for failed tx_buffer_info map */
|
|
/* clear dma mappings for failed tx_buffer_info map */
|
|
- while (tx_buffer != first) {
|
|
|
|
|
|
+ for (;;) {
|
|
|
|
+ tx_buffer = &tx_ring->tx_buffer_info[i];
|
|
if (dma_unmap_len(tx_buffer, len))
|
|
if (dma_unmap_len(tx_buffer, len))
|
|
dma_unmap_page(tx_ring->dev,
|
|
dma_unmap_page(tx_ring->dev,
|
|
dma_unmap_addr(tx_buffer, dma),
|
|
dma_unmap_addr(tx_buffer, dma),
|
|
dma_unmap_len(tx_buffer, len),
|
|
dma_unmap_len(tx_buffer, len),
|
|
DMA_TO_DEVICE);
|
|
DMA_TO_DEVICE);
|
|
dma_unmap_len_set(tx_buffer, len, 0);
|
|
dma_unmap_len_set(tx_buffer, len, 0);
|
|
-
|
|
|
|
- if (i--)
|
|
|
|
|
|
+ if (tx_buffer == first)
|
|
|
|
+ break;
|
|
|
|
+ if (i == 0)
|
|
i += tx_ring->count;
|
|
i += tx_ring->count;
|
|
- tx_buffer = &tx_ring->tx_buffer_info[i];
|
|
|
|
|
|
+ i--;
|
|
}
|
|
}
|
|
|
|
|
|
- if (dma_unmap_len(tx_buffer, len))
|
|
|
|
- dma_unmap_single(tx_ring->dev,
|
|
|
|
- dma_unmap_addr(tx_buffer, dma),
|
|
|
|
- dma_unmap_len(tx_buffer, len),
|
|
|
|
- DMA_TO_DEVICE);
|
|
|
|
- dma_unmap_len_set(tx_buffer, len, 0);
|
|
|
|
-
|
|
|
|
dev_kfree_skb_any(first->skb);
|
|
dev_kfree_skb_any(first->skb);
|
|
first->skb = NULL;
|
|
first->skb = NULL;
|
|
|
|
|