]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
octeontx2-af: Validate NIX maximum LFs correctly
authorSubbaraya Sundeep <sbhatta@marvell.com>
Sun, 21 Jun 2026 23:00:53 +0000 (04:30 +0530)
committerJakub Kicinski <kuba@kernel.org>
Thu, 25 Jun 2026 01:46:01 +0000 (18:46 -0700)
NIX maximum number of LFs can be set via devlink command
but that can be done before assigning any LFs to a PF/VF.
The condition used to check whether any LFs are assigned is
incorrect. This patch fixes that condition.

Fixes: dd7842878633 ("octeontx2-af: Add new devlink param to configure maximum usable NIX block LFs")
Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
Link: https://patch.msgid.link/1782082853-6941-1-git-send-email-sbhatta@marvell.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/marvell/octeontx2/af/rvu_devlink.c

index aa3ecab5ebd881b6f0359baf82178e6a45fbb857..d63c3d33775acd250e1fa799c0ac0c994bc7bff5 100644 (file)
@@ -1511,7 +1511,9 @@ static int rvu_af_dl_nix_maxlf_validate(struct devlink *devlink, u32 id,
        struct rvu_devlink *rvu_dl = devlink_priv(devlink);
        struct rvu *rvu = rvu_dl->rvu;
        u16 max_nix0_lf, max_nix1_lf;
-       struct npc_mcam *mcam;
+       struct rvu_block *block;
+       int blkaddr = 0;
+       int free_lfs;
        u64 cfg;
 
        cfg = rvu_read64(rvu, BLKADDR_NIX0, NIX_AF_CONST2);
@@ -1519,14 +1521,23 @@ static int rvu_af_dl_nix_maxlf_validate(struct devlink *devlink, u32 id,
        cfg = rvu_read64(rvu, BLKADDR_NIX1, NIX_AF_CONST2);
        max_nix1_lf = cfg & 0xFFF;
 
-       /* Do not allow user to modify maximum NIX LFs while mcam entries
-        * have already been assigned.
+       /* Do not allow user to modify maximum NIX LFs while NIX LFs
+        * have already been assigned. Note that modifying NIX LFs count
+        * can be done only before any LF attach requests from PFs and VFs
+        * and not later or concurrently.
         */
-       mcam = &rvu->hw->mcam;
-       if (mcam->bmap_fcnt < mcam->bmap_entries) {
-               NL_SET_ERR_MSG_MOD(extack,
-                                  "mcam entries have already been assigned, can't resize");
-               return -EPERM;
+       blkaddr = rvu_get_next_nix_blkaddr(rvu, blkaddr);
+       while (blkaddr) {
+               block = &rvu->hw->block[blkaddr];
+
+               free_lfs = rvu_rsrc_free_count(&block->lf);
+               if (free_lfs != block->lf.max) {
+                       NL_SET_ERR_MSG_MOD(extack,
+                                          "NIX LFs already assigned, can't resize");
+                       return -EPERM;
+               }
+
+               blkaddr = rvu_get_next_nix_blkaddr(rvu, blkaddr);
        }
 
        if (max_nix0_lf && val->vu16 > max_nix0_lf) {