Skip to content

Commit

Permalink
ixgbe: modify driver for handling offsets
Browse files Browse the repository at this point in the history
With the addition of the unaligned chunks option, we need to make sure we
handle the offsets accordingly based on the mode we are currently running
in. This patch modifies the driver to appropriately mask the address for
each case.

Signed-off-by: Kevin Laatz <kevin.laatz@intel.com>
Acked-by: Jonathan Lemon <jonathan.lemon@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
  • Loading branch information
Kevin Laatz authored and Daniel Borkmann committed Aug 30, 2019
1 parent 2f86c80 commit d8c3061
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,15 +143,20 @@ static int ixgbe_run_xdp_zc(struct ixgbe_adapter *adapter,
struct ixgbe_ring *rx_ring,
struct xdp_buff *xdp)
{
struct xdp_umem *umem = rx_ring->xsk_umem;
int err, result = IXGBE_XDP_PASS;
u64 offset = umem->headroom;
struct bpf_prog *xdp_prog;
struct xdp_frame *xdpf;
u32 act;

rcu_read_lock();
xdp_prog = READ_ONCE(rx_ring->xdp_prog);
act = bpf_prog_run_xdp(xdp_prog, xdp);
xdp->handle += xdp->data - xdp->data_hard_start;
offset += xdp->data - xdp->data_hard_start;

xdp->handle = xsk_umem_adjust_offset(umem, xdp->handle, offset);

switch (act) {
case XDP_PASS:
break;
Expand Down Expand Up @@ -243,7 +248,7 @@ void ixgbe_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 + rx_ring->xsk_umem->headroom;
bi->handle = (u64)handle;
}

static bool ixgbe_alloc_buffer_zc(struct ixgbe_ring *rx_ring,
Expand All @@ -269,7 +274,7 @@ static bool ixgbe_alloc_buffer_zc(struct ixgbe_ring *rx_ring,
bi->addr = xdp_umem_get_data(umem, handle);
bi->addr += hr;

bi->handle = handle + umem->headroom;
bi->handle = handle;

xsk_umem_discard_addr(umem);
return true;
Expand All @@ -296,7 +301,7 @@ static bool ixgbe_alloc_buffer_slow_zc(struct ixgbe_ring *rx_ring,
bi->addr = xdp_umem_get_data(umem, handle);
bi->addr += hr;

bi->handle = handle + umem->headroom;
bi->handle = handle;

xsk_umem_discard_addr_rq(umem);
return true;
Expand Down

0 comments on commit d8c3061

Please sign in to comment.