Linux RDMA and InfiniBand development
 help / color / mirror / Atom feed
From: netdev-bot+sashiko@kernel.org
To: longli@microsoft.com
Cc: kotaranov@microsoft.com, kuba@kernel.org, davem@davemloft.net,
	pabeni@redhat.com, edumazet@google.com, andrew+netdev@lunn.ch,
	jgg@ziepe.ca, leon@kernel.org, haiyangz@microsoft.com,
	kys@microsoft.com, wei.liu@kernel.org, decui@microsoft.com,
	shradhagupta@linux.microsoft.com, horms@kernel.org,
	ernis@linux.microsoft.com, stephen@networkplumber.org,
	shirazsaleem@microsoft.com, netdev@vger.kernel.org,
	linux-rdma@vger.kernel.org, linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next v3 07/13] net: mana: swap queue sets in mana_xdp_set
Date: Fri, 04 Sep 2026 04:46:48 +0000	[thread overview]
Message-ID: <178849720830.4131868.15408619523737884191@kernel.org> (raw)
In-Reply-To: <20260901014442.2945689-8-longli@microsoft.com>

Thank you for your contribution! Sashiko AI review found 1 potential
issue(s) to consider:

Critical: 0 · High: 0 · Medium: 0 · Low: 1

- [Low] The rewrite silently repairs a real, user-triggerable failure-
  path bug in the code it replaces, without documenting it or carrying a…

--

net: mana: swap queue sets in mana_xdp_set

The patch converts mana_xdp_set() from the detach/attach sequence to the
pre-allocate-and-swap scheme, so the RX queues are rebuilt for the new
buffer layout before anything live is touched. The XDP program becomes
part of struct mana_qset so it is installed and rolled back together with
the queues it was sized for.

> diff --git a/drivers/net/ethernet/microsoft/mana/mana_bpf.c b/drivers/net/ethernet/microsoft/mana/mana_bpf.c
> index e16ce2a071583..d2093625956bb 100644
> --- a/drivers/net/ethernet/microsoft/mana/mana_bpf.c
> +++ b/drivers/net/ethernet/microsoft/mana/mana_bpf.c

[ ... ]

> @@ -198,46 +205,46 @@ static int mana_xdp_set(struct net_device *ndev, struct bpf_prog *prog,
>  		return -EOPNOTSUPP;
>  	}
>  
> -	/* One refcnt of the prog is hold by the caller already, so
> -	 * don't increase refcnt for this one.
> -	 */
> -	apc->bpf_prog = prog;
> -
>  	if (apc->port_is_up) {
> -		/* Re-create rxq's after xdp prog was loaded or unloaded.
> -		 * Ex: re create rxq's to switch from full pages to smaller
> -		 * size page fragments when xdp prog is unloaded and
> -		 * vice-versa.
> -		 */
> -
> -		/* Pre-allocate buffers to prevent failure in mana_attach */
> -		err = mana_pre_alloc_rxbufs(apc, ndev->mtu, apc->num_queues);
> -		if (err) {
> +		scratch = mana_qset_scratch_alloc(apc);
> +		if (!scratch) {
>  			NL_SET_ERR_MSG_MOD(extack,
> -					   "XDP: Insufficient memory for tx/rx re-config");
> -			return err;
> +					   "XDP: Insufficient memory for re-config");
> +			return -ENOMEM;
>  		}
>  
> -		err = mana_detach(ndev, false);
> +		err = mana_alloc_qset(apc, scratch, apc->num_queues,
> +				      apc->rx_queue_size, apc->tx_queue_size,
> +				      apc->priv_flags, apc->configured_mtu,
> +				      prog, &newq);
>  		if (err) {
> -			netdev_err(ndev,
> -				   "mana_detach failed at xdp set: %d\n", err);
>  			NL_SET_ERR_MSG_MOD(extack,
> -					   "XDP: Re-config failed at detach");
> -			goto err_dealloc_rxbuffs;
> +					   "XDP: Re-config failed at alloc");
> +			mana_qset_scratch_free(scratch);
> +			return err;
>  		}

[Severity: Low]
Does this hunk quietly fix a failure-path bug in the code it replaces?

In the removed version, apc->bpf_prog was assigned before any allocation:

	apc->bpf_prog = prog;

	if (apc->port_is_up) {
		err = mana_pre_alloc_rxbufs(apc, ndev->mtu, apc->num_queues);
		if (err) {
			NL_SET_ERR_MSG_MOD(extack,
					   "XDP: Insufficient memory for tx/rx re-config");
			return err;
		}

That early return skips the err_dealloc_rxbuffs label, which is the only
place that restored the old pointer:

	err_dealloc_rxbuffs:
		apc->bpf_prog = old_prog;

So on -ENOMEM from mana_pre_alloc_rxbufs() the attach is reported as failed
to userspace, the BPF core drops the caller's reference, and apc->bpf_prog
keeps pointing at the released program. A later mana_xdp_get() consumer such
as mana_chn_setxdp() from mana_alloc_queues() (next ifup, or after a reset)
would then bpf_prog_add() on that pointer.

The new code leaves the live configuration alone until mana_alloc_qset() and
mana_publish_qset() succeed, so the stale pointer can no longer happen.

The commit message only mentions the queue swap and the window where queues
ran without a program:

    The program becomes part of the queue-set configuration, so it is
    swapped atomically with the queues it was built for and restored by the
    rollback path. Program references follow the same swap, so attaching no
    longer leaves the queues briefly running without one.

Could it also note the corrected failure behaviour? The defect appears to
date back to 730ff06d3f5c ("net: mana: Use page pool fragments for RX
buffers instead of full pages to improve memory efficiency."). Since this
refactor is not backportable, would a separate minimal fix for net, or a
Fixes tag, help stable triage here?

>  
> -		err = mana_attach(ndev);
> +		err = mana_publish_qset(apc, &newq, &oldq);
>  		if (err) {

[ ... ]

-- 
Sashiko AI review · https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260901014442.2945689-1-longli%40microsoft.com

  reply	other threads:[~2026-09-04  4:46 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-01  1:44 [PATCH net-next v3 00/13] net: mana: reconfigure by replacing the queue set Long Li
2026-09-01  1:44 ` [PATCH net-next v3 01/13] net: mana: add queue-set allocation and teardown helpers Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 02/13] net: mana: share the EQ pool across a queue-set swap Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 03/13] net: mana: swap queue sets in mana_set_channels Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 04/13] net: mana: swap queue sets in mana_set_ringparam Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 05/13] net: mana: swap queue sets in mana_set_priv_flags Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 06/13] net: mana: swap queue sets in mana_change_mtu Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 07/13] net: mana: swap queue sets in mana_xdp_set Long Li
2026-09-04  4:46   ` netdev-bot+sashiko [this message]
2026-09-01  1:44 ` [PATCH net-next v3 08/13] net: mana: do not bail out of mana_detach on dealloc failure Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 09/13] net: mana: keep per-queue statistics in the port context Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 10/13] net: mana: release EQs left idle by a channel-count reduction Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 11/13] net: mana: keep a user-configured RSS table across a queue rebuild Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 12/13] net: mana: keep the surviving queues when the channel count is reduced Long Li
2026-09-04  4:46   ` netdev-bot+sashiko
2026-09-01  1:44 ` [PATCH net-next v3 13/13] net: mana: keep the existing queues when the channel count is raised Long Li
2026-09-04  4:46   ` netdev-bot+sashiko

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=178849720830.4131868.15408619523737884191@kernel.org \
    --to=netdev-bot+sashiko@kernel.org \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=decui@microsoft.com \
    --cc=edumazet@google.com \
    --cc=ernis@linux.microsoft.com \
    --cc=haiyangz@microsoft.com \
    --cc=horms@kernel.org \
    --cc=jgg@ziepe.ca \
    --cc=kotaranov@microsoft.com \
    --cc=kuba@kernel.org \
    --cc=kys@microsoft.com \
    --cc=leon@kernel.org \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=longli@microsoft.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=shirazsaleem@microsoft.com \
    --cc=shradhagupta@linux.microsoft.com \
    --cc=stephen@networkplumber.org \
    --cc=wei.liu@kernel.org \
    /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