From: Kunwu Chan <kunwu.chan@linux.dev>
To: Edward Cree <ecree@amd.com>, Paolo Abeni <pabeni@redhat.com>,
Chenyuan Yang <chenyuan0y@gmail.com>,
ecree.xilinx@gmail.com, andrew+netdev@lunn.ch,
davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org,
john.fastabend@gmail.com, sdf@fomichev.me, lorenzo@kernel.org
Cc: netdev@vger.kernel.org, linux-net-drivers@amd.com,
bpf@vger.kernel.org, zzjas98@gmail.com
Subject: Re: [PATCH] sfc: handle NULL returned by xdp_convert_buff_to_frame()
Date: Fri, 25 Jul 2025 20:38:54 +0800 [thread overview]
Message-ID: <8d987133-0e22-4aa8-bf2e-57ef105c8db8@linux.dev> (raw)
In-Reply-To: <de14f60e-b1f0-432c-80b4-a2f0453e0fe2@amd.com>
On 2025/7/25 18:11, Edward Cree wrote:
> On 7/24/25 10:57, Paolo Abeni wrote:
>> On 7/23/25 2:32 AM, Chenyuan Yang wrote:
>>> The xdp_convert_buff_to_frame() function can return NULL when there is
>>> insufficient headroom in the buffer to store the xdp_frame structure
>>> or when the driver didn't reserve enough tailroom for skb_shared_info.
>> AFAIC the sfc driver reserves both enough headroom and tailroom, but
>> this is after ebpf run, which in turn could consume enough headroom to
>> cause a failure, so I think this makes sense.
> Your reasoning seems plausible to me.
> However, I think the error path ought to more closely follow the existing
> error cases in logging a ratelimited message and calling the tracepoint.
> I think the cleanest way to do this would be:
> if (unlikely(!xdpf))
> err = -ENOBUFS;
> else
> err = efx_xdp_tx_buffers(efx, 1, &xdpf, true);
> so that it can make use of the existing failure path.
> Adding the check to efx_xdp_tx_buffers() is also an option.
>
> -ed
>
Hi Chenyuan,
THX for addressing this edge case. I concur with Edward's suggestion to
integrate this with the existing error handling flow. This will ensure:
Consistent observability (ratelimited logs + tracepoints)
Centralized resource cleanup
Clear error type differentiation via -ENOBUFS
Proposed refinement:
diff
case XDP_TX:
/* Buffer ownership passes to tx on success. */
xdpf = xdp_convert_buff_to_frame(&xdp);
+ if (unlikely(!xdpf)) {
+ err = -ENOBUFS;
+ } else {
+ err = efx_siena_xdp_tx_buffers(efx, 1, &xdpf, true);
+ }
- err = efx_siena_xdp_tx_buffers(efx, 1, &xdpf, true);
if (unlikely(err != 1)) {
efx_siena_free_rx_buffers(rx_queue, rx_buf, 1);
if (net_ratelimit())
netif_err(efx, rx_err, efx->net_dev,
- "XDP TX failed (%d)\n", err);
+ "XDP TX failed (%d)%s\n", err,
+ err == -ENOBUFS ? " [frame conversion]" : "");
channel->n_rx_xdp_bad_drops++;
- trace_xdp_exception(efx->net_dev, xdp_prog, xdp_act);
+ if (err != -ENOBUFS)
+ trace_xdp_exception(efx->net_dev, xdp_prog, xdp_act);
} else {
channel->n_rx_xdp_tx++;
}
break;
-- Thanks, TAO. --- “Life finds a way.”
next prev parent reply other threads:[~2025-07-25 12:39 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-23 0:32 [PATCH] sfc: handle NULL returned by xdp_convert_buff_to_frame() Chenyuan Yang
2025-07-24 9:57 ` Paolo Abeni
2025-07-25 10:11 ` Edward Cree
2025-07-25 12:38 ` Kunwu Chan [this message]
2025-07-26 19:56 ` Chenyuan Yang
2025-07-28 14:28 ` Edward Cree
2025-07-30 7:38 ` Kunwu Chan
2025-07-31 9:14 ` Jesper Dangaard Brouer
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=8d987133-0e22-4aa8-bf2e-57ef105c8db8@linux.dev \
--to=kunwu.chan@linux.dev \
--cc=andrew+netdev@lunn.ch \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=chenyuan0y@gmail.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=ecree.xilinx@gmail.com \
--cc=ecree@amd.com \
--cc=edumazet@google.com \
--cc=hawk@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-net-drivers@amd.com \
--cc=lorenzo@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=zzjas98@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.