[dpdk-stable] [PATCH 19.11] net/bnxt: reset filter indices on free
Kalesh A P
kalesh-anakkur.purayil at broadcom.com
Thu Apr 29 16:36:22 CEST 2021
From: Kalesh AP <kalesh-anakkur.purayil at broadcom.com>
[ upstream commit 7105de7085b022a84ffefbfad6a140e493ee0612 ]
Fix bnxt_free_filter() to ensure that the filter indices
are reset correctly when a filter is freed.
This change helps in avoiding few duplicate code as well.
Fixes: 51fafb89a9a0 ("net/bnxt: get rid of ff pools and use VNIC info array")
Fixes: 5c1171c97216 ("net/bnxt: refactor filter/flow")
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil at broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur at broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
---
drivers/net/bnxt/bnxt_ethdev.c | 10 ----------
drivers/net/bnxt/bnxt_filter.c | 5 +++++
drivers/net/bnxt/bnxt_flow.c | 1 -
3 files changed, 5 insertions(+), 11 deletions(-)
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 06843d8..7ec72a1 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -1038,8 +1038,6 @@ static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev,
STAILQ_REMOVE(&vnic->filter, filter,
bnxt_filter_info, next);
bnxt_hwrm_clear_l2_filter(bp, filter);
- filter->mac_index = INVALID_MAC_INDEX;
- memset(&filter->l2_addr, 0, RTE_ETHER_ADDR_LEN);
bnxt_free_filter(bp, filter);
}
filter = temp_filter;
@@ -1086,7 +1084,6 @@ static int bnxt_add_mac_filter(struct bnxt *bp, struct bnxt_vnic_info *vnic,
else
STAILQ_INSERT_TAIL(&vnic->filter, filter, next);
} else {
- memset(&filter->l2_addr, 0, RTE_ETHER_ADDR_LEN);
bnxt_free_filter(bp, filter);
}
@@ -1841,7 +1838,6 @@ static int bnxt_add_vlan_filter(struct bnxt *bp, uint16_t vlan_id)
/* Free the newly allocated filter as we were
* not able to create the filter in hardware.
*/
- filter->fw_l2_filter_id = UINT64_MAX;
bnxt_free_filter(bp, filter);
return rc;
}
@@ -1896,7 +1892,6 @@ static int bnxt_del_dflt_mac_filter(struct bnxt *bp,
STAILQ_REMOVE(&vnic->filter, filter,
bnxt_filter_info, next);
bnxt_free_filter(bp, filter);
- filter->fw_l2_filter_id = UINT64_MAX;
}
return rc;
}
@@ -2845,14 +2840,11 @@ bnxt_cfg_ntuple_filter(struct bnxt *bp,
STAILQ_REMOVE(&vnic->filter, mfilter, bnxt_filter_info, next);
bnxt_free_filter(bp, mfilter);
- mfilter->fw_l2_filter_id = -1;
bnxt_free_filter(bp, bfilter);
- bfilter->fw_l2_filter_id = -1;
}
return 0;
free_filter:
- bfilter->fw_l2_filter_id = -1;
bnxt_free_filter(bp, bfilter);
return ret;
}
@@ -3250,7 +3242,6 @@ bnxt_fdir_filter(struct rte_eth_dev *dev,
STAILQ_REMOVE(&vnic->filter, match,
bnxt_filter_info, next);
bnxt_free_filter(bp, match);
- filter->fw_l2_filter_id = -1;
bnxt_free_filter(bp, filter);
}
break;
@@ -3283,7 +3274,6 @@ bnxt_fdir_filter(struct rte_eth_dev *dev,
return ret;
free_filter:
- filter->fw_l2_filter_id = -1;
bnxt_free_filter(bp, filter);
return ret;
}
diff --git a/drivers/net/bnxt/bnxt_filter.c b/drivers/net/bnxt/bnxt_filter.c
index f4b18d5..2b33d26 100644
--- a/drivers/net/bnxt/bnxt_filter.c
+++ b/drivers/net/bnxt/bnxt_filter.c
@@ -193,5 +193,10 @@ struct bnxt_filter_info *bnxt_get_unused_filter(struct bnxt *bp)
void bnxt_free_filter(struct bnxt *bp, struct bnxt_filter_info *filter)
{
+ memset(filter, 0, sizeof(*filter));
+ filter->mac_index = INVALID_MAC_INDEX;
+ filter->fw_l2_filter_id = UINT64_MAX;
+ filter->fw_ntuple_filter_id = UINT64_MAX;
+ filter->fw_em_filter_id = UINT64_MAX;
STAILQ_INSERT_TAIL(&bp->free_filter_list, filter, next);
}
diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c
index f069e5f..575924a 100644
--- a/drivers/net/bnxt/bnxt_flow.c
+++ b/drivers/net/bnxt/bnxt_flow.c
@@ -1502,7 +1502,6 @@ bnxt_flow_validate(struct rte_eth_dev *dev,
exit:
/* No need to hold on to this filter if we are just validating flow */
- filter->fw_l2_filter_id = UINT64_MAX;
bnxt_free_filter(bp, filter);
bnxt_release_flow_lock(bp);
--
2.10.1
More information about the stable
mailing list