xsk: Return the whole xdp_desc from xsk_umem_consume_tx
Some drivers want to access the data transmitted in order to implement acceleration features of the NICs. It is also useful in AF_XDP TX flow. Change the xsk_umem_consume_tx API to return the whole xdp_desc, that contains the data pointer, length and DMA address, instead of only the latter two. Adapt the implementation of i40e and ixgbe to this change. Signed-off-by: Maxim Mikityanskiy <maximmi@mellanox.com> Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Acked-by: Saeed Mahameed <saeedm@mellanox.com> Cc: Björn Töpel <bjorn.topel@intel.com> Cc: Magnus Karlsson <magnus.karlsson@intel.com> Acked-by: Björn Töpel <bjorn.topel@intel.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:

committed by
Daniel Borkmann

parent
123e8da1d3
commit
4bce4e5cb6
@@ -641,8 +641,8 @@ static bool i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget)
|
||||
struct i40e_tx_desc *tx_desc = NULL;
|
||||
struct i40e_tx_buffer *tx_bi;
|
||||
bool work_done = true;
|
||||
struct xdp_desc desc;
|
||||
dma_addr_t dma;
|
||||
u32 len;
|
||||
|
||||
while (budget-- > 0) {
|
||||
if (!unlikely(I40E_DESC_UNUSED(xdp_ring))) {
|
||||
@@ -651,21 +651,23 @@ static bool i40e_xmit_zc(struct i40e_ring *xdp_ring, unsigned int budget)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!xsk_umem_consume_tx(xdp_ring->xsk_umem, &dma, &len))
|
||||
if (!xsk_umem_consume_tx(xdp_ring->xsk_umem, &desc))
|
||||
break;
|
||||
|
||||
dma_sync_single_for_device(xdp_ring->dev, dma, len,
|
||||
dma = xdp_umem_get_dma(xdp_ring->xsk_umem, desc.addr);
|
||||
|
||||
dma_sync_single_for_device(xdp_ring->dev, dma, desc.len,
|
||||
DMA_BIDIRECTIONAL);
|
||||
|
||||
tx_bi = &xdp_ring->tx_bi[xdp_ring->next_to_use];
|
||||
tx_bi->bytecount = len;
|
||||
tx_bi->bytecount = desc.len;
|
||||
|
||||
tx_desc = I40E_TX_DESC(xdp_ring, xdp_ring->next_to_use);
|
||||
tx_desc->buffer_addr = cpu_to_le64(dma);
|
||||
tx_desc->cmd_type_offset_bsz =
|
||||
build_ctob(I40E_TX_DESC_CMD_ICRC
|
||||
| I40E_TX_DESC_CMD_EOP,
|
||||
0, len, 0);
|
||||
0, desc.len, 0);
|
||||
|
||||
xdp_ring->next_to_use++;
|
||||
if (xdp_ring->next_to_use == xdp_ring->count)
|
||||
|
Reference in New Issue
Block a user