Skip to content

Commit 0a5bd0f

Browse files
author
Paolo Abeni
committed
Merge branch 'tsnep-xdp-fixes'
Gerhard Engleder says: ==================== tsnep: XDP fixes Found two driver specific problems during XDP and XSK testing. ==================== Link: https://lore.kernel.org/r/20240123200918.61219-1-gerhard@engleder-embedded.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2 parents 5da4597 + 9a91c05 commit 0a5bd0f

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

drivers/net/ethernet/engleder/tsnep_main.c

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1485,7 +1485,7 @@ static int tsnep_rx_poll(struct tsnep_rx *rx, struct napi_struct *napi,
14851485

14861486
xdp_prepare_buff(&xdp, page_address(entry->page),
14871487
XDP_PACKET_HEADROOM + TSNEP_RX_INLINE_METADATA_SIZE,
1488-
length, false);
1488+
length - ETH_FCS_LEN, false);
14891489

14901490
consume = tsnep_xdp_run_prog(rx, prog, &xdp,
14911491
&xdp_status, tx_nq, tx);
@@ -1568,7 +1568,7 @@ static int tsnep_rx_poll_zc(struct tsnep_rx *rx, struct napi_struct *napi,
15681568
prefetch(entry->xdp->data);
15691569
length = __le32_to_cpu(entry->desc_wb->properties) &
15701570
TSNEP_DESC_LENGTH_MASK;
1571-
xsk_buff_set_size(entry->xdp, length);
1571+
xsk_buff_set_size(entry->xdp, length - ETH_FCS_LEN);
15721572
xsk_buff_dma_sync_for_cpu(entry->xdp, rx->xsk_pool);
15731573

15741574
/* RX metadata with timestamps is in front of actual data,
@@ -1762,6 +1762,19 @@ static void tsnep_rx_reopen_xsk(struct tsnep_rx *rx)
17621762
allocated--;
17631763
}
17641764
}
1765+
1766+
/* set need wakeup flag immediately if ring is not filled completely,
1767+
* first polling would be too late as need wakeup signalisation would
1768+
* be delayed for an indefinite time
1769+
*/
1770+
if (xsk_uses_need_wakeup(rx->xsk_pool)) {
1771+
int desc_available = tsnep_rx_desc_available(rx);
1772+
1773+
if (desc_available)
1774+
xsk_set_rx_need_wakeup(rx->xsk_pool);
1775+
else
1776+
xsk_clear_rx_need_wakeup(rx->xsk_pool);
1777+
}
17651778
}
17661779

17671780
static bool tsnep_pending(struct tsnep_queue *queue)

0 commit comments

Comments
 (0)