提交 c0e48937 编写于 作者: R Ratheesh Kannoth 提交者: David S. Miller

octeontx2-af: Fix promiscuous mode

CN10KB silicon introduced a new exact match feature,
which is used for DMAC filtering. The state of installed
DMAC filters in this exact match table is getting corrupted
when promiscuous mode is toggled. Fix this by not touching
Exact match related config when promiscuous mode is toggled.

Fixes: 2dba9459 ("octeontx2-af: Wrapper functions for MAC addr add/del/update/reset")
Signed-off-by: NRatheesh Kannoth <rkannoth@marvell.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 0ad4982c
...@@ -1164,10 +1164,8 @@ static u16 __rvu_npc_exact_cmd_rules_cnt_update(struct rvu *rvu, int drop_mcam_i ...@@ -1164,10 +1164,8 @@ static u16 __rvu_npc_exact_cmd_rules_cnt_update(struct rvu *rvu, int drop_mcam_i
{ {
struct npc_exact_table *table; struct npc_exact_table *table;
u16 *cnt, old_cnt; u16 *cnt, old_cnt;
bool promisc;
table = rvu->hw->table; table = rvu->hw->table;
promisc = table->promisc_mode[drop_mcam_idx];
cnt = &table->cnt_cmd_rules[drop_mcam_idx]; cnt = &table->cnt_cmd_rules[drop_mcam_idx];
old_cnt = *cnt; old_cnt = *cnt;
...@@ -1179,16 +1177,13 @@ static u16 __rvu_npc_exact_cmd_rules_cnt_update(struct rvu *rvu, int drop_mcam_i ...@@ -1179,16 +1177,13 @@ static u16 __rvu_npc_exact_cmd_rules_cnt_update(struct rvu *rvu, int drop_mcam_i
*enable_or_disable_cam = false; *enable_or_disable_cam = false;
if (promisc) /* If all rules are deleted, disable cam */
goto done;
/* If all rules are deleted and not already in promisc mode; disable cam */
if (!*cnt && val < 0) { if (!*cnt && val < 0) {
*enable_or_disable_cam = true; *enable_or_disable_cam = true;
goto done; goto done;
} }
/* If rule got added and not already in promisc mode; enable cam */ /* If rule got added, enable cam */
if (!old_cnt && val > 0) { if (!old_cnt && val > 0) {
*enable_or_disable_cam = true; *enable_or_disable_cam = true;
goto done; goto done;
...@@ -1443,7 +1438,6 @@ int rvu_npc_exact_promisc_disable(struct rvu *rvu, u16 pcifunc) ...@@ -1443,7 +1438,6 @@ int rvu_npc_exact_promisc_disable(struct rvu *rvu, u16 pcifunc)
u32 drop_mcam_idx; u32 drop_mcam_idx;
bool *promisc; bool *promisc;
bool rc; bool rc;
u32 cnt;
table = rvu->hw->table; table = rvu->hw->table;
...@@ -1466,17 +1460,8 @@ int rvu_npc_exact_promisc_disable(struct rvu *rvu, u16 pcifunc) ...@@ -1466,17 +1460,8 @@ int rvu_npc_exact_promisc_disable(struct rvu *rvu, u16 pcifunc)
return LMAC_AF_ERR_INVALID_PARAM; return LMAC_AF_ERR_INVALID_PARAM;
} }
*promisc = false; *promisc = false;
cnt = __rvu_npc_exact_cmd_rules_cnt_update(rvu, drop_mcam_idx, 0, NULL);
mutex_unlock(&table->lock); mutex_unlock(&table->lock);
/* If no dmac filter entries configured, disable drop rule */
if (!cnt)
rvu_npc_enable_mcam_by_entry_index(rvu, drop_mcam_idx, NIX_INTF_RX, false);
else
rvu_npc_enable_mcam_by_entry_index(rvu, drop_mcam_idx, NIX_INTF_RX, !*promisc);
dev_dbg(rvu->dev, "%s: disabled promisc mode (cgx=%d lmac=%d, cnt=%d)\n",
__func__, cgx_id, lmac_id, cnt);
return 0; return 0;
} }
...@@ -1494,7 +1479,6 @@ int rvu_npc_exact_promisc_enable(struct rvu *rvu, u16 pcifunc) ...@@ -1494,7 +1479,6 @@ int rvu_npc_exact_promisc_enable(struct rvu *rvu, u16 pcifunc)
u32 drop_mcam_idx; u32 drop_mcam_idx;
bool *promisc; bool *promisc;
bool rc; bool rc;
u32 cnt;
table = rvu->hw->table; table = rvu->hw->table;
...@@ -1517,17 +1501,8 @@ int rvu_npc_exact_promisc_enable(struct rvu *rvu, u16 pcifunc) ...@@ -1517,17 +1501,8 @@ int rvu_npc_exact_promisc_enable(struct rvu *rvu, u16 pcifunc)
return LMAC_AF_ERR_INVALID_PARAM; return LMAC_AF_ERR_INVALID_PARAM;
} }
*promisc = true; *promisc = true;
cnt = __rvu_npc_exact_cmd_rules_cnt_update(rvu, drop_mcam_idx, 0, NULL);
mutex_unlock(&table->lock); mutex_unlock(&table->lock);
/* If no dmac filter entries configured, disable drop rule */
if (!cnt)
rvu_npc_enable_mcam_by_entry_index(rvu, drop_mcam_idx, NIX_INTF_RX, false);
else
rvu_npc_enable_mcam_by_entry_index(rvu, drop_mcam_idx, NIX_INTF_RX, !*promisc);
dev_dbg(rvu->dev, "%s: Enabled promisc mode (cgx=%d lmac=%d cnt=%d)\n",
__func__, cgx_id, lmac_id, cnt);
return 0; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册