On Mon, Nov 14, 2022 at 04:03:23PM -0800, Tony Nguyen wrote: > From: Sylwester Dziedziuch <sylwesterx.dziedziuch@xxxxxxxxx> > > When starting xdpsock program in TX only mode: > > samples/bpf/xdpsock -i <interface> -t > > there was an error on i40e driver: > > Failed to allocate some buffers on AF_XDP ZC enabled Rx ring 0 (pf_q 81) > > It was caused by trying to allocate RX buffers even though > no RX buffers are available because we run in TX only mode. > > Fix this by checking for number of available buffers > for RX queue when allocating buffers during XDP setup. I was not sure if we want to proceed with this or not. For sure it's not a fix to me, behavior was not broken, txonly mode was working correctly. We're only getting rid of the bogus message that caused confusion within people. I feel that if we want that in then we should route this via -next and address other drivers as well. Not sure what are Magnus' thoughts on this. > > Fixes: 0a714186d3c0 ("i40e: add AF_XDP zero-copy Rx support") > Signed-off-by: Sylwester Dziedziuch <sylwesterx.dziedziuch@xxxxxxxxx> > Signed-off-by: Mateusz Palczewski <mateusz.palczewski@xxxxxxxxx> > Tested-by: Shwetha Nagaraju <Shwetha.nagaraju@xxxxxxxxx> > Signed-off-by: Tony Nguyen <anthony.l.nguyen@xxxxxxxxx> > --- > drivers/net/ethernet/intel/i40e/i40e_main.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c > index b5dcd15ced36..41112f92f9ef 100644 > --- a/drivers/net/ethernet/intel/i40e/i40e_main.c > +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c > @@ -3555,7 +3555,7 @@ static int i40e_configure_rx_ring(struct i40e_ring *ring) > struct i40e_hw *hw = &vsi->back->hw; > struct i40e_hmc_obj_rxq rx_ctx; > i40e_status err = 0; > - bool ok; > + bool ok = true; > int ret; > > bitmap_zero(ring->state, __I40E_RING_STATE_NBITS); > @@ -3653,7 +3653,9 @@ static int i40e_configure_rx_ring(struct i40e_ring *ring) > > if (ring->xsk_pool) { > xsk_pool_set_rxq_info(ring->xsk_pool, &ring->xdp_rxq); > - ok = i40e_alloc_rx_buffers_zc(ring, I40E_DESC_UNUSED(ring)); > + if (ring->xsk_pool->free_list_cnt) > + ok = i40e_alloc_rx_buffers_zc(ring, > + I40E_DESC_UNUSED(ring)); > } else { > ok = !i40e_alloc_rx_buffers(ring, I40E_DESC_UNUSED(ring)); > } > -- > 2.35.1 >