mirror of
https://github.com/torvalds/linux.git
synced 2026-07-28 01:55:51 +02:00
octeontx2-af: Validate NIX maximum LFs correctly
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: dd78428786 ("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>
This commit is contained in:
parent
2bd6f26d4c
commit
1576d12a39
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user