octeontx2-af: Fix mcam entry resource leak
authorSubbaraya Sundeep <sbhatta@marvell.com>
Wed, 3 Aug 2022 07:54:14 +0000 (13:24 +0530)
committerJakub Kicinski <kuba@kernel.org>
Sat, 6 Aug 2022 01:56:34 +0000 (18:56 -0700)
The teardown sequence in FLR handler returns if no NIX LF
is attached to PF/VF because it indicates that graceful
shutdown of resources already happened. But there is a
chance of all allocated MCAM entries not being freed by
PF/VF. Hence free mcam entries even in case of detached LF.

Fixes: c554f9c1574e ("octeontx2-af: Teardown NPA, NIX LF upon receiving FLR")
Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
Signed-off-by: Sunil Goutham <sgoutham@marvell.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/marvell/octeontx2/af/rvu.c
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c

index 6809b8b4c55605f5bf89696d591066dbf032f557..7282a826d81e0f6a9ffcf7d2802e3a450f6e44ab 100644 (file)
@@ -2580,6 +2580,12 @@ static void __rvu_flr_handler(struct rvu *rvu, u16 pcifunc)
        rvu_blklf_teardown(rvu, pcifunc, BLKADDR_NPA);
        rvu_reset_lmt_map_tbl(rvu, pcifunc);
        rvu_detach_rsrcs(rvu, NULL, pcifunc);
+       /* In scenarios where PF/VF drivers detach NIXLF without freeing MCAM
+        * entries, check and free the MCAM entries explicitly to avoid leak.
+        * Since LF is detached use LF number as -1.
+        */
+       rvu_npc_free_mcam_entries(rvu, pcifunc, -1);
+
        mutex_unlock(&rvu->flr_lock);
 }
 
index a0198b2e23de2e8b44ea499c07da058c7047d8d7..1e348fd0d930e090c23509494e69b8a41d9b8843 100644 (file)
@@ -1097,6 +1097,9 @@ static void npc_enadis_default_entries(struct rvu *rvu, u16 pcifunc,
 
 void rvu_npc_disable_default_entries(struct rvu *rvu, u16 pcifunc, int nixlf)
 {
+       if (nixlf < 0)
+               return;
+
        npc_enadis_default_entries(rvu, pcifunc, nixlf, false);
 
        /* Delete multicast and promisc MCAM entries */
@@ -1136,6 +1139,9 @@ bool rvu_npc_enable_mcam_by_entry_index(struct rvu *rvu, int entry, int intf, bo
 
 void rvu_npc_enable_default_entries(struct rvu *rvu, u16 pcifunc, int nixlf)
 {
+       if (nixlf < 0)
+               return;
+
        /* Enables only broadcast match entry. Promisc/Allmulti are enabled
         * in set_rx_mode mbox handler.
         */