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 8/9] octeontx2: cn20k: Respect NPC MCAM X2/X4 profile in flows and DFT alloc
Date: Fri, 30 Oct 2026 04:54:06 +0000 [thread overview]
Message-ID: <sashiko-outbox-190402@kernel.org> (raw)
In-Reply-To: <20260508034912.4082520-9-rkannoth@marvell.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] The primary default rule allocation still hardcodes X2 keys and unmasked reference indices, completely ignoring the X4 hardware profile for PFs and successful VF attempts.
- [Medium] Caching device-specific hardware profile information in a global static variable causes a data race across concurrent device instances.
--
commit 0a14e92cf2754f6d4cb9d8447914740b55c1a43e
Author: Ratheesh Kannoth <rkannoth@marvell.com>
octeontx2: cn20k: Respect NPC MCAM X2/X4 profile in flows and DFT alloc
This commit updates the default CN20K NPC rule allocation and flow-install
path to respect the active MCAM keyword width, dynamically selecting X2 or X4
and masking reference indices accordingly. It caches the profile information
on the PF.
> diff --git a/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c b/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c
> index 67dfbe5ca903f..15b3f29d60ee9 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/af/cn20k/npc.c
> @@ -4467,11 +4467,18 @@ int npc_cn20k_dft_rules_alloc(struct rvu *rvu, u16 pcifunc)
> * as NPC_DFT_RULE_PRIO - 1 (higher hw priority)
> */
> req.contig = false;
> - req.kw_type = NPC_MCAM_KEY_X2;
> req.count = cnt;
> req.hdr.pcifunc = pcifunc;
> req.ref_prio = NPC_MCAM_LOWER_PRIO;
> - req.ref_entry = eidx + 1;
> +
> + if (npc_priv.kw == NPC_MCAM_KEY_X4) {
> + req.kw_type = NPC_MCAM_KEY_X4;
> + req.ref_entry = eidx & (npc_priv.bank_depth - 1);
> + } else {
> + req.kw_type = NPC_MCAM_KEY_X2;
> + req.ref_entry = eidx;
> + }
> +
Does the initial allocation attempt unconditionally hardcode X2 keys?
Looking at the code just above this fallback path in
npc_cn20k_dft_rules_alloc(), the primary allocation hardcodes the key type:
req.contig = false;
req.ref_prio = NPC_MCAM_HIGHER_PRIO;
req.ref_entry = eidx;
req.kw_type = NPC_MCAM_KEY_X2;
...
ret = rvu_mbox_handler_npc_mcam_alloc_entry(rvu, &req, &rsp);
If this first attempt succeeds, VFs might incorrectly get assigned X2 rules
on X4 silicon. Since PFs bypass the fallback path entirely if this fails,
will PF default rule allocation fail completely on X4 profiles?
[ ... ]
> diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
> index 38cc539d724d8..5dd0591fed999 100644
> --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
> +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c
> @@ -37,14 +37,13 @@ static void otx2_clear_ntuple_flow_info(struct otx2_nic *pfvf, struct otx2_flow_
> flow_cfg->max_flows = 0;
> }
>
> -static int otx2_mcam_pfl_info_get(struct otx2_nic *pfvf, bool *is_x2,
> - u16 *x4_slots)
> +static int otx2_mcam_pfl_info_get(struct otx2_nic *pfvf, u16 *x4_slots, u8 *kw_type)
> {
> struct npc_get_pfl_info_rsp *rsp;
> struct msg_req *req;
> static struct {
> bool is_set;
> - bool is_x2;
> + u8 kw_type;
> u16 x4_slots;
> } pfl_info;
Does caching this profile information in a static structure cause a data
race across concurrent device instances?
The accesses to this shared cache are protected by mutex_lock(&pfvf->mbox.lock).
Since this is a per-device instance lock, multiple network devices could
concurrently acquire their own independent locks and read or write the shared
pfl_info structure.
Could this lack of synchronization lead to torn reads, such as reading x4_slots
as 0 if the compiler reorders the write to is_set before x4_slots?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260508034912.4082520-1-rkannoth@marvell.com?part=8
next prev parent reply other threads:[~2026-10-30 4:54 UTC|newest]
Thread overview: 51+ 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 ` 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-08 3:49 ` Ratheesh Kannoth
2026-05-11 2:25 ` Ratheesh Kannoth
2026-05-11 2:25 ` [Intel-wired-lan] " 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 3:49 ` Ratheesh Kannoth
2026-05-08 9:02 ` [Intel-wired-lan] " David Laight
2026-05-08 9:02 ` David Laight
2026-10-30 4:54 ` sashiko-bot
2026-05-08 3:49 ` [Intel-wired-lan] [PATCH v12 net-next 3/9] devlink: pass param values by pointer Ratheesh Kannoth
2026-05-08 3:49 ` Ratheesh Kannoth
2026-05-11 13:39 ` Przemek Kitszel
2026-05-11 13:39 ` [Intel-wired-lan] " Przemek Kitszel
2026-10-30 4:54 ` sashiko-bot
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-08 3:49 ` Ratheesh Kannoth
2026-05-11 2:31 ` Ratheesh Kannoth
2026-05-11 2:31 ` [Intel-wired-lan] " 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-08 3:49 ` Ratheesh Kannoth
2026-05-11 2:32 ` Ratheesh Kannoth
2026-05-11 2:32 ` [Intel-wired-lan] " Ratheesh Kannoth
2026-10-30 4:54 ` sashiko-bot
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-08 3:49 ` Ratheesh Kannoth
2026-05-11 2:44 ` Ratheesh Kannoth
2026-05-11 2:44 ` [Intel-wired-lan] " 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-08 3:49 ` Ratheesh Kannoth
2026-05-11 3:23 ` Ratheesh Kannoth
2026-05-11 3:23 ` [Intel-wired-lan] " Ratheesh Kannoth
2026-05-11 3:27 ` Ratheesh Kannoth
2026-05-11 3:27 ` [Intel-wired-lan] " Ratheesh Kannoth
2026-05-11 11:55 ` Loktionov, Aleksandr
2026-05-11 11:55 ` Loktionov, Aleksandr
2026-05-12 2:11 ` Ratheesh Kannoth
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-08 3:49 ` Ratheesh Kannoth
2026-05-11 3:25 ` Ratheesh Kannoth
2026-05-11 3:25 ` [Intel-wired-lan] " Ratheesh Kannoth
2026-10-30 4:54 ` sashiko-bot [this message]
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-08 3:49 ` Ratheesh Kannoth
2026-05-11 3:26 ` Ratheesh Kannoth
2026-05-11 3:26 ` [Intel-wired-lan] " 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-190402@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 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.