From: sashiko-bot@kernel.org
To: "Ratheesh Kannoth" <rkannoth@marvell.com>,
intel-wired-lan@lists.osuosl.org, linux-rdma@vger.kernel.org
Subject: Re: [PATCH v12 net-next 5/9] octeontx2-af: npc: cn20k: add subbank search order control
Date: Fri, 30 Oct 2026 04:54:04 +0000 [thread overview]
Message-ID: <sashiko-outbox-190399@kernel.org> (raw)
In-Reply-To: <20260508034912.4082520-6-rkannoth@marvell.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] Missing xa_erase() during search order update causes stale duplicate entries in tracking xarrays.
- [High] Missing error rollback in npc_cn20k_search_order_set() leaves internal allocator structures in a permanently corrupted state.
- [Low] Format string mismatch in rvu_af_dl_npc_srch_order_validate() causes potentially garbled logs.
--
commit 360483b7660f8774a4adf83ec93cc5565c7337b4
Author: Ratheesh Kannoth <rkannoth@marvell.com>
octeontx2-af: npc: cn20k: add subbank search order control
This commit adds a runtime parameter srch_order to control the search
order of MCAM subbanks during allocation in the octeontx2 driver. It
allows configuring the priority of the 32 subbanks for the CN20K NPC.
> diff --git a/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c b/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c
> index e9aad0ad3fa68..6f8f42234b068 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c
[ ... ]
> @@ -3906,6 +3906,56 @@ static void npc_unlock_all_subbank(void)
> mutex_unlock(&npc_priv.sb[i].lock);
> }
>
> +int npc_cn20k_search_order_set(struct rvu *rvu,
> + u64 narr[MAX_NUM_SUB_BANKS], int cnt)
> +{
> + struct npc_mcam *mcam = &rvu->hw->mcam;
> + struct npc_subbank *sb;
> + struct xarray *xa;
> + int sb_idx, rc;
> +
> + if (cnt != npc_priv.num_subbanks) {
> + dev_err(rvu->dev, "Number of entries(%u) != %u\n",
> + cnt, npc_priv.num_subbanks);
> + return -EINVAL;
> + }
> +
> + mutex_lock(&mcam->lock);
> + npc_lock_all_subbank();
> + restrict_valid = false;
> +
> + for (sb_idx = 0; sb_idx < cnt; sb_idx++) {
> + sb = &npc_priv.sb[sb_idx];
> +
> + xa = &npc_priv.xa_sb_free;
> + if (sb->flags & NPC_SUBBANK_FLAG_USED)
> + xa = &npc_priv.xa_sb_used;
> +
> + sb->arr_idx = narr[sb_idx];
> +
> + rc = xa_err(xa_store(xa, sb->arr_idx,
> + xa_mk_value(sb_idx), GFP_KERNEL));
If the new index assignment swaps indices between a free subbank and a used
subbank, is the old index in the original xarray ever overwritten?
Since xa_erase() is not called on the old arr_idx, this might leave the
subbank mapped at both its old and new arr_idx if they don't overwrite each
other.
Can this result in stale duplicate entries?
> + if (rc)
> + goto fail;
If xa_store() fails (for example, due to -ENOMEM from GFP_KERNEL) and returns
an error, the code jumps to the fail label. Are the successful modifications
made to previously processed subbanks rolled back?
If not, could this leave the system in a torn state where restrict_valid is
false, and some subbanks have updated indices while others keep their old
ones?
> + }
> +
> + for (int i = 0; i < cnt; i++)
> + subbank_srch_order[i] = (u32)narr[i];
> +
> +fail:
> + npc_unlock_all_subbank();
> + mutex_unlock(&mcam->lock);
> +
> + return rc;
> +}
[ ... ]
> diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c
> index a42404e6db7cc..aa3ecab5ebd88 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c
[ ... ]
> @@ -1619,12 +1620,83 @@ static int rvu_devlink_eswitch_mode_set(struct devlink *devlink, u16 mode,
[ ... ]
> +static int rvu_af_dl_npc_srch_order_validate(struct devlink *devlink, u32 id,
> + union devlink_param_value *val,
> + struct netlink_ext_ack *extack)
> +{
> + struct rvu_devlink *rvu_dl = devlink_priv(devlink);
> + struct rvu *rvu = rvu_dl->rvu;
> + bool restricted_order;
> + unsigned long w = 0;
> + u64 *arr;
> + u32 sz;
> +
> + npc_cn20k_search_order_get(&restricted_order, &sz);
> + if (sz != val->u64arr.size) {
> + dev_err(rvu->dev,
> + "Wrong size %llu, should be %u\n",
> + val->u64arr.size, sz);
The size field in devlink array values is a 32-bit unsigned integer (u32),
but the error message uses the %llu format specifier.
On some architectures, could this cause printk to consume 8 bytes from the
arguments and read garbage from adjacent memory?
> + return -EINVAL;
> + }
> +
> + arr = val->u64arr.val;
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260508034912.4082520-1-rkannoth@marvell.com?part=5
next prev parent reply other threads:[~2026-10-30 4:54 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-08 3:49 [Intel-wired-lan] [PATCH v12 net-next 0/9] octeontx2-af: npc: Enhancements Ratheesh Kannoth
2026-05-08 3:49 ` [Intel-wired-lan] [PATCH v12 net-next 1/9] octeontx2-af: npc: cn20k: debugfs enhancements Ratheesh Kannoth
2026-05-11 2:25 ` Ratheesh Kannoth
2026-10-30 4:54 ` sashiko-bot
2026-05-08 3:49 ` [Intel-wired-lan] [PATCH v12 net-next 2/9] net/mlx5e: trim stack use in PCIe congestion threshold helper Ratheesh Kannoth
2026-05-08 9:02 ` David Laight
2026-05-08 3:49 ` [Intel-wired-lan] [PATCH v12 net-next 3/9] devlink: pass param values by pointer Ratheesh Kannoth
2026-05-11 13:39 ` Przemek Kitszel
2026-05-08 3:49 ` [Intel-wired-lan] [PATCH v12 net-next 4/9] devlink: Implement devlink param multi attribute nested data values Ratheesh Kannoth
2026-05-11 2:31 ` Ratheesh Kannoth
2026-05-08 3:49 ` [Intel-wired-lan] [PATCH v12 net-next 5/9] octeontx2-af: npc: cn20k: add subbank search order control Ratheesh Kannoth
2026-05-11 2:32 ` Ratheesh Kannoth
2026-10-30 4:54 ` sashiko-bot [this message]
2026-05-08 3:49 ` [Intel-wired-lan] [PATCH v12 net-next 6/9] octeontx2: cn20k: Coordinate default rules with NIX LF lifecycle Ratheesh Kannoth
2026-05-11 2:44 ` Ratheesh Kannoth
2026-10-30 4:54 ` sashiko-bot
2026-05-08 3:49 ` [Intel-wired-lan] [PATCH v12 net-next 7/9] octeontx2-af: npc: Support for custom KPU profile from filesystem Ratheesh Kannoth
2026-05-11 3:23 ` Ratheesh Kannoth
2026-05-11 3:27 ` Ratheesh Kannoth
2026-05-11 11:55 ` Loktionov, Aleksandr
2026-10-30 4:54 ` sashiko-bot
2026-05-08 3:49 ` [Intel-wired-lan] [PATCH v12 net-next 8/9] octeontx2: cn20k: Respect NPC MCAM X2/X4 profile in flows and DFT alloc Ratheesh Kannoth
2026-05-11 3:25 ` Ratheesh Kannoth
2026-10-30 4:54 ` sashiko-bot
2026-05-08 3:49 ` [Intel-wired-lan] [PATCH v12 net-next 9/9] octeontx2-af: npc: cn20k: Allocate npc_priv and dstats dynamically Ratheesh Kannoth
2026-05-11 3:26 ` Ratheesh Kannoth
2026-10-30 4:54 ` sashiko-bot
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=sashiko-outbox-190399@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=linux-rdma@vger.kernel.org \
--cc=rkannoth@marvell.com \
--cc=sashiko-reviews@lists.linux.dev \
/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