DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 00/18] bnxt PMD fixes
@ 2022-01-04  8:38 Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 01/18] net/bnxt: fix bnxt_dev_set_mc_addr_list_op Kalesh A P
                   ` (18 more replies)
  0 siblings, 19 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

This series contains bnxt PMD bug fixes. Please apply.

Ajit Khaparde (4):
  net/bnxt: fix ring teardown
  net/bnxt: fix PAM4 mask setting
  net/bnxt: fix pointer access
  net/bnxt: check VF rep pointer before access

Kalesh AP (13):
  net/bnxt: fix bnxt_dev_set_mc_addr_list_op
  net/bnxt: fix to restore mcast macs during reset recovery
  net/bnxt: fix queue stop operation
  net/bnxt: restore RSS configuration after reset recovery
  net/bnxt: fix restoring VLAN filtering after recovery
  net/bnxt: fix to cap max number of unicast MACs
  net/bnxt: set fast-path pointers only if recovery succeeds
  net/bnxt: improve recovery related log messages
  net/bnxt: add null check for mark table
  net/bnxt: fix flow create when RSS is disabled
  net/bnxt: get max supported multicast filters count
  net/bnxt: fix handling of VF configuration changes
  net/bnxt: fix incorrect memset in bnxt_dev_xstats_get_op

Somnath Kotur (1):
  net/bnxt: refactor bnxt_stop_rxtx() for reuse

 drivers/net/bnxt/bnxt.h        |  16 +++--
 drivers/net/bnxt/bnxt_cpr.c    |  41 +++++++++---
 drivers/net/bnxt/bnxt_cpr.h    |   2 +-
 drivers/net/bnxt/bnxt_ethdev.c | 142 +++++++++++++++++++++++++++++------------
 drivers/net/bnxt/bnxt_flow.c   |  14 +---
 drivers/net/bnxt/bnxt_hwrm.c   |  86 ++++++++++++-------------
 drivers/net/bnxt/bnxt_hwrm.h   |   5 +-
 drivers/net/bnxt/bnxt_reps.c   |  15 +++--
 drivers/net/bnxt/bnxt_rxq.c    |   9 ++-
 drivers/net/bnxt/bnxt_rxr.c    |   6 ++
 drivers/net/bnxt/bnxt_stats.c  |   2 +-
 drivers/net/bnxt/bnxt_txr.c    |   3 +
 drivers/net/bnxt/bnxt_vnic.c   |  16 ++---
 drivers/net/bnxt/bnxt_vnic.h   |   6 +-
 14 files changed, 223 insertions(+), 140 deletions(-)

-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 01/18] net/bnxt: fix bnxt_dev_set_mc_addr_list_op
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 02/18] net/bnxt: fix to restore mcast macs during reset recovery Kalesh A P
                   ` (17 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

Fix to cache the multicast mac addresses added to the port
to the driver private structure memory. Use this cached mc list
to program the FW.

This fixes an issue where multicast packets reception is
successful only if the multicast mac address of the packets
is the first one in the multicast address list of the port.

This is in preparation for another fix in the series.

Fixes: d69851df12b2 ("net/bnxt: support multicast filter and set MAC addr")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt.h        |  5 +++++
 drivers/net/bnxt/bnxt_ethdev.c | 34 +++++++++++++++++++++++++---------
 drivers/net/bnxt/bnxt_hwrm.c   |  4 ++--
 drivers/net/bnxt/bnxt_vnic.c   |  7 +------
 drivers/net/bnxt/bnxt_vnic.h   |  4 ----
 5 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 2341610..521fcb7 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -891,6 +891,11 @@ struct bnxt {
 	uint16_t		tx_cfa_action;
 	struct bnxt_ring_stats	*prev_rx_ring_stats;
 	struct bnxt_ring_stats	*prev_tx_ring_stats;
+
+#define BNXT_MAX_MC_ADDRS	16
+	struct rte_ether_addr	*mcast_addr_list;
+	rte_iova_t		mc_list_dma_addr;
+	uint32_t		nb_mc_addr;
 };
 
 static
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index f79f33a..50ffa30 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -2831,9 +2831,8 @@ bnxt_dev_set_mc_addr_list_op(struct rte_eth_dev *eth_dev,
 			  uint32_t nb_mc_addr)
 {
 	struct bnxt *bp = eth_dev->data->dev_private;
-	char *mc_addr_list = (char *)mc_addr_set;
 	struct bnxt_vnic_info *vnic;
-	uint32_t off = 0, i = 0;
+	uint32_t i = 0;
 	int rc;
 
 	rc = is_bnxt_in_error(bp);
@@ -2842,6 +2841,8 @@ bnxt_dev_set_mc_addr_list_op(struct rte_eth_dev *eth_dev,
 
 	vnic = BNXT_GET_DEFAULT_VNIC(bp);
 
+	bp->nb_mc_addr = nb_mc_addr;
+
 	if (nb_mc_addr > BNXT_MAX_MC_ADDRS) {
 		vnic->flags |= BNXT_VNIC_INFO_ALLMULTI;
 		goto allmulti;
@@ -2849,14 +2850,10 @@ bnxt_dev_set_mc_addr_list_op(struct rte_eth_dev *eth_dev,
 
 	/* TODO Check for Duplicate mcast addresses */
 	vnic->flags &= ~BNXT_VNIC_INFO_ALLMULTI;
-	for (i = 0; i < nb_mc_addr; i++) {
-		memcpy(vnic->mc_list + off, &mc_addr_list[i],
-			RTE_ETHER_ADDR_LEN);
-		off += RTE_ETHER_ADDR_LEN;
-	}
+	for (i = 0; i < nb_mc_addr; i++)
+		rte_ether_addr_copy(&mc_addr_set[i], &bp->mcast_addr_list[i]);
 
-	vnic->mc_addr_cnt = i;
-	if (vnic->mc_addr_cnt)
+	if (bp->nb_mc_addr)
 		vnic->flags |= BNXT_VNIC_INFO_MCAST;
 	else
 		vnic->flags &= ~BNXT_VNIC_INFO_MCAST;
@@ -5016,6 +5013,23 @@ static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
 	/* Copy the permanent MAC from the FUNC_QCAPS response */
 	memcpy(&eth_dev->data->mac_addrs[0], bp->mac_addr, RTE_ETHER_ADDR_LEN);
 
+	/*
+	 *  Allocate memory to hold multicast mac addresses added.
+	 *  Used to restore them during reset recovery
+	 */
+	bp->mcast_addr_list = rte_zmalloc("bnxt_mcast_addr_tbl",
+					  sizeof(struct rte_ether_addr) *
+					  BNXT_MAX_MC_ADDRS, 0);
+	if (bp->mcast_addr_list == NULL) {
+		PMD_DRV_LOG(ERR, "Failed to allocate multicast addr table\n");
+		return -ENOMEM;
+	}
+	bp->mc_list_dma_addr = rte_malloc_virt2iova(bp->mcast_addr_list);
+	if (bp->mc_list_dma_addr == RTE_BAD_IOVA) {
+		PMD_DRV_LOG(ERR, "Fail to map mcast_addr_list to physical memory\n");
+		return -ENOMEM;
+	}
+
 	return rc;
 }
 
@@ -5916,6 +5930,8 @@ bnxt_uninit_resources(struct bnxt *bp, bool reconfig_dev)
 	if (!reconfig_dev) {
 		bnxt_free_hwrm_resources(bp);
 		bnxt_free_error_recovery_info(bp);
+		rte_free(bp->mcast_addr_list);
+		bp->mcast_addr_list = NULL;
 	}
 
 	bnxt_uninit_ctx_mem(bp);
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index f53f863..fdc274c 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -506,8 +506,8 @@ int bnxt_hwrm_cfa_l2_set_rx_mask(struct bnxt *bp,
 		mask |= HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_ALL_MCAST;
 	} else if (vnic->flags & BNXT_VNIC_INFO_MCAST) {
 		mask |= HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_MCAST;
-		req.num_mc_entries = rte_cpu_to_le_32(vnic->mc_addr_cnt);
-		req.mc_tbl_addr = rte_cpu_to_le_64(vnic->mc_list_dma_addr);
+		req.num_mc_entries = rte_cpu_to_le_32(bp->nb_mc_addr);
+		req.mc_tbl_addr = rte_cpu_to_le_64(bp->mc_list_dma_addr);
 	}
 	if (vlan_table) {
 		if (!(mask & HWRM_CFA_L2_SET_RX_MASK_INPUT_MASK_VLAN_NONVLAN))
diff --git a/drivers/net/bnxt/bnxt_vnic.c b/drivers/net/bnxt/bnxt_vnic.c
index c63cf4b..e05dc24 100644
--- a/drivers/net/bnxt/bnxt_vnic.c
+++ b/drivers/net/bnxt/bnxt_vnic.c
@@ -126,8 +126,7 @@ int bnxt_alloc_vnic_attributes(struct bnxt *bp)
 	int i;
 	rte_iova_t mz_phys_addr;
 
-	entry_length = HW_HASH_KEY_SIZE +
-		       BNXT_MAX_MC_ADDRS * RTE_ETHER_ADDR_LEN;
+	entry_length = HW_HASH_KEY_SIZE;
 
 	if (BNXT_CHIP_P5(bp))
 		rss_table_size = BNXT_RSS_TBL_SIZE_P5 *
@@ -169,10 +168,6 @@ int bnxt_alloc_vnic_attributes(struct bnxt *bp)
 
 		vnic->rss_hash_key_dma_addr = vnic->rss_table_dma_addr +
 					      rss_table_size;
-		vnic->mc_list = (void *)((char *)vnic->rss_hash_key +
-				HW_HASH_KEY_SIZE);
-		vnic->mc_list_dma_addr = vnic->rss_hash_key_dma_addr +
-				HW_HASH_KEY_SIZE;
 		bnxt_prandom_bytes(vnic->rss_hash_key, HW_HASH_KEY_SIZE);
 	}
 
diff --git a/drivers/net/bnxt/bnxt_vnic.h b/drivers/net/bnxt/bnxt_vnic.h
index 37b452f..af3a2dd 100644
--- a/drivers/net/bnxt/bnxt_vnic.h
+++ b/drivers/net/bnxt/bnxt_vnic.h
@@ -32,10 +32,6 @@ struct bnxt_vnic_info {
 	uint16_t	*rss_table;
 	rte_iova_t	rss_hash_key_dma_addr;
 	void		*rss_hash_key;
-	rte_iova_t	mc_list_dma_addr;
-	char		*mc_list;
-	uint32_t	mc_addr_cnt;
-#define BNXT_MAX_MC_ADDRS		16
 	uint32_t	flags;
 #define BNXT_VNIC_INFO_PROMISC			(1 << 0)
 #define BNXT_VNIC_INFO_ALLMULTI			(1 << 1)
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 02/18] net/bnxt: fix to restore mcast macs during reset recovery
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 01/18] net/bnxt: fix bnxt_dev_set_mc_addr_list_op Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 03/18] net/bnxt: fix queue stop operation Kalesh A P
                   ` (16 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

During reset recovery, driver is not restoring the multicast
mac addresses. Added code to restore them during reset recovery.

Fixes: b02f1573cd07 ("net/bnxt: restore MAC filters during reset recovery")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_ethdev.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 50ffa30..bac9600 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -4261,6 +4261,18 @@ static int bnxt_restore_mac_filters(struct bnxt *bp)
 	return 0;
 }
 
+static int bnxt_restore_mcast_mac_filters(struct bnxt *bp)
+{
+	int ret = 0;
+
+	ret = bnxt_dev_set_mc_addr_list_op(bp->eth_dev, bp->mcast_addr_list,
+					   bp->nb_mc_addr);
+	if (ret)
+		PMD_DRV_LOG(ERR, "Failed to restore multicast MAC addreeses\n");
+
+	return ret;
+}
+
 static int bnxt_restore_filters(struct bnxt *bp)
 {
 	struct rte_eth_dev *dev = bp->eth_dev;
@@ -4282,7 +4294,13 @@ static int bnxt_restore_filters(struct bnxt *bp)
 		return ret;
 
 	ret = bnxt_restore_vlan_filters(bp);
-	/* TODO restore other filters as well */
+	if (ret)
+		return ret;
+
+	ret = bnxt_restore_mcast_mac_filters(bp);
+	if (ret)
+		return ret;
+
 	return ret;
 }
 
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 03/18] net/bnxt: fix queue stop operation
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 01/18] net/bnxt: fix bnxt_dev_set_mc_addr_list_op Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 02/18] net/bnxt: fix to restore mcast macs during reset recovery Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 04/18] net/bnxt: restore RSS configuration after reset recovery Kalesh A P
                   ` (15 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

When there are no active Rx queues(i.e when all queues have been stopped),
clear the RSS redirection table of the VNIC on Thor.

Fixes: 9b63c6fd70e3 ("net/bnxt: support Rx/Tx queue start/stop")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Lance Richardson <lance.richardson@broadcom.com>
---
 drivers/net/bnxt/bnxt_hwrm.c | 23 +++++++++++++++++++++++
 drivers/net/bnxt/bnxt_hwrm.h |  1 +
 drivers/net/bnxt/bnxt_rxq.c  |  3 +++
 3 files changed, 27 insertions(+)

diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index fdc274c..35d6982 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -6262,3 +6262,26 @@ int bnxt_hwrm_config_host_mtu(struct bnxt *bp)
 
 	return rc;
 }
+
+int
+bnxt_vnic_rss_clear_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic)
+{
+	struct hwrm_vnic_rss_cfg_output *resp = bp->hwrm_cmd_resp_addr;
+	struct hwrm_vnic_rss_cfg_input req = {0};
+	int nr_ctxs = vnic->num_lb_ctxts;
+	int i, rc = 0;
+
+	for (i = 0; i < nr_ctxs; i++) {
+		HWRM_PREP(&req, HWRM_VNIC_RSS_CFG, BNXT_USE_CHIMP_MB);
+
+		req.rss_ctx_idx = rte_cpu_to_le_16(vnic->fw_grp_ids[i]);
+		req.vnic_id = rte_cpu_to_le_16(vnic->fw_vnic_id);
+
+		rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB);
+
+		HWRM_CHECK_RESULT();
+		HWRM_UNLOCK();
+	}
+
+	return rc;
+}
diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h
index f8f0556..8202455 100644
--- a/drivers/net/bnxt/bnxt_hwrm.h
+++ b/drivers/net/bnxt/bnxt_hwrm.h
@@ -310,4 +310,5 @@ int bnxt_hwrm_stat_ctx_alloc(struct bnxt *bp, struct bnxt_cp_ring_info *cpr);
 void bnxt_free_hwrm_tx_ring(struct bnxt *bp, int queue_index);
 int bnxt_alloc_hwrm_tx_ring(struct bnxt *bp, int queue_index);
 int bnxt_hwrm_config_host_mtu(struct bnxt *bp);
+int bnxt_vnic_rss_clear_p5(struct bnxt *bp, struct bnxt_vnic_info *vnic);
 #endif
diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c
index 1456f8b..c9d9903 100644
--- a/drivers/net/bnxt/bnxt_rxq.c
+++ b/drivers/net/bnxt/bnxt_rxq.c
@@ -574,6 +574,9 @@ int bnxt_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id)
 		if (active_queue_cnt == 0) {
 			uint16_t saved_mru = vnic->mru;
 
+			/* clear RSS setting on vnic. */
+			bnxt_vnic_rss_clear_p5(bp, vnic);
+
 			vnic->mru = 0;
 			/* Reconfigure default receive ring and MRU. */
 			bnxt_hwrm_vnic_cfg(bp, vnic);
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 04/18] net/bnxt: restore RSS configuration after reset recovery
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (2 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 03/18] net/bnxt: fix queue stop operation Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 05/18] net/bnxt: fix restoring VLAN filtering after recovery Kalesh A P
                   ` (14 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

During reset recovery, driver is not restoring the VNIC rss hash key.
It's generating a new random hash key which results in unexpected
RSS behavior after recovery. Fixed this by storing the VNIC rss
configuration to a local struct and then applying the cached value
during the recovery.

Fixes: df6cd7c1f73a ("net/bnxt: handle reset notify async event from FW")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt.h        |  2 ++
 drivers/net/bnxt/bnxt_ethdev.c | 35 +++++++++++++++++++++++++++++++----
 drivers/net/bnxt/bnxt_rxq.c    |  2 +-
 drivers/net/bnxt/bnxt_vnic.c   |  9 +++++++--
 drivers/net/bnxt/bnxt_vnic.h   |  2 +-
 5 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 521fcb7..614ea57 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -896,6 +896,8 @@ struct bnxt {
 	struct rte_ether_addr	*mcast_addr_list;
 	rte_iova_t		mc_list_dma_addr;
 	uint32_t		nb_mc_addr;
+
+	struct rte_eth_rss_conf	rss_conf; /* RSS configuration. */
 };
 
 static
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index bac9600..dcf2839 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -368,7 +368,7 @@ static int bnxt_alloc_mem(struct bnxt *bp, bool reconfig)
 	if (rc)
 		goto alloc_mem_err;
 
-	rc = bnxt_alloc_vnic_attributes(bp);
+	rc = bnxt_alloc_vnic_attributes(bp, reconfig);
 	if (rc)
 		goto alloc_mem_err;
 
@@ -1067,6 +1067,7 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)
 {
 	struct bnxt *bp = eth_dev->data->dev_private;
 	uint64_t rx_offloads = eth_dev->data->dev_conf.rxmode.offloads;
+	struct rte_eth_rss_conf *rss_conf = &eth_dev->data->dev_conf.rx_adv_conf.rss_conf;
 	int rc;
 
 	bp->rx_queues = (void *)eth_dev->data->rx_queues;
@@ -1141,6 +1142,17 @@ static int bnxt_dev_configure_op(struct rte_eth_dev *eth_dev)
 		rx_offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH;
 	eth_dev->data->dev_conf.rxmode.offloads = rx_offloads;
 
+	/* application provides the hash key to program */
+	if (rss_conf->rss_key != NULL) {
+		if (rss_conf->rss_key_len != HW_HASH_KEY_SIZE)
+			PMD_DRV_LOG(WARNING, "port %u RSS key len must be %d bytes long",
+				    eth_dev->data->port_id, HW_HASH_KEY_SIZE);
+		else
+			memcpy(bp->rss_conf.rss_key, rss_conf->rss_key, HW_HASH_KEY_SIZE);
+	}
+	bp->rss_conf.rss_key_len = HW_HASH_KEY_SIZE;
+	bp->rss_conf.rss_hf = rss_conf->rss_hf;
+
 	bnxt_mtu_set_op(eth_dev, eth_dev->data->mtu);
 
 	return 0;
@@ -2126,9 +2138,6 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev,
 	}
 
 	bp->flags |= BNXT_FLAG_UPDATE_HASH;
-	memcpy(&eth_dev->data->dev_conf.rx_adv_conf.rss_conf,
-	       rss_conf,
-	       sizeof(*rss_conf));
 
 	/* Update the default RSS VNIC(s) */
 	vnic = BNXT_GET_DEFAULT_VNIC(bp);
@@ -2137,6 +2146,9 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev,
 		bnxt_rte_to_hwrm_hash_level(bp, rss_conf->rss_hf,
 					    RTE_ETH_RSS_LEVEL(rss_conf->rss_hf));
 
+	/* Cache the hash function */
+	bp->rss_conf.rss_hf = rss_conf->rss_hf;
+
 	/*
 	 * If hashkey is not specified, use the previously configured
 	 * hashkey
@@ -2152,6 +2164,9 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev,
 	}
 	memcpy(vnic->rss_hash_key, rss_conf->rss_key, rss_conf->rss_key_len);
 
+	/* Cache the hash key */
+	memcpy(bp->rss_conf.rss_key, rss_conf->rss_key, HW_HASH_KEY_SIZE);
+
 rss_config:
 	rc = bnxt_hwrm_vnic_rss_cfg(bp, vnic);
 	return rc;
@@ -5304,6 +5319,16 @@ static int bnxt_init_resources(struct bnxt *bp, bool reconfig_dev)
 		}
 	}
 
+	if (!reconfig_dev) {
+		bp->rss_conf.rss_key = rte_zmalloc("bnxt_rss_key",
+						   HW_HASH_KEY_SIZE, 0);
+		if (bp->rss_conf.rss_key == NULL) {
+			PMD_DRV_LOG(ERR, "port %u cannot allocate RSS hash key memory",
+				    bp->eth_dev->data->port_id);
+			return -ENOMEM;
+		}
+	}
+
 	rc = bnxt_alloc_mem(bp, reconfig_dev);
 	if (rc)
 		return rc;
@@ -5950,6 +5975,8 @@ bnxt_uninit_resources(struct bnxt *bp, bool reconfig_dev)
 		bnxt_free_error_recovery_info(bp);
 		rte_free(bp->mcast_addr_list);
 		bp->mcast_addr_list = NULL;
+		rte_free(bp->rss_conf.rss_key);
+		bp->rss_conf.rss_key = NULL;
 	}
 
 	bnxt_uninit_ctx_mem(bp);
diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c
index c9d9903..9f1d1d4 100644
--- a/drivers/net/bnxt/bnxt_rxq.c
+++ b/drivers/net/bnxt/bnxt_rxq.c
@@ -148,7 +148,7 @@ int bnxt_mq_rx_configure(struct bnxt *bp)
 	bp->rx_num_qs_per_vnic = nb_q_per_grp;
 
 	if (dev_conf->rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) {
-		struct rte_eth_rss_conf *rss = &dev_conf->rx_adv_conf.rss_conf;
+		struct rte_eth_rss_conf *rss = &bp->rss_conf;
 
 		if (bp->flags & BNXT_FLAG_UPDATE_HASH)
 			bp->flags &= ~BNXT_FLAG_UPDATE_HASH;
diff --git a/drivers/net/bnxt/bnxt_vnic.c b/drivers/net/bnxt/bnxt_vnic.c
index e05dc24..09d67ef 100644
--- a/drivers/net/bnxt/bnxt_vnic.c
+++ b/drivers/net/bnxt/bnxt_vnic.c
@@ -114,7 +114,7 @@ void bnxt_free_vnic_attributes(struct bnxt *bp)
 	}
 }
 
-int bnxt_alloc_vnic_attributes(struct bnxt *bp)
+int bnxt_alloc_vnic_attributes(struct bnxt *bp, bool reconfig)
 {
 	struct bnxt_vnic_info *vnic;
 	struct rte_pci_device *pdev = bp->pdev;
@@ -168,7 +168,12 @@ int bnxt_alloc_vnic_attributes(struct bnxt *bp)
 
 		vnic->rss_hash_key_dma_addr = vnic->rss_table_dma_addr +
 					      rss_table_size;
-		bnxt_prandom_bytes(vnic->rss_hash_key, HW_HASH_KEY_SIZE);
+		if (!reconfig) {
+			bnxt_prandom_bytes(vnic->rss_hash_key, HW_HASH_KEY_SIZE);
+			memcpy(bp->rss_conf.rss_key, vnic->rss_hash_key, HW_HASH_KEY_SIZE);
+		} else {
+			memcpy(vnic->rss_hash_key, bp->rss_conf.rss_key, HW_HASH_KEY_SIZE);
+		}
 	}
 
 	return 0;
diff --git a/drivers/net/bnxt/bnxt_vnic.h b/drivers/net/bnxt/bnxt_vnic.h
index af3a2dd..25481fc 100644
--- a/drivers/net/bnxt/bnxt_vnic.h
+++ b/drivers/net/bnxt/bnxt_vnic.h
@@ -60,7 +60,7 @@ int bnxt_free_vnic(struct bnxt *bp, struct bnxt_vnic_info *vnic,
 struct bnxt_vnic_info *bnxt_alloc_vnic(struct bnxt *bp);
 void bnxt_free_all_vnics(struct bnxt *bp);
 void bnxt_free_vnic_attributes(struct bnxt *bp);
-int bnxt_alloc_vnic_attributes(struct bnxt *bp);
+int bnxt_alloc_vnic_attributes(struct bnxt *bp, bool reconfig);
 void bnxt_free_vnic_mem(struct bnxt *bp);
 int bnxt_alloc_vnic_mem(struct bnxt *bp);
 int bnxt_vnic_grp_alloc(struct bnxt *bp, struct bnxt_vnic_info *vnic);
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 05/18] net/bnxt: fix restoring VLAN filtering after recovery
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (3 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 04/18] net/bnxt: restore RSS configuration after reset recovery Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 06/18] net/bnxt: fix to cap max number of unicast MACs Kalesh A P
                   ` (13 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

During port start, driver calls bnxt_vlan_offload_set_op()
to program VLAN Filter/VLAN Strip setting to the HW. This
in turns add the vlan filters.

This results in a failure when bnxt_restore_filters() invokes
bnxt_restore_vlan_filters() during the recovery as the vlans are
already programmed.

Fix to ignore the error(-EEXIST).

Fixes: 151c8240ac6a ("net/bnxt: restore VLAN filters during reset recovery")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_ethdev.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index dcf2839..99a7d35 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -4308,8 +4308,9 @@ static int bnxt_restore_filters(struct bnxt *bp)
 	if (ret)
 		return ret;
 
+	/* if vlans are already programmed, this can fail with -EEXIST */
 	ret = bnxt_restore_vlan_filters(bp);
-	if (ret)
+	if (ret && ret != -EEXIST)
 		return ret;
 
 	ret = bnxt_restore_mcast_mac_filters(bp);
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 06/18] net/bnxt: fix to cap max number of unicast MACs
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (4 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 05/18] net/bnxt: fix restoring VLAN filtering after recovery Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 07/18] net/bnxt: set fast-path pointers only if recovery succeeds Kalesh A P
                   ` (12 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

The Maximum number of receive mac addr is hard coded to 128
in the ethdev library(RTE_ETH_NUM_RECEIVE_MAC_ADDR).
But the bnxt devices support more than 128 unicast MAC filters
which could result in a segfault while user tries to add more
than 128 unicast MAC addresses to the port.

Fixes: a2033fda22ab ("net/bnxt: fix number of MAC addresses for VMDq")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_ethdev.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 99a7d35..82350a5 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -954,7 +954,7 @@ static int bnxt_dev_info_get_op(struct rte_eth_dev *eth_dev,
 		return rc;
 
 	/* MAC Specifics */
-	dev_info->max_mac_addrs = bp->max_l2_ctx;
+	dev_info->max_mac_addrs = RTE_MIN(bp->max_l2_ctx, RTE_ETH_NUM_RECEIVE_MAC_ADDR);
 	dev_info->max_hash_mac_addrs = 0;
 
 	/* PF/VF specifics */
@@ -5016,11 +5016,15 @@ static int bnxt_alloc_stats_mem(struct bnxt *bp)
 static int bnxt_setup_mac_addr(struct rte_eth_dev *eth_dev)
 {
 	struct bnxt *bp = eth_dev->data->dev_private;
+	size_t max_mac_addr = RTE_MIN(bp->max_l2_ctx, RTE_ETH_NUM_RECEIVE_MAC_ADDR);
 	int rc = 0;
 
+	if (bp->max_l2_ctx > RTE_ETH_NUM_RECEIVE_MAC_ADDR)
+		PMD_DRV_LOG(INFO, "Max number of MAC addrs supported is %d, but will be limited to %d\n",
+			    bp->max_l2_ctx, RTE_ETH_NUM_RECEIVE_MAC_ADDR);
+
 	eth_dev->data->mac_addrs = rte_zmalloc("bnxt_mac_addr_tbl",
-					       RTE_ETHER_ADDR_LEN *
-					       bp->max_l2_ctx,
+					       RTE_ETHER_ADDR_LEN * max_mac_addr,
 					       0);
 	if (eth_dev->data->mac_addrs == NULL) {
 		PMD_DRV_LOG(ERR, "Failed to alloc MAC addr tbl\n");
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 07/18] net/bnxt: set fast-path pointers only if recovery succeeds
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (5 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 06/18] net/bnxt: fix to cap max number of unicast MACs Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 08/18] net/bnxt: improve recovery related log messages Kalesh A P
                   ` (11 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

During reset recovery, fixed to set the fast-path pointers
only if recovery succeeds.

Fixes: 720b55ad278e ("net/bnxt: fix crash caused by error recovery")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_ethdev.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 82350a5..80de320 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -4376,16 +4376,16 @@ static void bnxt_dev_recover(void *arg)
 		goto err_start;
 	}
 
+	rc = bnxt_restore_filters(bp);
+	if (rc)
+		goto err_start;
+
 	rte_eth_fp_ops[bp->eth_dev->data->port_id].rx_pkt_burst =
 		bp->eth_dev->rx_pkt_burst;
 	rte_eth_fp_ops[bp->eth_dev->data->port_id].tx_pkt_burst =
 		bp->eth_dev->tx_pkt_burst;
 	rte_mb();
 
-	rc = bnxt_restore_filters(bp);
-	if (rc)
-		goto err_start;
-
 	PMD_DRV_LOG(INFO, "Port: %u Recovered from FW reset\n",
 		    bp->eth_dev->data->port_id);
 	pthread_mutex_unlock(&bp->err_recovery_lock);
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 08/18] net/bnxt: improve recovery related log messages
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (6 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 07/18] net/bnxt: set fast-path pointers only if recovery succeeds Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 09/18] net/bnxt: add null check for mark table Kalesh A P
                   ` (10 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

Make these messages more specific.

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_ethdev.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 80de320..a5b960c 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -4401,7 +4401,8 @@ static void bnxt_dev_recover(void *arg)
 					     RTE_ETH_EVENT_INTR_RMV,
 					     NULL);
 	pthread_mutex_unlock(&bp->err_recovery_lock);
-	PMD_DRV_LOG(ERR, "Failed to recover from FW reset\n");
+	PMD_DRV_LOG(ERR, "Port %u: Failed to recover from FW reset\n",
+		    bp->eth_dev->data->port_id);
 }
 
 void bnxt_dev_reset_and_resume(void *arg)
@@ -4437,7 +4438,8 @@ void bnxt_dev_reset_and_resume(void *arg)
 
 	rc = rte_eal_alarm_set(us, bnxt_dev_recover, (void *)bp);
 	if (rc)
-		PMD_DRV_LOG(ERR, "Error setting recovery alarm");
+		PMD_DRV_LOG(ERR, "Port %u: Error setting recovery alarm",
+			    bp->eth_dev->data->port_id);
 }
 
 uint32_t bnxt_read_fw_status_reg(struct bnxt *bp, uint32_t index)
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 09/18] net/bnxt: add null check for mark table
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (7 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 08/18] net/bnxt: improve recovery related log messages Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 10/18] net/bnxt: fix flow create when RSS is disabled Kalesh A P
                   ` (9 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

During the port start, driver ignores mark table allocation failure.
This could cause a segfault due to NULL pointer dereference in
bnxt_set_mark_in_mbuf(). Fix this by checking the pointer validity
before accessing it.

Fixes: b87abb2e55cb ("net/bnxt: support marking packet")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_rxr.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
index 44247d7..9621809 100644
--- a/drivers/net/bnxt/bnxt_rxr.c
+++ b/drivers/net/bnxt/bnxt_rxr.c
@@ -824,6 +824,9 @@ void bnxt_set_mark_in_mbuf(struct bnxt *bp,
 {
 	uint32_t cfa_code = 0;
 
+	if (unlikely(bp->mark_table == NULL))
+		return;
+
 	cfa_code = rte_le_to_cpu_16(rxcmp1->cfa_code);
 	if (!cfa_code)
 		return;
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 10/18] net/bnxt: fix flow create when RSS is disabled
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (8 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 09/18] net/bnxt: add null check for mark table Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 11/18] net/bnxt: get max supported multicast filters count Kalesh A P
                   ` (8 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

This patch reverts the commit "5d47d06b2c83".
Revert this commit as it caused a regression on legacy chips.
On newer chips we use TruFlow based flow creation instead of
HWRM based flow creation.

Fixes: 5d47d06b2c83 ("net/bnxt: modify VNIC accounting")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt.h        |  3 ---
 drivers/net/bnxt/bnxt_ethdev.c | 18 ++++--------------
 drivers/net/bnxt/bnxt_flow.c   | 14 ++------------
 drivers/net/bnxt/bnxt_hwrm.c   | 32 --------------------------------
 drivers/net/bnxt/bnxt_hwrm.h   |  4 ----
 5 files changed, 6 insertions(+), 65 deletions(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 614ea57..3df80f5 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -695,9 +695,6 @@ struct bnxt {
 #define BNXT_FLAG_FLOW_XSTATS_EN		BIT(25)
 #define BNXT_FLAG_DFLT_MAC_SET			BIT(26)
 #define BNXT_FLAG_GFID_ENABLE			BIT(27)
-#define BNXT_FLAG_RFS_NEEDS_VNIC		BIT(28)
-#define BNXT_FLAG_FLOW_CFA_RFS_RING_TBL_IDX_V2	BIT(29)
-#define BNXT_RFS_NEEDS_VNIC(bp)	((bp)->flags & BNXT_FLAG_RFS_NEEDS_VNIC)
 #define BNXT_PF(bp)		(!((bp)->flags & BNXT_FLAG_VF))
 #define BNXT_VF(bp)		((bp)->flags & BNXT_FLAG_VF)
 #define BNXT_NPAR(bp)		((bp)->flags & BNXT_FLAG_NPAR_PF)
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index a5b960c..00acdb7 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -786,17 +786,11 @@ static int bnxt_start_nic(struct bnxt *bp)
 		}
 	}
 
-	/* default vnic 0 */
-	rc = bnxt_setup_one_vnic(bp, 0);
-	if (rc)
-		goto err_out;
 	/* VNIC configuration */
-	if (BNXT_RFS_NEEDS_VNIC(bp)) {
-		for (i = 1; i < bp->nr_vnics; i++) {
-			rc = bnxt_setup_one_vnic(bp, i);
-			if (rc)
-				goto err_out;
-		}
+	for (i = 0; i < bp->nr_vnics; i++) {
+		rc = bnxt_setup_one_vnic(bp, i);
+		if (rc)
+			goto err_out;
 	}
 
 	for (j = 0; j < bp->tx_nr_rings; j++) {
@@ -5232,10 +5226,6 @@ static int bnxt_get_config(struct bnxt *bp)
 	if (rc)
 		return rc;
 
-	rc = bnxt_hwrm_cfa_adv_flow_mgmt_qcaps(bp);
-	if (rc)
-		return rc;
-
 	bnxt_hwrm_port_mac_qcfg(bp);
 
 	bnxt_hwrm_parent_pf_qcfg(bp);
diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c
index d062be5..f7c90c4 100644
--- a/drivers/net/bnxt/bnxt_flow.c
+++ b/drivers/net/bnxt/bnxt_flow.c
@@ -1293,13 +1293,6 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev,
 		}
 		PMD_DRV_LOG(DEBUG, "Queue index %d\n", act_q->index);
 
-		if (use_ntuple && !BNXT_RFS_NEEDS_VNIC(bp)) {
-			filter->flags =
-				HWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DEST_RFS_RING_IDX;
-			filter->dst_id = act_q->index;
-			goto skip_vnic_alloc;
-		}
-
 		vnic_id = attr->group;
 		if (!vnic_id) {
 			PMD_DRV_LOG(DEBUG, "Group id is 0\n");
@@ -1364,7 +1357,7 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev,
 		PMD_DRV_LOG(DEBUG,
 			    "Setting vnic ff_idx %d\n", vnic->ff_pool_idx);
 		filter->dst_id = vnic->fw_vnic_id;
-skip_vnic_alloc:
+
 		/* For ntuple filter, create the L2 filter with default VNIC.
 		 * The user specified redirect queue will be set while creating
 		 * the ntuple filter in hardware.
@@ -2063,10 +2056,7 @@ bnxt_flow_create(struct rte_eth_dev *dev,
 		}
 	}
 
-	if (BNXT_RFS_NEEDS_VNIC(bp))
-		vnic = find_matching_vnic(bp, filter);
-	else
-		vnic = BNXT_GET_DEFAULT_VNIC(bp);
+	vnic = find_matching_vnic(bp, filter);
 done:
 	if (!ret || update_flow) {
 		flow->filter = filter;
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index 35d6982..ceb6808 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -6106,38 +6106,6 @@ int bnxt_hwrm_cfa_pair_free(struct bnxt *bp, struct bnxt_representor *rep_bp)
 	return rc;
 }
 
-int bnxt_hwrm_cfa_adv_flow_mgmt_qcaps(struct bnxt *bp)
-{
-	struct hwrm_cfa_adv_flow_mgnt_qcaps_output *resp =
-					bp->hwrm_cmd_resp_addr;
-	struct hwrm_cfa_adv_flow_mgnt_qcaps_input req = {0};
-	uint32_t flags = 0;
-	int rc = 0;
-
-	if (!(bp->fw_cap & BNXT_FW_CAP_ADV_FLOW_MGMT))
-		return 0;
-
-	if (!(BNXT_PF(bp) || BNXT_VF_IS_TRUSTED(bp))) {
-		PMD_DRV_LOG(DEBUG,
-			    "Not a PF or trusted VF. Command not supported\n");
-		return 0;
-	}
-
-	HWRM_PREP(&req, HWRM_CFA_ADV_FLOW_MGNT_QCAPS, BNXT_USE_CHIMP_MB);
-	rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB);
-
-	HWRM_CHECK_RESULT();
-	flags = rte_le_to_cpu_32(resp->flags);
-	HWRM_UNLOCK();
-
-	if (flags & HWRM_CFA_ADV_FLOW_MGNT_QCAPS_RFS_RING_TBL_IDX_V2_SUPPORTED)
-		bp->flags |= BNXT_FLAG_FLOW_CFA_RFS_RING_TBL_IDX_V2;
-	else
-		bp->flags |= BNXT_FLAG_RFS_NEEDS_VNIC;
-
-	return rc;
-}
-
 int bnxt_hwrm_fw_echo_reply(struct bnxt *bp, uint32_t echo_req_data1,
 			    uint32_t echo_req_data2)
 {
diff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h
index 8202455..21e1b7a 100644
--- a/drivers/net/bnxt/bnxt_hwrm.h
+++ b/drivers/net/bnxt/bnxt_hwrm.h
@@ -58,9 +58,6 @@ struct hwrm_func_qstats_output;
 #define HWRM_PORT_PHY_CFG_IN_EN_AUTO_LINK_SPEED_MASK \
 	HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_LINK_SPEED_MASK
 
-#define HWRM_CFA_ADV_FLOW_MGNT_QCAPS_RFS_RING_TBL_IDX_V2_SUPPORTED \
-	HWRM_CFA_ADV_FLOW_MGNT_QCAPS_OUTPUT_FLAGS_RFS_RING_TBL_IDX_V2_SUPPORTED
-
 #define HWRM_SPEC_CODE_1_8_4		0x10804
 #define HWRM_SPEC_CODE_1_9_0		0x10900
 #define HWRM_SPEC_CODE_1_9_2		0x10902
@@ -296,7 +293,6 @@ int bnxt_hwrm_first_vf_id_query(struct bnxt *bp, uint16_t fid,
 int bnxt_hwrm_cfa_pair_exists(struct bnxt *bp, struct bnxt_representor *rep_bp);
 int bnxt_hwrm_cfa_pair_alloc(struct bnxt *bp, struct bnxt_representor *rep);
 int bnxt_hwrm_cfa_pair_free(struct bnxt *bp, struct bnxt_representor *rep);
-int bnxt_hwrm_cfa_adv_flow_mgmt_qcaps(struct bnxt *bp);
 int bnxt_hwrm_fw_echo_reply(struct bnxt *bp, uint32_t echo_req_data1,
 			    uint32_t echo_req_data2);
 int bnxt_hwrm_poll_ver_get(struct bnxt *bp);
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 11/18] net/bnxt: get max supported multicast filters count
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (9 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 10/18] net/bnxt: fix flow create when RSS is disabled Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 12/18] net/bnxt: refactor bnxt_stop_rxtx() for reuse Kalesh A P
                   ` (7 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

The HWRM_FUNC_QCAPS response indicates the maximum number
of multicast filters that can be supported by this function
on the RX side.

Fixed to use this value instead of the hard coded value 16.

Fixes: d69851df12b2 ("net/bnxt: support multicast filter and set MAC addr")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt.h      | 3 ++-
 drivers/net/bnxt/bnxt_hwrm.c | 2 ++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 3df80f5..64866de 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -889,10 +889,11 @@ struct bnxt {
 	struct bnxt_ring_stats	*prev_rx_ring_stats;
 	struct bnxt_ring_stats	*prev_tx_ring_stats;
 
-#define BNXT_MAX_MC_ADDRS	16
+#define BNXT_MAX_MC_ADDRS	((bp)->max_mcast_addr)
 	struct rte_ether_addr	*mcast_addr_list;
 	rte_iova_t		mc_list_dma_addr;
 	uint32_t		nb_mc_addr;
+	uint32_t		max_mcast_addr; /* maximum number of mcast filters supported */
 
 	struct rte_eth_rss_conf	rss_conf; /* RSS configuration. */
 };
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index ceb6808..86997f5 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -914,6 +914,8 @@ static int __bnxt_hwrm_func_qcaps(struct bnxt *bp)
 	PMD_DRV_LOG(DEBUG, "Max l2_cntxts is %d vnics is %d\n",
 		    bp->max_l2_ctx, bp->max_vnics);
 	bp->max_stat_ctx = rte_le_to_cpu_16(resp->max_stat_ctx);
+	bp->max_mcast_addr = rte_le_to_cpu_32(resp->max_mcast_filters);
+
 	if (BNXT_PF(bp)) {
 		bp->pf->total_vnics = rte_le_to_cpu_16(resp->max_vnics);
 		if (flags & HWRM_FUNC_QCAPS_OUTPUT_FLAGS_PTP_SUPPORTED) {
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 12/18] net/bnxt: refactor bnxt_stop_rxtx() for reuse
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (10 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 11/18] net/bnxt: get max supported multicast filters count Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 13/18] net/bnxt: fix handling of VF configuration changes Kalesh A P
                   ` (6 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Somnath Kotur <somnath.kotur@broadcom.com>

By accepting rte_eth_dev as input, bnxt_stop_rxtx() can be used
in multiple scenarios such as representor devices.

Signed-off-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
---
 drivers/net/bnxt/bnxt_cpr.c    | 16 ++++++++--------
 drivers/net/bnxt/bnxt_cpr.h    |  2 +-
 drivers/net/bnxt/bnxt_ethdev.c |  5 ++---
 drivers/net/bnxt/bnxt_reps.c   |  3 +--
 4 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c
index a43b22a..593eebf 100644
--- a/drivers/net/bnxt/bnxt_cpr.c
+++ b/drivers/net/bnxt/bnxt_cpr.c
@@ -149,7 +149,7 @@ void bnxt_handle_async_event(struct bnxt *bp,
 		 * Avoid any rx/tx packet processing during firmware reset
 		 * operation.
 		 */
-		bnxt_stop_rxtx(bp);
+		bnxt_stop_rxtx(bp->eth_dev);
 
 		/* Ignore reset notify async events when stopping the port */
 		if (!bp->eth_dev->data->dev_started) {
@@ -383,15 +383,15 @@ bool bnxt_is_recovery_enabled(struct bnxt *bp)
 	return false;
 }
 
-void bnxt_stop_rxtx(struct bnxt *bp)
+void bnxt_stop_rxtx(struct rte_eth_dev *eth_dev)
 {
-	bp->eth_dev->rx_pkt_burst = &bnxt_dummy_recv_pkts;
-	bp->eth_dev->tx_pkt_burst = &bnxt_dummy_xmit_pkts;
+	eth_dev->rx_pkt_burst = &bnxt_dummy_recv_pkts;
+	eth_dev->tx_pkt_burst = &bnxt_dummy_xmit_pkts;
 
-	rte_eth_fp_ops[bp->eth_dev->data->port_id].rx_pkt_burst =
-		bp->eth_dev->rx_pkt_burst;
-	rte_eth_fp_ops[bp->eth_dev->data->port_id].tx_pkt_burst =
-		bp->eth_dev->tx_pkt_burst;
+	rte_eth_fp_ops[eth_dev->data->port_id].rx_pkt_burst =
+		eth_dev->rx_pkt_burst;
+	rte_eth_fp_ops[eth_dev->data->port_id].tx_pkt_burst =
+		eth_dev->tx_pkt_burst;
 	rte_mb();
 
 	/* Allow time for threads to exit the real burst functions. */
diff --git a/drivers/net/bnxt/bnxt_cpr.h b/drivers/net/bnxt/bnxt_cpr.h
index 73468ed..52db382 100644
--- a/drivers/net/bnxt/bnxt_cpr.h
+++ b/drivers/net/bnxt/bnxt_cpr.h
@@ -117,7 +117,7 @@ void bnxt_wait_for_device_shutdown(struct bnxt *bp);
 bool bnxt_is_recovery_enabled(struct bnxt *bp);
 bool bnxt_is_primary_func(struct bnxt *bp);
 
-void bnxt_stop_rxtx(struct bnxt *bp);
+void bnxt_stop_rxtx(struct rte_eth_dev *eth_dev);
 
 /**
  * Check validity of a completion ring entry. If the entry is valid, include a
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 00acdb7..cf3bd77 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -1471,8 +1471,7 @@ static int bnxt_dev_stop(struct rte_eth_dev *eth_dev)
 	eth_dev->data->dev_started = 0;
 
 	/* Prevent crashes when queues are still in use */
-	eth_dev->rx_pkt_burst = &bnxt_dummy_recv_pkts;
-	eth_dev->tx_pkt_burst = &bnxt_dummy_xmit_pkts;
+	bnxt_stop_rxtx(eth_dev);
 
 	bnxt_disable_int(bp);
 
@@ -4557,7 +4556,7 @@ static void bnxt_check_fw_health(void *arg)
 	bp->flags |= BNXT_FLAG_FATAL_ERROR;
 	bp->flags |= BNXT_FLAG_FW_RESET;
 
-	bnxt_stop_rxtx(bp);
+	bnxt_stop_rxtx(bp->eth_dev);
 
 	PMD_DRV_LOG(ERR, "Detected FW dead condition\n");
 
diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c
index 22b76b7..f24f5ef 100644
--- a/drivers/net/bnxt/bnxt_reps.c
+++ b/drivers/net/bnxt/bnxt_reps.c
@@ -505,8 +505,7 @@ int bnxt_rep_dev_stop_op(struct rte_eth_dev *eth_dev)
 	struct bnxt_representor *vfr_bp = eth_dev->data->dev_private;
 
 	/* Avoid crashes as we are about to free queues */
-	eth_dev->rx_pkt_burst = &bnxt_dummy_recv_pkts;
-	eth_dev->tx_pkt_burst = &bnxt_dummy_xmit_pkts;
+	bnxt_stop_rxtx(eth_dev);
 
 	BNXT_TF_DBG(DEBUG, "BNXT Port:%d VFR stop\n", eth_dev->data->port_id);
 
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 13/18] net/bnxt: fix handling of VF configuration changes
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (11 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 12/18] net/bnxt: refactor bnxt_stop_rxtx() for reuse Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 14/18] net/bnxt: fix ring teardown Kalesh A P
                   ` (5 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

When there is a change in the default VLAN of the VF,
FW sends the VF_CFG_CHANGE async event to the driver.
Upon receiving this async event, driver currently only queries
the FW using HWRM_FUNC_QCFG. But this is not enough.

Driver has to clean up the existing filter and recreate filters
so the FW can apply the default VLAN to the filter.

Fixes: 12213821a8a3 ("net/bnxt: register for more async events")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt.h        |  3 +++
 drivers/net/bnxt/bnxt_cpr.c    | 25 ++++++++++++++++++++++++-
 drivers/net/bnxt/bnxt_ethdev.c |  5 +++--
 3 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 64866de..9c0dbc6 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -1068,5 +1068,8 @@ int bnxt_flow_stats_cnt(struct bnxt *bp);
 uint32_t bnxt_get_speed_capabilities(struct bnxt *bp);
 int bnxt_flow_ops_get_op(struct rte_eth_dev *dev,
 			 const struct rte_flow_ops **ops);
+int bnxt_dev_start_op(struct rte_eth_dev *eth_dev);
+int bnxt_dev_stop_op(struct rte_eth_dev *eth_dev);
+void bnxt_handle_vf_cfg_change(void *arg);
 
 #endif
diff --git a/drivers/net/bnxt/bnxt_cpr.c b/drivers/net/bnxt/bnxt_cpr.c
index 593eebf..9b9285b 100644
--- a/drivers/net/bnxt/bnxt_cpr.c
+++ b/drivers/net/bnxt/bnxt_cpr.c
@@ -107,6 +107,26 @@ static void bnxt_handle_event_error_report(struct bnxt *bp,
 	}
 }
 
+void bnxt_handle_vf_cfg_change(void *arg)
+{
+	struct bnxt *bp = arg;
+	struct rte_eth_dev *eth_dev = bp->eth_dev;
+	int rc;
+
+	/* Free and recreate filters with default VLAN */
+	if (eth_dev->data->dev_started) {
+		rc = bnxt_dev_stop_op(eth_dev);
+		if (rc != 0) {
+			PMD_DRV_LOG(ERR, "Failed to stop Port:%u\n", eth_dev->data->port_id);
+			return;
+		}
+
+		rc = bnxt_dev_start_op(eth_dev);
+		if (rc != 0)
+			PMD_DRV_LOG(ERR, "Failed to start Port:%u\n", eth_dev->data->port_id);
+	}
+}
+
 /*
  * Async event handling
  */
@@ -138,8 +158,11 @@ void bnxt_handle_async_event(struct bnxt *bp,
 		PMD_DRV_LOG(INFO, "Async event: PF driver unloaded\n");
 		break;
 	case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_VF_CFG_CHANGE:
-		PMD_DRV_LOG(INFO, "Async event: VF config changed\n");
+		PMD_DRV_LOG(INFO, "Port %u: VF config change async event\n", port_id);
+		PMD_DRV_LOG(INFO, "event: data1 %#x data2 %#x\n", data1, data2);
 		bnxt_hwrm_func_qcfg(bp, NULL);
+		if (BNXT_VF(bp))
+			rte_eal_alarm_set(1, bnxt_handle_vf_cfg_change, (void *)bp);
 		break;
 	case HWRM_ASYNC_EVENT_CMPL_EVENT_ID_PORT_CONN_NOT_ALLOWED:
 		PMD_DRV_LOG(INFO, "Port conn async event\n");
diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index cf3bd77..999a9a5 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -1530,7 +1530,7 @@ static int bnxt_dev_stop(struct rte_eth_dev *eth_dev)
 }
 
 /* Unload the driver, release resources */
-static int bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)
+int bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)
 {
 	struct bnxt *bp = eth_dev->data->dev_private;
 
@@ -1546,7 +1546,7 @@ static int bnxt_dev_stop_op(struct rte_eth_dev *eth_dev)
 	return bnxt_dev_stop(eth_dev);
 }
 
-static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)
+int bnxt_dev_start_op(struct rte_eth_dev *eth_dev)
 {
 	struct bnxt *bp = eth_dev->data->dev_private;
 	uint64_t rx_offloads = eth_dev->data->dev_conf.rxmode.offloads;
@@ -1678,6 +1678,7 @@ static int bnxt_dev_close_op(struct rte_eth_dev *eth_dev)
 	rte_eal_alarm_cancel(bnxt_dev_reset_and_resume, (void *)bp);
 	rte_eal_alarm_cancel(bnxt_dev_recover, (void *)bp);
 	bnxt_cancel_fc_thread(bp);
+	rte_eal_alarm_cancel(bnxt_handle_vf_cfg_change, (void *)bp);
 
 	if (eth_dev->data->dev_started)
 		ret = bnxt_dev_stop(eth_dev);
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 14/18] net/bnxt: fix ring teardown
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (12 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 13/18] net/bnxt: fix handling of VF configuration changes Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 15/18] net/bnxt: fix PAM4 mask setting Kalesh A P
                   ` (4 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Ajit Khaparde <ajit.khaparde@broadcom.com>

Check for valid bit while scanning for hwrm_done completion
during ring teardown. Not checking the valid bit could cause a
ring overflow when we ring the doorbell.

Fixes: 4fb6ab3f866d ("net/bnxt: check flush status during ring free")
Cc: stable@dpdk.org

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
---
 drivers/net/bnxt/bnxt_rxr.c | 3 +++
 drivers/net/bnxt/bnxt_txr.c | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c
index 9621809..b60c247 100644
--- a/drivers/net/bnxt/bnxt_rxr.c
+++ b/drivers/net/bnxt/bnxt_rxr.c
@@ -1411,6 +1411,9 @@ int bnxt_flush_rx_cmp(struct bnxt_cp_ring_info *cpr)
 		cons = RING_CMP(cpr->cp_ring_struct, raw_cons);
 		rxcmp = (struct rx_pkt_cmpl *)&cpr->cp_desc_ring[cons];
 
+		if (!bnxt_cpr_cmp_valid(rxcmp, raw_cons, ring_mask + 1))
+			break;
+
 		if (CMP_TYPE(rxcmp) == CMPL_BASE_TYPE_HWRM_DONE)
 			return 1;
 
diff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c
index e2b7e40..3b8f238 100644
--- a/drivers/net/bnxt/bnxt_txr.c
+++ b/drivers/net/bnxt/bnxt_txr.c
@@ -602,6 +602,9 @@ int bnxt_flush_tx_cmp(struct bnxt_cp_ring_info *cpr)
 		cons = RING_CMPL(ring_mask, raw_cons);
 		txcmp = (struct tx_cmpl *)&cp_desc_ring[cons];
 
+		if (!bnxt_cpr_cmp_valid(txcmp, raw_cons, ring_mask + 1))
+			break;
+
 		opaque = rte_cpu_to_le_32(txcmp->opaque);
 		raw_cons = NEXT_RAW_CMP(raw_cons);
 
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 15/18] net/bnxt: fix PAM4 mask setting
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (13 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 14/18] net/bnxt: fix ring teardown Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 16/18] net/bnxt: fix pointer access Kalesh A P
                   ` (3 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Ajit Khaparde <ajit.khaparde@broadcom.com>

Set the PAM4 mask setting only when PAM4 signaling is enabled.
Setting it otherwise seems to result in link negotiation.
Also auto_pam4_link_speeds has been renamed to
auto_pam4_link_speed_mask to reflect its real usage.

Fixes: c23f9ded0391 ("net/bnxt: support 200G PAM4 link")
Cc: stable@dpdk.org

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt.h      |  2 +-
 drivers/net/bnxt/bnxt_hwrm.c | 25 +++++++++++++------------
 2 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h
index 9c0dbc6..433f1c8 100644
--- a/drivers/net/bnxt/bnxt.h
+++ b/drivers/net/bnxt/bnxt.h
@@ -297,7 +297,7 @@ struct bnxt_link_info {
 	uint8_t			link_signal_mode;
 	uint16_t		force_pam4_link_speed;
 	uint16_t		support_pam4_speeds;
-	uint16_t		auto_pam4_link_speeds;
+	uint16_t		auto_pam4_link_speed_mask;
 	uint16_t		support_pam4_auto_speeds;
 	uint8_t			req_signal_mode;
 	uint8_t			module_status;
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c
index 86997f5..a59e436 100644
--- a/drivers/net/bnxt/bnxt_hwrm.c
+++ b/drivers/net/bnxt/bnxt_hwrm.c
@@ -1436,16 +1436,17 @@ static int bnxt_hwrm_port_phy_cfg(struct bnxt *bp, struct bnxt_link_info *conf)
 		    !(conf->phy_flags & HWRM_PORT_PHY_CFG_INPUT_FLAGS_FORCE)) {
 			req.auto_mode =
 				HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_SPEED_MASK;
-			req.auto_link_speed_mask =
-				conf->auto_link_speed_mask;
-			if (conf->auto_pam4_link_speeds) {
+			if (conf->auto_pam4_link_speed_mask &&
+			    bp->link_info->link_signal_mode) {
 				enables |=
 				HWRM_PORT_PHY_CFG_IN_EN_AUTO_PAM4_LINK_SPD_MASK;
 				req.auto_link_pam4_speed_mask =
-					conf->auto_pam4_link_speeds;
+				rte_cpu_to_le_16(conf->auto_pam4_link_speed_mask);
 			} else {
 				enables |=
 				HWRM_PORT_PHY_CFG_IN_EN_AUTO_LINK_SPEED_MASK;
+				req.auto_link_speed_mask =
+				rte_cpu_to_le_16(conf->auto_link_speed_mask);
 			}
 		}
 		if (conf->auto_link_speed &&
@@ -1518,7 +1519,7 @@ static int bnxt_hwrm_port_phy_qcfg(struct bnxt *bp,
 			rte_le_to_cpu_16(resp->force_pam4_link_speed);
 	link_info->support_pam4_speeds =
 			rte_le_to_cpu_16(resp->support_pam4_speeds);
-	link_info->auto_pam4_link_speeds =
+	link_info->auto_pam4_link_speed_mask =
 			rte_le_to_cpu_16(resp->auto_pam4_link_speed_mask);
 	link_info->module_status = resp->module_status;
 	HWRM_UNLOCK();
@@ -1529,7 +1530,7 @@ static int bnxt_hwrm_port_phy_qcfg(struct bnxt *bp,
 		    link_info->support_speeds, link_info->force_link_speed);
 	PMD_DRV_LOG(DEBUG, "Link Signal:%d,PAM::Auto:%x,Support:%x,Force:%x\n",
 		    link_info->link_signal_mode,
-		    link_info->auto_pam4_link_speeds,
+		    link_info->auto_pam4_link_speed_mask,
 		    link_info->support_pam4_speeds,
 		    link_info->force_pam4_link_speed);
 	return rc;
@@ -3245,7 +3246,7 @@ int bnxt_set_hwrm_link_config(struct bnxt *bp, bool link_up)
 	/* No auto speeds and no auto_pam4_link. Disable autoneg */
 	if (bp->link_info->auto_link_speed == 0 &&
 	    bp->link_info->link_signal_mode &&
-	    bp->link_info->auto_pam4_link_speeds == 0)
+	    bp->link_info->auto_pam4_link_speed_mask == 0)
 		autoneg = 0;
 
 	speed = bnxt_parse_eth_link_speed(dev_conf->link_speeds,
@@ -3258,8 +3259,8 @@ int bnxt_set_hwrm_link_config(struct bnxt *bp, bool link_up)
 		link_req.auto_link_speed_mask =
 			bnxt_parse_eth_link_speed_mask(bp,
 						       dev_conf->link_speeds);
-		link_req.auto_pam4_link_speeds =
-			bp->link_info->auto_pam4_link_speeds;
+		link_req.auto_pam4_link_speed_mask =
+			bp->link_info->auto_pam4_link_speed_mask;
 	} else {
 		if (bp->link_info->phy_type ==
 		    HWRM_PORT_PHY_QCFG_OUTPUT_PHY_TYPE_BASET ||
@@ -3278,9 +3279,9 @@ int bnxt_set_hwrm_link_config(struct bnxt *bp, bool link_up)
 		else if (bp->link_info->force_pam4_link_speed)
 			link_req.link_speed =
 				bp->link_info->force_pam4_link_speed;
-		else if (bp->link_info->auto_pam4_link_speeds)
+		else if (bp->link_info->auto_pam4_link_speed_mask)
 			link_req.link_speed =
-				bp->link_info->auto_pam4_link_speeds;
+				bp->link_info->auto_pam4_link_speed_mask;
 		else if (bp->link_info->support_pam4_speeds)
 			link_req.link_speed =
 				bp->link_info->support_pam4_speeds;
@@ -3292,7 +3293,7 @@ int bnxt_set_hwrm_link_config(struct bnxt *bp, bool link_up)
 		 * zero. Use the auto_link_speed.
 		 */
 		if (bp->link_info->auto_link_speed != 0 &&
-		    bp->link_info->auto_pam4_link_speeds == 0)
+		    bp->link_info->auto_pam4_link_speed_mask == 0)
 			link_req.link_speed = bp->link_info->auto_link_speed;
 	}
 	link_req.duplex = bnxt_parse_eth_link_duplex(dev_conf->link_speeds);
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 16/18] net/bnxt: fix pointer access
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (14 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 15/18] net/bnxt: fix PAM4 mask setting Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 17/18] net/bnxt: fix incorrect memset in bnxt_dev_xstats_get_op Kalesh A P
                   ` (2 subsequent siblings)
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Ajit Khaparde <ajit.khaparde@broadcom.com>

Validate the pointers in rxq before accessing them.
Otherwise it can cause a segfault.

Fixes: 657c2a7f1dd4 ("net/bnxt: create aggregation rings when needed")
Cc: stable@dpdk.org

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_rxq.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c
index 9f1d1d4..cd3bb14 100644
--- a/drivers/net/bnxt/bnxt_rxq.c
+++ b/drivers/net/bnxt/bnxt_rxq.c
@@ -214,7 +214,9 @@ void bnxt_rx_queue_release_mbufs(struct bnxt_rx_queue *rxq)
 		}
 	}
 	/* Free up mbufs in Agg ring */
-	if (!bnxt_need_agg_ring(rxq->bp->eth_dev))
+	if (rxq->bp == NULL ||
+	    rxq->bp->eth_dev == NULL ||
+	    !bnxt_need_agg_ring(rxq->bp->eth_dev))
 		return;
 
 	sw_ring = rxq->rx_ring->ag_buf_ring;
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 17/18] net/bnxt: fix incorrect memset in bnxt_dev_xstats_get_op
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (15 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 16/18] net/bnxt: fix pointer access Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 18/18] net/bnxt: check VF rep pointer before access Kalesh A P
  2022-01-12  2:09 ` [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Ajit Khaparde
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>

In bnxt_dev_xstats_get_op(), the PMD is not zeroing the whole
buffer supplied by the application. This can end up passing
junk statistics values to the application when the FW does not
support extended stats on a function.
Fixed to call memset() with corrrect size.

Fixes: f55e12f33416 ("net/bnxt: support extended port counters")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_stats.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/bnxt/bnxt_stats.c b/drivers/net/bnxt/bnxt_stats.c
index 991eafc..5b6519e 100644
--- a/drivers/net/bnxt/bnxt_stats.c
+++ b/drivers/net/bnxt/bnxt_stats.c
@@ -741,7 +741,7 @@ int bnxt_dev_xstats_get_op(struct rte_eth_dev *eth_dev,
 					(bp->fw_tx_port_stats_ext_size /
 					 stat_size));
 
-	memset(xstats, 0, sizeof(*xstats));
+	memset(xstats, 0, sizeof(*xstats) * n);
 
 	count = 0;
 	for (i = 0; i < RTE_DIM(bnxt_rx_stats_strings); i++) {
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [dpdk-dev] [PATCH 18/18] net/bnxt: check VF rep pointer before access
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (16 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 17/18] net/bnxt: fix incorrect memset in bnxt_dev_xstats_get_op Kalesh A P
@ 2022-01-04  8:38 ` Kalesh A P
  2022-01-12  2:09 ` [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Ajit Khaparde
  18 siblings, 0 replies; 20+ messages in thread
From: Kalesh A P @ 2022-01-04  8:38 UTC (permalink / raw)
  To: dev; +Cc: ferruh.yigit, ajit.khaparde

From: Ajit Khaparde <ajit.khaparde@broadcom.com>

The PF or trusted VF Rx handler could invoke the VF representor's
Rx function without knowledge of the application cleaning up the
representor ports. Check if the vfr_bp pointer is valid before
accessing it.

Fixes: 6dc83230b43b ("net/bnxt: support port representor data path")
Cc: stable@dpdk.org

Signed-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
---
 drivers/net/bnxt/bnxt_reps.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c
index f24f5ef..5e140f0 100644
--- a/drivers/net/bnxt/bnxt_reps.c
+++ b/drivers/net/bnxt/bnxt_reps.c
@@ -35,16 +35,20 @@ static const struct eth_dev_ops bnxt_rep_dev_ops = {
 uint16_t
 bnxt_vfr_recv(uint16_t port_id, uint16_t queue_id, struct rte_mbuf *mbuf)
 {
-	struct rte_mbuf **prod_rx_buf;
+	struct bnxt_representor *vfr_bp = NULL;
 	struct bnxt_rx_ring_info *rep_rxr;
-	struct bnxt_rx_queue *rep_rxq;
 	struct rte_eth_dev *vfr_eth_dev;
-	struct bnxt_representor *vfr_bp;
+	struct rte_mbuf **prod_rx_buf;
+	struct bnxt_rx_queue *rep_rxq;
 	uint16_t mask;
 	uint8_t que;
 
 	vfr_eth_dev = &rte_eth_devices[port_id];
-	vfr_bp = vfr_eth_dev->data->dev_private;
+	vfr_bp = vfr_eth_dev ? vfr_eth_dev->data->dev_private : NULL;
+
+	if (unlikely(vfr_bp == NULL))
+		return 1;
+
 	/* If rxq_id happens to be > nr_rings, use ring 0 */
 	que = queue_id < vfr_bp->rx_nr_rings ? queue_id : 0;
 	rep_rxq = vfr_bp->rx_queues[que];
-- 
2.10.1


^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [dpdk-dev] [PATCH 00/18] bnxt PMD fixes
  2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
                   ` (17 preceding siblings ...)
  2022-01-04  8:38 ` [dpdk-dev] [PATCH 18/18] net/bnxt: check VF rep pointer before access Kalesh A P
@ 2022-01-12  2:09 ` Ajit Khaparde
  18 siblings, 0 replies; 20+ messages in thread
From: Ajit Khaparde @ 2022-01-12  2:09 UTC (permalink / raw)
  To: Kalesh A P; +Cc: dpdk-dev, Ferruh Yigit

On Tue, Jan 4, 2022 at 12:19 AM Kalesh A P
<kalesh-anakkur.purayil@broadcom.com> wrote:
>
> From: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
>
> This series contains bnxt PMD bug fixes. Please apply.
Patchset applied to dpdk-next-net-brcm. Thanks

>
> Ajit Khaparde (4):
>   net/bnxt: fix ring teardown
>   net/bnxt: fix PAM4 mask setting
>   net/bnxt: fix pointer access
>   net/bnxt: check VF rep pointer before access
>
> Kalesh AP (13):
>   net/bnxt: fix bnxt_dev_set_mc_addr_list_op
Fixed commit headline to "fix set multicast address list".

>   net/bnxt: fix to restore mcast macs during reset recovery
>   net/bnxt: fix queue stop operation
>   net/bnxt: restore RSS configuration after reset recovery
>   net/bnxt: fix restoring VLAN filtering after recovery
>   net/bnxt: fix to cap max number of unicast MACs
>   net/bnxt: set fast-path pointers only if recovery succeeds
>   net/bnxt: improve recovery related log messages
>   net/bnxt: add null check for mark table
>   net/bnxt: fix flow create when RSS is disabled
>   net/bnxt: get max supported multicast filters count
>   net/bnxt: fix handling of VF configuration changes
>   net/bnxt: fix incorrect memset in bnxt_dev_xstats_get_op
Fixed up typo in commit log during merge.
Changed commit title to "fix incorrect memset in get xstats".

>
> Somnath Kotur (1):
>   net/bnxt: refactor bnxt_stop_rxtx() for reuse
Changed commit headline to "refactor bnxt stop rxtx for reuse".

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2022-01-12  2:10 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-04  8:38 [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 01/18] net/bnxt: fix bnxt_dev_set_mc_addr_list_op Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 02/18] net/bnxt: fix to restore mcast macs during reset recovery Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 03/18] net/bnxt: fix queue stop operation Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 04/18] net/bnxt: restore RSS configuration after reset recovery Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 05/18] net/bnxt: fix restoring VLAN filtering after recovery Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 06/18] net/bnxt: fix to cap max number of unicast MACs Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 07/18] net/bnxt: set fast-path pointers only if recovery succeeds Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 08/18] net/bnxt: improve recovery related log messages Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 09/18] net/bnxt: add null check for mark table Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 10/18] net/bnxt: fix flow create when RSS is disabled Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 11/18] net/bnxt: get max supported multicast filters count Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 12/18] net/bnxt: refactor bnxt_stop_rxtx() for reuse Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 13/18] net/bnxt: fix handling of VF configuration changes Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 14/18] net/bnxt: fix ring teardown Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 15/18] net/bnxt: fix PAM4 mask setting Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 16/18] net/bnxt: fix pointer access Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 17/18] net/bnxt: fix incorrect memset in bnxt_dev_xstats_get_op Kalesh A P
2022-01-04  8:38 ` [dpdk-dev] [PATCH 18/18] net/bnxt: check VF rep pointer before access Kalesh A P
2022-01-12  2:09 ` [dpdk-dev] [PATCH 00/18] bnxt PMD fixes Ajit Khaparde

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).