X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fbnxt%2Fbnxt_filter.c;h=1d08e03b2ff016e242391778a4f25af4536a3f58;hb=2addc463eed9e2d7cbda25b7bf9d2ed1412b7236;hp=b31f10479edb4025b5533a3ca264f41e439c5dfc;hpb=39b88344e36426bea97cb131fb8ff5b4348e4676;p=dpdk.git diff --git a/drivers/net/bnxt/bnxt_filter.c b/drivers/net/bnxt/bnxt_filter.c index b31f10479e..1d08e03b2f 100644 --- a/drivers/net/bnxt/bnxt_filter.c +++ b/drivers/net/bnxt/bnxt_filter.c @@ -1,5 +1,5 @@ /* SPDX-License-Identifier: BSD-3-Clause - * Copyright(c) 2014-2018 Broadcom + * Copyright(c) 2014-2021 Broadcom * All rights reserved. */ @@ -26,13 +26,11 @@ struct bnxt_filter_info *bnxt_alloc_filter(struct bnxt *bp) { struct bnxt_filter_info *filter; - /* Find the 1st unused filter from the free_filter_list pool*/ - filter = STAILQ_FIRST(&bp->free_filter_list); + filter = bnxt_get_unused_filter(bp); if (!filter) { PMD_DRV_LOG(ERR, "No more free filter resources\n"); return NULL; } - STAILQ_REMOVE_HEAD(&bp->free_filter_list, next); filter->mac_index = INVALID_MAC_INDEX; /* Default to L2 MAC Addr filter */ @@ -41,8 +39,7 @@ struct bnxt_filter_info *bnxt_alloc_filter(struct bnxt *bp) HWRM_CFA_L2_FILTER_ALLOC_INPUT_ENABLES_L2_ADDR_MASK; memcpy(filter->l2_addr, bp->mac_addr, RTE_ETHER_ADDR_LEN); memset(filter->l2_addr_mask, 0xff, RTE_ETHER_ADDR_LEN); - /* bump up the reference count of filter */ - filter->l2_ref_cnt++; + return filter; } @@ -58,7 +55,7 @@ struct bnxt_filter_info *bnxt_alloc_vf_filter(struct bnxt *bp, uint16_t vf) } filter->fw_l2_filter_id = UINT64_MAX; - STAILQ_INSERT_TAIL(&bp->pf.vf_info[vf].filter, filter, next); + STAILQ_INSERT_TAIL(&bp->pf->vf_info[vf].filter, filter, next); return filter; } @@ -84,6 +81,15 @@ void bnxt_free_all_filters(struct bnxt *bp) struct bnxt_filter_info *filter, *temp_filter; unsigned int i; + for (i = 0; i < bp->pf->max_vfs; i++) { + STAILQ_FOREACH(filter, &bp->pf->vf_info[i].filter, next) { + bnxt_hwrm_clear_l2_filter(bp, filter); + } + } + + if (bp->vnic_info == NULL) + return; + for (i = 0; i < bp->nr_vnics; i++) { vnic = &bp->vnic_info[i]; filter = STAILQ_FIRST(&vnic->filter); @@ -98,11 +104,6 @@ void bnxt_free_all_filters(struct bnxt *bp) STAILQ_INIT(&vnic->filter); } - for (i = 0; i < bp->pf.max_vfs; i++) { - STAILQ_FOREACH(filter, &bp->pf.vf_info[i].filter, next) { - bnxt_hwrm_clear_l2_filter(bp, filter); - } - } } void bnxt_free_filter_mem(struct bnxt *bp) @@ -147,10 +148,10 @@ 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) { + 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, + STAILQ_REMOVE(&bp->pf->vf_info[i].filter, filter, bnxt_filter_info, next); } }