igc: Introduce igc_unmap_tx_buffer() helper
In preparation for AF_XDP zero-copy support, encapsulate the code that unmaps Tx buffers into its own local helper so we can reuse it, avoiding code duplication. Signed-off-by: Andre Guedes <andre.guedes@intel.com> Signed-off-by: Vedang Patel <vedang.patel@intel.com> Signed-off-by: Jithu Joseph <jithu.joseph@intel.com> Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> Tested-by: Dvora Fuxbrumer <dvorax.fuxbrumer@linux.intel.com> Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
a27e6e73e5
commit
6123429516
|
@ -171,6 +171,14 @@ static void igc_get_hw_control(struct igc_adapter *adapter)
|
|||
ctrl_ext | IGC_CTRL_EXT_DRV_LOAD);
|
||||
}
|
||||
|
||||
static void igc_unmap_tx_buffer(struct device *dev, struct igc_tx_buffer *buf)
|
||||
{
|
||||
dma_unmap_single(dev, dma_unmap_addr(buf, dma),
|
||||
dma_unmap_len(buf, len), DMA_TO_DEVICE);
|
||||
|
||||
dma_unmap_len_set(buf, len, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* igc_clean_tx_ring - Free Tx Buffers
|
||||
* @tx_ring: ring to be cleaned
|
||||
|
@ -188,11 +196,7 @@ static void igc_clean_tx_ring(struct igc_ring *tx_ring)
|
|||
else
|
||||
dev_kfree_skb_any(tx_buffer->skb);
|
||||
|
||||
/* unmap skb header data */
|
||||
dma_unmap_single(tx_ring->dev,
|
||||
dma_unmap_addr(tx_buffer, dma),
|
||||
dma_unmap_len(tx_buffer, len),
|
||||
DMA_TO_DEVICE);
|
||||
igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
|
||||
|
||||
/* check for eop_desc to determine the end of the packet */
|
||||
eop_desc = tx_buffer->next_to_watch;
|
||||
|
@ -211,10 +215,7 @@ static void igc_clean_tx_ring(struct igc_ring *tx_ring)
|
|||
|
||||
/* unmap any remaining paged data */
|
||||
if (dma_unmap_len(tx_buffer, len))
|
||||
dma_unmap_page(tx_ring->dev,
|
||||
dma_unmap_addr(tx_buffer, dma),
|
||||
dma_unmap_len(tx_buffer, len),
|
||||
DMA_TO_DEVICE);
|
||||
igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
|
||||
}
|
||||
|
||||
/* move us one more past the eop_desc for start of next pkt */
|
||||
|
@ -1219,11 +1220,7 @@ dma_error:
|
|||
/* clear dma mappings for failed tx_buffer_info map */
|
||||
while (tx_buffer != first) {
|
||||
if (dma_unmap_len(tx_buffer, len))
|
||||
dma_unmap_page(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);
|
||||
igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
|
||||
|
||||
if (i-- == 0)
|
||||
i += tx_ring->count;
|
||||
|
@ -1231,11 +1228,7 @@ dma_error:
|
|||
}
|
||||
|
||||
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);
|
||||
igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
|
||||
|
||||
dev_kfree_skb_any(tx_buffer->skb);
|
||||
tx_buffer->skb = NULL;
|
||||
|
@ -2317,14 +2310,7 @@ static bool igc_clean_tx_irq(struct igc_q_vector *q_vector, int napi_budget)
|
|||
else
|
||||
napi_consume_skb(tx_buffer->skb, napi_budget);
|
||||
|
||||
/* unmap skb header data */
|
||||
dma_unmap_single(tx_ring->dev,
|
||||
dma_unmap_addr(tx_buffer, dma),
|
||||
dma_unmap_len(tx_buffer, len),
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
/* clear tx_buffer data */
|
||||
dma_unmap_len_set(tx_buffer, len, 0);
|
||||
igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
|
||||
|
||||
/* clear last DMA location and unmap remaining buffers */
|
||||
while (tx_desc != eop_desc) {
|
||||
|
@ -2338,13 +2324,8 @@ static bool igc_clean_tx_irq(struct igc_q_vector *q_vector, int napi_budget)
|
|||
}
|
||||
|
||||
/* unmap any remaining paged data */
|
||||
if (dma_unmap_len(tx_buffer, len)) {
|
||||
dma_unmap_page(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);
|
||||
}
|
||||
if (dma_unmap_len(tx_buffer, len))
|
||||
igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
|
||||
}
|
||||
|
||||
/* move us one more past the eop_desc for start of next pkt */
|
||||
|
|
Loading…
Reference in New Issue