X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=drivers%2Fnet%2Fbnxt%2Fbnxt_filter.c;h=67daec4118a6642406ed389b14b7e9b8698a717d;hb=6e7cbd63706f3435b9d9a2057a37db1da01db9a7;hp=32af60612cfcae315578a9e3aaacb7500206a95d;hpb=c3f15def2ebe9cc255cf0e5cf32aa171f5b4326d;p=deb_dpdk.git diff --git a/drivers/net/bnxt/bnxt_filter.c b/drivers/net/bnxt/bnxt_filter.c index 32af6061..67daec41 100644 --- a/drivers/net/bnxt/bnxt_filter.c +++ b/drivers/net/bnxt/bnxt_filter.c @@ -159,6 +159,14 @@ void bnxt_free_filter_mem(struct bnxt *bp) rte_free(bp->filter_info); bp->filter_info = NULL; + + for (i = 0; i < bp->pf.max_vfs; i++) { + STAILQ_FOREACH(filter, &bp->pf.vf_info[i].filter, next) { + rte_free(filter); + STAILQ_REMOVE(&bp->pf.vf_info[i].filter, filter, + bnxt_filter_info, next); + } + } } int bnxt_alloc_filter_mem(struct bnxt *bp) @@ -1045,9 +1053,13 @@ bnxt_match_filter(struct bnxt *bp, struct bnxt_filter_info *nf) sizeof(nf->dst_ipaddr_mask))) { if (mf->dst_id == nf->dst_id) return -EEXIST; - /* Same Flow, Different queue + /* + * Same Flow, Different queue * Clear the old ntuple filter + * Reuse the matching L2 filter + * ID for the new filter */ + nf->fw_l2_filter_id = mf->fw_l2_filter_id; if (nf->filter_type == HWRM_CFA_EM_FILTER) bnxt_hwrm_clear_em_filter(bp, mf); if (nf->filter_type == HWRM_CFA_NTUPLE_FILTER)