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