On Tue, 2024-01-23 at 21:09 +0100, Gerhard Engleder wrote: > The fill ring of the XDP socket may contain not enough buffers to > completey fill the RX queue during socket creation. In this case the > flag XDP_RING_NEED_WAKEUP is not set as this flag is only set if the RX > queue is not completely filled during polling. > > Set XDP_RING_NEED_WAKEUP flag also if RX queue is not completely filled > during XDP socket creation. > > Fixes: 3fc2333933fd ("tsnep: Add XDP socket zero-copy RX support") > Signed-off-by: Gerhard Engleder <gerhard@xxxxxxxxxxxxxxxxxxxxx> > --- > drivers/net/ethernet/engleder/tsnep_main.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/net/ethernet/engleder/tsnep_main.c b/drivers/net/ethernet/engleder/tsnep_main.c > index d380a407e175..ae0b8b37b9bf 100644 > --- a/drivers/net/ethernet/engleder/tsnep_main.c > +++ b/drivers/net/ethernet/engleder/tsnep_main.c > @@ -1764,6 +1764,19 @@ static void tsnep_rx_reopen_xsk(struct tsnep_rx *rx) > allocated--; > } > } > + > + /* set need wakeup flag immediately if ring is not filled completely, > + * first polling would be too late as need wakeup signalisation would > + * be delayed for an indefinite time > + */ > + if (xsk_uses_need_wakeup(rx->xsk_pool)) { > + int desc_available = tsnep_rx_desc_available(rx); > + > + if (desc_available) > + xsk_set_rx_need_wakeup(rx->xsk_pool); > + else > + xsk_clear_rx_need_wakeup(rx->xsk_pool); > + } > } > > static bool tsnep_pending(struct tsnep_queue *queue) The patch LGTM, but there is a very similar chunk of code in tsnep_rx_poll_zc(). You should consider a net-next follow-up consolidating the code in a common helper. Cheers, Paolo