[PATCH net] net: ti: icssg-prueth: Fix skb handling for XDP_PASS
Jakub Kicinski
kuba at kernel.org
Wed Jul 23 17:19:47 PDT 2025
On Mon, 21 Jul 2025 18:19:18 +0530 Meghana Malladi wrote:
> diff --git a/drivers/net/ethernet/ti/icssg/icssg_common.c b/drivers/net/ethernet/ti/icssg/icssg_common.c
> index 12f25cec6255..a0e7def33e8e 100644
> --- a/drivers/net/ethernet/ti/icssg/icssg_common.c
> +++ b/drivers/net/ethernet/ti/icssg/icssg_common.c
> @@ -757,15 +757,12 @@ static int emac_rx_packet(struct prueth_emac *emac, u32 flow_id, u32 *xdp_state)
> xdp_prepare_buff(&xdp, pa, PRUETH_HEADROOM, pkt_len, false);
>
> *xdp_state = emac_run_xdp(emac, &xdp, page, &pkt_len);
> - if (*xdp_state == ICSSG_XDP_PASS)
> - skb = xdp_build_skb_from_buff(&xdp);
> - else
> + if (*xdp_state != ICSSG_XDP_PASS)
> goto requeue;
> - } else {
> - /* prepare skb and send to n/w stack */
> - skb = napi_build_skb(pa, PAGE_SIZE);
> }
>
> + /* prepare skb and send to n/w stack */
> + skb = napi_build_skb(pa, PAGE_SIZE);
> if (!skb) {
> ndev->stats.rx_dropped++;
> page_pool_recycle_direct(pool, page);
I'm not sure this is correct. We seem to hardcode headroom to
PRUETH_HEADROOM lower in this function. If XDP adds or removes
network headers and then returns XDP_PASS we'll look for the packet
at the wrong offset.
We just merged some XDP tests, could you try running
tools/testing/selftests/drivers/net/xdp.py ?
Some general instructions can be found here:
https://github.com/linux-netdev/nipa/wiki/Running-driver-tests
Not sure how stable the test is for all NICs but I think the
xdp.test_xdp_native_adjst_head_grow_data
test case will exercise what I'm suspecting will fail.
More information about the linux-arm-kernel
mailing list