i40e: fix xdp handle calculations
Currently, we don't add headroom to the handle in i40e_zca_free, i40e_alloc_buffer_slow_zc and i40e_alloc_buffer_zc. The addition of the headroom to the handle was removed in commit2f86c806a8
("i40e: modify driver for handling offsets"), which will break things when headroom is non-zero. This patch fixes this and uses xsk_umem_adjust_offset to add it appropritely based on the mode being run. Fixes:2f86c806a8
("i40e: modify driver for handling offsets") Reported-by: Bjorn Topel <bjorn.topel@intel.com> Signed-off-by: Kevin Laatz <kevin.laatz@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:
Родитель
110509df45
Коммит
4c5d9a7fa1
|
@ -267,7 +267,7 @@ static bool i40e_alloc_buffer_zc(struct i40e_ring *rx_ring,
|
|||
bi->addr = xdp_umem_get_data(umem, handle);
|
||||
bi->addr += hr;
|
||||
|
||||
bi->handle = handle;
|
||||
bi->handle = xsk_umem_adjust_offset(umem, handle, umem->headroom);
|
||||
|
||||
xsk_umem_discard_addr(umem);
|
||||
return true;
|
||||
|
@ -304,7 +304,7 @@ static bool i40e_alloc_buffer_slow_zc(struct i40e_ring *rx_ring,
|
|||
bi->addr = xdp_umem_get_data(umem, handle);
|
||||
bi->addr += hr;
|
||||
|
||||
bi->handle = handle;
|
||||
bi->handle = xsk_umem_adjust_offset(umem, handle, umem->headroom);
|
||||
|
||||
xsk_umem_discard_addr_rq(umem);
|
||||
return true;
|
||||
|
@ -469,7 +469,8 @@ void i40e_zca_free(struct zero_copy_allocator *alloc, unsigned long handle)
|
|||
bi->addr = xdp_umem_get_data(rx_ring->xsk_umem, handle);
|
||||
bi->addr += hr;
|
||||
|
||||
bi->handle = (u64)handle;
|
||||
bi->handle = xsk_umem_adjust_offset(rx_ring->xsk_umem, (u64)handle,
|
||||
rx_ring->xsk_umem->headroom);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Загрузка…
Ссылка в новой задаче