The memzone holding the flow director programming packets is reserved
in i40e_fdir_setup() but never freed, as i40e_fdir_teardown() only
releases the FDIR queues and VSI.
It is therefore leaked when the port is closed.

Store the memzone pointer and free it on teardown.

Fixes: a778a1fa2e4e ("i40e: set up and initialize flow director")
Fixes: 71d35259ff67 ("i40e: tear down flow director")

Signed-off-by: Anurag Mandal <[email protected]>
---
 drivers/net/intel/i40e/i40e_ethdev.h | 1 +
 drivers/net/intel/i40e/i40e_fdir.c   | 4 ++++
 2 files changed, 5 insertions(+)

diff --git a/drivers/net/intel/i40e/i40e_ethdev.h 
b/drivers/net/intel/i40e/i40e_ethdev.h
index 68bff99b5d..77f79fc7da 100644
--- a/drivers/net/intel/i40e/i40e_ethdev.h
+++ b/drivers/net/intel/i40e/i40e_ethdev.h
@@ -790,6 +790,7 @@ struct i40e_fdir_info {
        struct ci_rx_queue *rxq;
        void *prg_pkt[I40E_FDIR_PRG_PKT_CNT];     /* memory for fdir program 
packet */
        uint64_t dma_addr[I40E_FDIR_PRG_PKT_CNT]; /* physic address of packet 
memory*/
+       const struct rte_memzone *prg_mz;         /* memzone backing prg_pkt */
        /*
         * txq available buffer counter, indicates how many available buffers
         * for fdir programming, initialized as I40E_FDIR_PRG_PKT_CNT
diff --git a/drivers/net/intel/i40e/i40e_fdir.c 
b/drivers/net/intel/i40e/i40e_fdir.c
index 71cab77e83..2464eb47c2 100644
--- a/drivers/net/intel/i40e/i40e_fdir.c
+++ b/drivers/net/intel/i40e/i40e_fdir.c
@@ -241,6 +241,8 @@ i40e_fdir_setup(struct i40e_pf *pf)
                        I40E_FDIR_PKT_LEN * i;
        }
 
+       pf->fdir.prg_mz = mz;
+
        pf->fdir.match_counter_index = I40E_COUNTER_INDEX_FDIR(hw->pf_id);
 
        PMD_DRV_LOG(INFO, "FDIR setup successfully, with programming queue %u.",
@@ -297,6 +299,8 @@ i40e_fdir_teardown(struct i40e_pf *pf)
        pf->fdir.rxq = NULL;
        i40e_tx_queue_release(pf->fdir.txq);
        pf->fdir.txq = NULL;
+       rte_memzone_free(pf->fdir.prg_mz);
+       pf->fdir.prg_mz = NULL;
        i40e_vsi_release(vsi);
        pf->fdir.fdir_vsi = NULL;
 }
-- 
2.25.1

Reply via email to