From: Jakub Kicinski <kuba@kernel.org>
To: wei.fang@nxp.com
Cc: Jakub Kicinski <kuba@kernel.org>,
john.fastabend@gmail.com, linux-kernel@vger.kernel.org,
shenwei.wang@nxp.com, daniel@iogearbox.net, frank.li@nxp.com,
netdev@vger.kernel.org, xiaoning.wang@nxp.com, ast@kernel.org,
sdf@fomichev.me, imx@lists.linux.dev, davem@davemloft.net,
edumazet@google.com, hawk@kernel.org, bpf@vger.kernel.org,
pabeni@redhat.com, andrew+netdev@lunn.ch
Subject: Re: [v4,net-next,13/15] net: fec: add fec_alloc_rxq_buffers_pp() to allocate buffers from page pool
Date: Sun, 25 Jan 2026 13:45:19 -0800 [thread overview]
Message-ID: <20260125214519.3384279-1-kuba@kernel.org> (raw)
In-Reply-To: <20260123022143.4121797-14-wei.fang@nxp.com>
This is an AI-generated review of your patch. The human sending this
email has considered the AI review valid, or at least plausible.
For local reproduction steps see https://netdev-ai.bots.linux.dev/ai-local.html
---
net: fec: add AF_XDP zero-copy support
This patch adds AF_XDP zero-copy support for both TX and RX on the FEC
ethernet driver. RX buffers are allocated from the XSK pool instead of
the page pool, and TX supports both frames from AF_XDP sockets and
XDP_TX action.
> diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
> index c19ae60b04d7..d3e54dcf6a4c 100644
[ ... ]
> +static int fec_setup_xsk_pool(struct net_device *ndev,
> + struct xsk_buff_pool *pool,
> + u16 queue)
> +{
> + struct fec_enet_private *fep = netdev_priv(ndev);
> + bool is_run = netif_running(ndev);
> + struct fec_enet_priv_rx_q *rxq;
> + struct fec_enet_priv_tx_q *txq;
> + bool enable = !!pool;
> + int err;
> +
> + if (queue >= fep->num_rx_queues || queue >= fep->num_tx_queues)
> + return -ERANGE;
> +
> + if (is_run) {
> + napi_disable(&fep->napi);
> + netif_tx_disable(ndev);
> + synchronize_rcu();
> + fec_enet_free_buffers(ndev);
> + }
> +
> + rxq = fep->rx_queue[queue];
> + txq = fep->tx_queue[queue];
> +
> + if (enable) {
> + err = xsk_pool_dma_map(pool, &fep->pdev->dev, 0);
> + if (err) {
> + netdev_err(ndev, "Failed to map xsk pool\n");
> + return err;
> + }
If xsk_pool_dma_map() fails here when is_run was true, NAPI has already
been disabled, TX has been disabled, and buffers have been freed. The
early return leaves the device in a non-functional state with no way to
recover except manually bringing the interface down and up.
Should this error path restore the device state by calling fec_restart(),
napi_enable(), and netif_tx_start_all_queues() before returning, similar
to what is done after fec_enet_alloc_buffers() succeeds?
> +
> + rxq->xsk_pool = pool;
> + txq->xsk_pool = pool;
> + } else {
> + xsk_pool_dma_unmap(rxq->xsk_pool, 0);
> + rxq->xsk_pool = NULL;
> + txq->xsk_pool = NULL;
> + }
> +
> + if (is_run) {
> + err = fec_enet_alloc_buffers(ndev);
> + if (err) {
> + netdev_err(ndev, "Failed to alloc buffers\n");
> + goto err_alloc_buffers;
> + }
> +
> + fec_restart(ndev);
> + napi_enable(&fep->napi);
> + netif_tx_start_all_queues(ndev);
> + }
> +
> + return 0;
> +
> +err_alloc_buffers:
> + if (enable) {
> + xsk_pool_dma_unmap(pool, 0);
> + rxq->xsk_pool = NULL;
> + txq->xsk_pool = NULL;
> + }
> +
> + return err;
Similarly, the err_alloc_buffers path cleans up the XSK pool state but
does not restore NAPI/TX or restart the device when is_run was true.
Does this leave the device in the same non-functional state?
> +}
[ ... ]
next prev parent reply other threads:[~2026-01-25 21:45 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-23 2:21 [PATCH v4 net-next 00/15] net: fec: improve XDP copy mode and add AF_XDP zero-copy support Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 01/15] net: fec: add fec_txq_trigger_xmit() helper Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 02/15] net: fec: add fec_rx_error_check() to check RX errors Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 03/15] net: fec: add rx_shift to indicate the extra bytes padded in front of RX frame Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 04/15] net: fec: add fec_build_skb() to build a skb Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 05/15] net: fec: improve fec_enet_rx_queue() Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 06/15] net: fec: add fec_enet_rx_queue_xdp() for XDP path Wei Fang
2026-01-25 21:44 ` [v4,net-next,06/15] " Jakub Kicinski
2026-01-26 2:09 ` Wei Fang
2026-01-27 0:17 ` Jakub Kicinski
2026-01-27 1:28 ` Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 07/15] net: fec: add tx_qid parameter to fec_enet_xdp_tx_xmit() Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 08/15] net: fec: transmit XDP frames in bulk Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 09/15] net: fec: remove unnecessary NULL pointer check when clearing TX BD ring Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 10/15] net: fec: use switch statement to check the type of tx_buf Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 11/15] net: fec: remove the size parameter from fec_enet_create_page_pool() Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 12/15] net: fec: move xdp_rxq_info* APIs out of fec_enet_create_page_pool() Wei Fang
2026-01-25 21:45 ` [v4,net-next,12/15] " Jakub Kicinski
2026-01-26 2:22 ` Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 13/15] net: fec: add fec_alloc_rxq_buffers_pp() to allocate buffers from page pool Wei Fang
2026-01-25 21:45 ` Jakub Kicinski [this message]
2026-01-26 2:37 ` [v4,net-next,13/15] " Wei Fang
2026-01-27 0:18 ` Jakub Kicinski
2026-01-23 2:21 ` [PATCH v4 net-next 14/15] net: fec: improve fec_enet_tx_queue() Wei Fang
2026-01-23 2:21 ` [PATCH v4 net-next 15/15] net: fec: add AF_XDP zero-copy support Wei Fang
2026-01-25 21:45 ` [v4,net-next,15/15] " Jakub Kicinski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260125214519.3384279-1-kuba@kernel.org \
--to=kuba@kernel.org \
--cc=andrew+netdev@lunn.ch \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=frank.li@nxp.com \
--cc=hawk@kernel.org \
--cc=imx@lists.linux.dev \
--cc=john.fastabend@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=shenwei.wang@nxp.com \
--cc=wei.fang@nxp.com \
--cc=xiaoning.wang@nxp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox