aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerhard Engleder <gerhard@engleder-embedded.com>2024-01-23 21:09:18 +0100
committerPaolo Abeni <pabeni@redhat.com>2024-01-25 11:59:42 +0100
commit9a91c05f4bd6f6bdd6b8f90445e0da92e3ac956c (patch)
tree022a849bbb30bbceb8bc63fc5d0e8d136cebf665
parent50bad6f797d4d501c5ef416a6f92e1912ab5aa8b (diff)
downloadlinux-9a91c05f4bd6f6bdd6b8f90445e0da92e3ac956c.tar.gz
tsnep: Fix XDP_RING_NEED_WAKEUP for empty fill ring
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@engleder-embedded.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
-rw-r--r--drivers/net/ethernet/engleder/tsnep_main.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/ethernet/engleder/tsnep_main.c b/drivers/net/ethernet/engleder/tsnep_main.c
index 456e0336f3f664..9aeff2b37a6129 100644
--- a/drivers/net/ethernet/engleder/tsnep_main.c
+++ b/drivers/net/ethernet/engleder/tsnep_main.c
@@ -1762,6 +1762,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)