From: Joe Damato <joe@dama.to>
To: netdev-bot+sashiko@kernel.org
Cc: netdev@vger.kernel.org, michael.chan@broadcom.com,
pavan.chebbi@broadcom.com, andrew+netdev@lunn.ch,
davem@davemloft.net, edumazet@kernel.org, kuba@kernel.org,
pabeni@redhat.com, prashant@broadcom.com, edumazet@google.com,
horms@kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH net v5 1/4] bnxt_en: return the RING_FREE status to callers
Date: Mon, 9 Nov 2026 09:45:49 -0800 [thread overview]
Message-ID: <avIGzUc6WaGgYBKG@devvm20253.cco0.facebook.com> (raw)
In-Reply-To: <179408152976.994134.11735257663578231009@kernel.org>
On Sat, Nov 07, 2026 at 07:58:49PM +0000, netdev-bot+sashiko@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential
> issue(s) to consider.
>
> Critical: 0 · High: 1 · Medium: 1 · Low: 0
>
> If you believe none of the issues are legitimate, please reply to each
> issue of Medium severity or higher and explain why the AI is wrong.
> If any of them are legitimate and you plan to respin, please let patchwork
> know by including "pw-bot: cr" as a separate line at the end of your reply
> (one such reply per series is enough).
>
> - [High] The patch makes bnxt_hwrm_rx_ring_free(),
> bnxt_hwrm_rx_agg_ring_free() and bnxt_hwrm_tx_ring_free() return the…
> - [Medium] The commit message says "All three ring free helpers that send
> the command discard the value", but four helpers send HWRM_RING_FREE,…
>
> --
>
> bnxt_en: return the RING_FREE status to callers
>
> This commit changes bnxt_hwrm_tx_ring_free(), bnxt_hwrm_rx_ring_free()
> and bnxt_hwrm_rx_agg_ring_free() so they return the status from
> hwrm_ring_free_send_msg() instead of discarding it. No caller acts on
> the returned value yet.
>
> > diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > index 33c4cacc8ffe3..ea8529c789947 100644
> > --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
> > @@ -7679,50 +7679,55 @@ static int hwrm_ring_free_send_msg(struct bnxt *bp,
>
> [ ... ]
>
> > -static void bnxt_hwrm_rx_ring_free(struct bnxt *bp,
> > - struct bnxt_rx_ring_info *rxr,
> > - bool close_path)
> > +static int bnxt_hwrm_rx_ring_free(struct bnxt *bp,
> > + struct bnxt_rx_ring_info *rxr,
> > + bool close_path)
> > {
> > struct bnxt_ring_struct *ring = &rxr->rx_ring_struct;
> > u32 grp_idx = rxr->bnapi->index;
> > u32 cmpl_ring_id;
> > + int rc;
> >
> > if (ring->fw_ring_id == INVALID_HW_RING_ID)
> > - return;
> > + return 0;
> >
> > cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr);
> > - hwrm_ring_free_send_msg(bp, ring,
> > - RING_FREE_REQ_RING_TYPE_RX,
> > - close_path ? cmpl_ring_id :
> > - INVALID_HW_RING_ID);
> > + rc = hwrm_ring_free_send_msg(bp, ring,
> > + RING_FREE_REQ_RING_TYPE_RX,
> > + close_path ? cmpl_ring_id :
> > + INVALID_HW_RING_ID);
> > ring->fw_ring_id = INVALID_HW_RING_ID;
> > bp->grp_info[grp_idx].rx_fw_ring_id = INVALID_HW_RING_ID;
> > + return rc;
> > }
>
> [Severity: High]
> The per-queue callers of these helpers still ignore the returned status,
> and none of the later patches in the series seems to change them. Can
> the queue restart path still release rings that the firmware did not
> free?
The per-queue callers should be fixed in a followup to net-next, IMHO, because
this series addresses a real failure seen in the field on production hosts.
The per-queue callers probably would fail in the same way, but that's not a
failure I've observed so I think that would be a separate followup.
So, I disagree with Sashiko, but if the maintainers feel differently on this
bit, let me know.
> > -static void bnxt_hwrm_rx_agg_ring_free(struct bnxt *bp,
> > - struct bnxt_rx_ring_info *rxr,
> > - bool close_path)
> > +static int bnxt_hwrm_rx_agg_ring_free(struct bnxt *bp,
> > + struct bnxt_rx_ring_info *rxr,
> > + bool close_path)
>
> [ ... ]
>
> > @@ -7730,14 +7735,15 @@ static void bnxt_hwrm_rx_agg_ring_free(struct bnxt *bp,
> > type = RING_FREE_REQ_RING_TYPE_RX;
> >
> > if (ring->fw_ring_id == INVALID_HW_RING_ID)
> > - return;
> > + return 0;
> >
> > cmpl_ring_id = bnxt_cp_ring_for_rx(bp, rxr);
> > - hwrm_ring_free_send_msg(bp, ring, type,
> > - close_path ? cmpl_ring_id :
> > - INVALID_HW_RING_ID);
> > + rc = hwrm_ring_free_send_msg(bp, ring, type,
> > + close_path ? cmpl_ring_id :
> > + INVALID_HW_RING_ID);
> > ring->fw_ring_id = INVALID_HW_RING_ID;
> > bp->grp_info[grp_idx].agg_fw_ring_id = INVALID_HW_RING_ID;
> > + return rc;
> > }
> >
> > static void bnxt_hwrm_cp_ring_free(struct bnxt *bp,
>
> [Severity: Medium]
> The commit message says:
>
> All three ring free helpers that send the command discard the value.
>
> Is that count right? bnxt_hwrm_cp_ring_free() also sends HWRM_RING_FREE,
> and it still returns void:
>
> hwrm_ring_free_send_msg(bp, ring, RING_FREE_REQ_RING_TYPE_L2_CMPL,
> INVALID_HW_RING_ID);
> ring->fw_ring_id = INVALID_HW_RING_ID;
>
> The inline NQ/L2_CMPL free in bnxt_hwrm_ring_free() also drops its
> status:
>
> if (ring->fw_ring_id != INVALID_HW_RING_ID) {
> hwrm_ring_free_send_msg(bp, ring, type,
> INVALID_HW_RING_ID);
>
> By the end of the series, bnxt_hwrm_ring_free() counts stuck rings only
> for TX, RX and AGG failures. If a CP or NQ RING_FREE fails, would
> bnxt_stop_dma() be skipped, with __bnxt_close_nic() going on to free
> that ring's memory in bnxt_free_mem()?
This also seems possible, but this is not what I observed in the field. On
three hosts, the NQ rings failed alongside the RX/TX ring free failures and so
if this series were applied DMA would be stopped.
I suppose it is possible that only the NQ or completion rings fail and this
series do not handle that case.
As with the above feedback from Sashiko: if I understand the requirements for
net correctly (and I'm probably wrong), this series addresses actual bugs seen
on prod workloads.
I'd be happy to send a followup to net-next addressing both points above after
this series is merged.
If the maintainers prefer that these other failure cases (which I did not
observe in real life) are handled in this series, please let me know.
next prev parent reply other threads:[~2026-11-09 17:45 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 19:14 [PATCH net v5 0/4] bnxt_en: Make RING FREE more robust Joe Damato
2026-11-06 19:14 ` [PATCH net v5 1/4] bnxt_en: return the RING_FREE status to callers Joe Damato
2026-11-07 19:58 ` netdev-bot+sashiko
2026-11-09 17:45 ` Joe Damato [this message]
2026-11-09 18:26 ` Michael Chan
2026-11-06 19:14 ` [PATCH net v5 2/4] bnxt_en: check HWRM response if completion never arrives Joe Damato
2026-11-07 19:58 ` netdev-bot+sashiko
2026-11-09 18:05 ` Joe Damato
2026-11-06 19:14 ` [PATCH net v5 3/4] bnxt_en: stop DMA before releasing rings the firmware did not free Joe Damato
2026-11-07 19:58 ` netdev-bot+sashiko
2026-11-09 19:52 ` Joe Damato
2026-11-06 19:14 ` [PATCH net v5 4/4] bnxt_en: refuse to open a device with stopped DMA Joe Damato
2026-11-07 19:58 ` netdev-bot+sashiko
2026-11-09 20:01 ` Joe Damato
2026-11-09 20:12 ` [PATCH net v5 0/4] bnxt_en: Make RING FREE more robust Joe Damato
2026-11-10 0:13 ` Michael Chan
2026-11-10 17:39 ` Joe Damato
2026-11-10 18:14 ` Michael Chan
2026-11-10 22:13 ` Joe Damato
2026-11-10 23:04 ` Michael Chan
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=avIGzUc6WaGgYBKG@devvm20253.cco0.facebook.com \
--to=joe@dama.to \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=edumazet@kernel.org \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michael.chan@broadcom.com \
--cc=netdev-bot+sashiko@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=pavan.chebbi@broadcom.com \
--cc=prashant@broadcom.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.