patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH 17.11 1/5] net/qede: fix VF port creation sequence
@ 2018-06-08  0:51 Rasesh Mody
  2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 2/5] net/qede: fix device stop to remove primary MAC Rasesh Mody
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Rasesh Mody @ 2018-06-08  0:51 UTC (permalink / raw)
  To: stable; +Cc: Harish Patil, yliu, Dept-EngDPDKDev, Rasesh Mody

From: Harish Patil <harish.patil@cavium.com>

[ upstream commit dd28bc8c6ef4da1a38e1589d69856936e91889f1 ]

Few adjustments are required to effectively handle VF vport create/delete
sequence. The problem is exposed by recent ethdev TX offload changes
which requires port to be in down state before applying TX offloads.

 - Move vport creation from dev_init() to dev_configure()
 - Force to stop vport if it was already started due to previous run
   (restart case)
 - Move link state enable/disable to dev_init() and dev_close()
   respectively.
 - For MTU change, recreate vport with new MTU value and restore old
   config. This is necessary since VF MTU value can be changed only upon
   vport creation.

Fixes: ec94dbc57362 ("qede: add base driver")

Signed-off-by: Harish Patil <harish.patil@cavium.com>
Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
 drivers/net/qede/qede_ethdev.c |  141 ++++++++++++++++++++--------------------
 drivers/net/qede/qede_ethdev.h |    3 +-
 drivers/net/qede/qede_rxtx.c   |    4 ++
 3 files changed, 78 insertions(+), 70 deletions(-)

diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index 5eec12a..15b6c27 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -443,55 +443,59 @@ static void qede_reset_queue_stats(struct qede_dev *qdev, bool xstats)
 }
 
 static int
-qede_start_vport(struct qede_dev *qdev, uint16_t mtu)
+qede_stop_vport(struct ecore_dev *edev)
 {
-	struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
-	struct ecore_sp_vport_start_params params;
 	struct ecore_hwfn *p_hwfn;
+	uint8_t vport_id;
 	int rc;
 	int i;
 
-	memset(&params, 0, sizeof(params));
-	params.vport_id = 0;
-	params.mtu = mtu;
-	/* @DPDK - Disable FW placement */
-	params.zero_placement_offset = 1;
+	vport_id = 0;
 	for_each_hwfn(edev, i) {
 		p_hwfn = &edev->hwfns[i];
-		params.concrete_fid = p_hwfn->hw_info.concrete_fid;
-		params.opaque_fid = p_hwfn->hw_info.opaque_fid;
-		rc = ecore_sp_vport_start(p_hwfn, &params);
+		rc = ecore_sp_vport_stop(p_hwfn, p_hwfn->hw_info.opaque_fid,
+					 vport_id);
 		if (rc != ECORE_SUCCESS) {
-			DP_ERR(edev, "Start V-PORT failed %d\n", rc);
+			DP_ERR(edev, "Stop V-PORT failed rc = %d\n", rc);
 			return rc;
 		}
 	}
-	ecore_reset_vport_stats(edev);
-	if (IS_PF(edev))
-		qede_reset_queue_stats(qdev, true);
-	DP_INFO(edev, "VPORT started with MTU = %u\n", mtu);
+
+	DP_INFO(edev, "vport stopped\n");
 
 	return 0;
 }
 
 static int
-qede_stop_vport(struct ecore_dev *edev)
+qede_start_vport(struct qede_dev *qdev, uint16_t mtu)
 {
+	struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
+	struct ecore_sp_vport_start_params params;
 	struct ecore_hwfn *p_hwfn;
-	uint8_t vport_id;
 	int rc;
 	int i;
 
-	vport_id = 0;
+	if (qdev->vport_started)
+		qede_stop_vport(edev);
+
+	memset(&params, 0, sizeof(params));
+	params.vport_id = 0;
+	params.mtu = mtu;
+	/* @DPDK - Disable FW placement */
+	params.zero_placement_offset = 1;
 	for_each_hwfn(edev, i) {
 		p_hwfn = &edev->hwfns[i];
-		rc = ecore_sp_vport_stop(p_hwfn, p_hwfn->hw_info.opaque_fid,
-					 vport_id);
+		params.concrete_fid = p_hwfn->hw_info.concrete_fid;
+		params.opaque_fid = p_hwfn->hw_info.opaque_fid;
+		rc = ecore_sp_vport_start(p_hwfn, &params);
 		if (rc != ECORE_SUCCESS) {
-			DP_ERR(edev, "Stop V-PORT failed rc = %d\n", rc);
+			DP_ERR(edev, "Start V-PORT failed %d\n", rc);
 			return rc;
 		}
 	}
+	ecore_reset_vport_stats(edev);
+	qdev->vport_started = true;
+	DP_INFO(edev, "VPORT started with MTU = %u\n", mtu);
 
 	return 0;
 }
@@ -1101,6 +1105,8 @@ static int qede_vlan_offload_set(struct rte_eth_dev *eth_dev, int mask)
 		DP_INFO(edev, "No offloads are supported with VLAN Q-in-Q"
 			" and classification is based on outer tag only\n");
 
+	qdev->vlan_offload_mask = mask;
+
 	DP_INFO(edev, "vlan offload mask %d vlan-strip %d vlan-filter %d\n",
 		mask, rxmode->hw_vlan_strip, rxmode->hw_vlan_filter);
 
@@ -1176,13 +1182,6 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)
 
 	PMD_INIT_FUNC_TRACE(edev);
 
-	/* Update MTU only if it has changed */
-	if (qdev->mtu != qdev->new_mtu) {
-		if (qede_update_mtu(eth_dev, qdev->new_mtu))
-			goto err;
-		qdev->mtu = qdev->new_mtu;
-	}
-
 	/* Configure TPA parameters */
 	if (rxmode->enable_lro) {
 		if (qede_enable_tpa(eth_dev, true))
@@ -1196,6 +1195,9 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)
 	if (qede_start_queues(eth_dev))
 		goto err;
 
+	if (IS_PF(edev))
+		qede_reset_queue_stats(qdev, true);
+
 	/* Newer SR-IOV PF driver expects RX/TX queues to be started before
 	 * enabling RSS. Hence RSS configuration is deferred upto this point.
 	 * Also, we would like to retain similar behavior in PF case, so we
@@ -1209,9 +1211,6 @@ static int qede_dev_start(struct rte_eth_dev *eth_dev)
 	if (qede_activate_vport(eth_dev, true))
 		goto err;
 
-	/* Bring-up the link */
-	qede_dev_set_link_state(eth_dev, true);
-
 	/* Update link status */
 	qede_link_update(eth_dev, 0);
 
@@ -1246,9 +1245,6 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev)
 	/* Disable traffic */
 	ecore_hw_stop_fastpath(edev); /* TBD - loop */
 
-	/* Bring the link down */
-	qede_dev_set_link_state(eth_dev, false);
-
 	DP_INFO(edev, "Device is stopped\n");
 }
 
@@ -1375,20 +1371,11 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
 	if (qede_check_fdir_support(eth_dev))
 		return -ENOTSUP;
 
-	/* Deallocate resources if held previously. It is needed only if the
-	 * queue count has been changed from previous configuration. If its
-	 * going to change then it means RX/TX queue setup will be called
-	 * again and the fastpath pointers will be reinitialized there.
-	 */
-	if (qdev->num_tx_queues != eth_dev->data->nb_tx_queues ||
-	    qdev->num_rx_queues != eth_dev->data->nb_rx_queues) {
-		qede_dealloc_fp_resc(eth_dev);
-		/* Proceed with updated queue count */
-		qdev->num_tx_queues = eth_dev->data->nb_tx_queues;
-		qdev->num_rx_queues = eth_dev->data->nb_rx_queues;
-		if (qede_alloc_fp_resc(qdev))
-			return -ENOMEM;
-	}
+	qede_dealloc_fp_resc(eth_dev);
+	qdev->num_tx_queues = eth_dev->data->nb_tx_queues;
+	qdev->num_rx_queues = eth_dev->data->nb_rx_queues;
+	if (qede_alloc_fp_resc(qdev))
+		return -ENOMEM;
 
 	/* If jumbo enabled adjust MTU */
 	if (eth_dev->data->dev_conf.rxmode.jumbo_frame)
@@ -1396,19 +1383,9 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
 				eth_dev->data->dev_conf.rxmode.max_rx_pkt_len -
 				ETHER_HDR_LEN - ETHER_CRC_LEN;
 
-	/* VF's MTU has to be set using vport-start where as
-	 * PF's MTU can be updated via vport-update.
-	 */
-	if (IS_VF(edev)) {
-		if (qede_start_vport(qdev, eth_dev->data->mtu))
-			return -1;
-	} else {
-		if (qede_update_mtu(eth_dev, eth_dev->data->mtu))
-			return -1;
-	}
-
+	if (qede_start_vport(qdev, eth_dev->data->mtu))
+		return -1;
 	qdev->mtu = eth_dev->data->mtu;
-	qdev->new_mtu = qdev->mtu;
 
 	/* Enable VLAN offloads by default */
 	ret = qede_vlan_offload_set(eth_dev, ETH_VLAN_STRIP_MASK  |
@@ -1621,12 +1598,15 @@ static void qede_dev_close(struct rte_eth_dev *eth_dev)
 		qede_dev_stop(eth_dev);
 
 	qede_stop_vport(edev);
+	qdev->vport_started = false;
 	qede_fdir_dealloc_resc(eth_dev);
 	qede_dealloc_fp_resc(eth_dev);
 
 	eth_dev->data->nb_rx_queues = 0;
 	eth_dev->data->nb_tx_queues = 0;
 
+	/* Bring the link down */
+	qede_dev_set_link_state(eth_dev, false);
 	qdev->ops->common->slowpath_stop(edev);
 	qdev->ops->common->remove(edev);
 	rte_intr_disable(&pci_dev->intr_handle);
@@ -2325,8 +2305,6 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
 	int i;
 
 	PMD_INIT_FUNC_TRACE(edev);
-	if (IS_VF(edev))
-		return -ENOTSUP;
 	qede_dev_info_get(dev, &dev_info);
 	max_rx_pkt_len = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN;
 	frame_size = max_rx_pkt_len + QEDE_ETH_OVERHEAD;
@@ -2353,7 +2331,9 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
 		restart = true;
 	}
 	rte_delay_ms(1000);
-	qdev->new_mtu = mtu;
+	qede_start_vport(qdev, mtu); /* Recreate vport */
+	qdev->mtu = mtu;
+
 	/* Fix up RX buf size for all queues of the port */
 	for_each_rss(i) {
 		fp = &qdev->fp_array[i];
@@ -2367,17 +2347,33 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
 				rx_buf_size = frame_size;
 			rx_buf_size = QEDE_CEIL_TO_CACHE_LINE_SIZE(rx_buf_size);
 			fp->rxq->rx_buf_size = rx_buf_size;
-			DP_INFO(edev, "buf_size adjusted to %u\n", rx_buf_size);
+			DP_INFO(edev, "RX buffer size %u\n", rx_buf_size);
 		}
 	}
 	if (max_rx_pkt_len > ETHER_MAX_LEN)
 		dev->data->dev_conf.rxmode.jumbo_frame = 1;
 	else
 		dev->data->dev_conf.rxmode.jumbo_frame = 0;
+
+	/* Restore config lost due to vport stop */
+	qede_mac_addr_set(dev, &qdev->primary_mac);
+	if (dev->data->promiscuous)
+		qede_promiscuous_enable(dev);
+	else
+		qede_promiscuous_disable(dev);
+
+	if (dev->data->all_multicast)
+		qede_allmulticast_enable(dev);
+	else
+		qede_allmulticast_disable(dev);
+
+	qede_vlan_offload_set(dev, qdev->vlan_offload_mask);
+
 	if (!dev->data->dev_started && restart) {
 		qede_dev_start(dev);
 		dev->data->dev_started = 1;
 	}
+
 	/* update max frame size */
 	dev->data->dev_conf.rxmode.max_rx_pkt_len = max_rx_pkt_len;
 	/* Reassign back */
@@ -2973,6 +2969,9 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
 		do_once = false;
 	}
 
+	/* Bring-up the link */
+	qede_dev_set_link_state(eth_dev, true);
+
 	adapter->num_tx_queues = 0;
 	adapter->num_rx_queues = 0;
 	SLIST_INIT(&adapter->fdir_info.fdir_list_head);
@@ -2980,10 +2979,14 @@ static int qede_common_dev_init(struct rte_eth_dev *eth_dev, bool is_vf)
 	SLIST_INIT(&adapter->uc_list_head);
 	SLIST_INIT(&adapter->mc_list_head);
 	adapter->mtu = ETHER_MTU;
-	adapter->new_mtu = ETHER_MTU;
-	if (!is_vf)
-		if (qede_start_vport(adapter, adapter->mtu))
-			return -1;
+	adapter->vport_started = false;
+
+	/* VF tunnel offloads is enabled by default in PF driver */
+	adapter->vxlan.enable = true;
+	adapter->vxlan.num_filters = 0;
+	adapter->vxlan.filter_type = ETH_TUNNEL_FILTER_IMAC |
+				     ETH_TUNNEL_FILTER_IVLAN;
+	adapter->vxlan.udp_port = QEDE_VXLAN_DEF_PORT;
 
 	DP_INFO(edev, "MAC address : %02x:%02x:%02x:%02x:%02x:%02x\n",
 		adapter->primary_mac.addr_bytes[0],
diff --git a/drivers/net/qede/qede_ethdev.h b/drivers/net/qede/qede_ethdev.h
index 8f21b33..2145aa6 100644
--- a/drivers/net/qede/qede_ethdev.h
+++ b/drivers/net/qede/qede_ethdev.h
@@ -184,7 +184,6 @@ struct qede_dev {
 	struct ecore_sb_info *sb_array;
 	struct qede_fastpath *fp_array;
 	uint16_t mtu;
-	uint16_t new_mtu;
 	bool enable_tx_switching;
 	bool rss_enable;
 	struct rte_eth_rss_conf rss_conf;
@@ -207,6 +206,8 @@ struct qede_dev {
 	struct qede_fdir_info fdir_info;
 	bool vlan_strip_flg;
 	char drv_ver[QEDE_PMD_DRV_VER_STR_SIZE];
+	bool vport_started;
+	int vlan_offload_mask;
 	void *ethdev;
 };
 
diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c
index e61612d..69c84af 100644
--- a/drivers/net/qede/qede_rxtx.c
+++ b/drivers/net/qede/qede_rxtx.c
@@ -417,6 +417,8 @@ int qede_alloc_fp_resc(struct qede_dev *qdev)
 
 	for (sb_idx = 0; sb_idx < QEDE_RXTX_MAX(qdev); sb_idx++) {
 		fp = &qdev->fp_array[sb_idx];
+		if (!fp)
+			continue;
 		fp->sb_info = rte_calloc("sb", 1, sizeof(struct ecore_sb_info),
 				RTE_CACHE_LINE_SIZE);
 		if (!fp->sb_info) {
@@ -448,6 +450,8 @@ void qede_dealloc_fp_resc(struct rte_eth_dev *eth_dev)
 
 	for (sb_idx = 0; sb_idx < QEDE_RXTX_MAX(qdev); sb_idx++) {
 		fp = &qdev->fp_array[sb_idx];
+		if (!fp)
+			continue;
 		DP_INFO(edev, "Free sb_info index 0x%x\n",
 				fp->sb_info->igu_sb_id);
 		if (fp->sb_info) {
-- 
1.7.10.3

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

* [dpdk-stable] [PATCH 17.11 2/5] net/qede: fix device stop to remove primary MAC
  2018-06-08  0:51 [dpdk-stable] [PATCH 17.11 1/5] net/qede: fix VF port creation sequence Rasesh Mody
@ 2018-06-08  0:51 ` Rasesh Mody
  2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 3/5] net/qede: fix to prevent overwriting packet type Rasesh Mody
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: Rasesh Mody @ 2018-06-08  0:51 UTC (permalink / raw)
  To: stable; +Cc: Rasesh Mody, yliu, Dept-EngDPDKDev

[ upstream commit 83ade1ebdbfc8211d3cb5c2bc282c3fa396e4a34 ]

This fix is to remove primary MAC filter during dev stop. Without the
fix device start attempt to add the primary MAC fails. Perform MAC set
remove under IS_PF() check.

Fixes: dd28bc8c6ef4 ("net/qede: fix VF port creation sequence")

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
 drivers/net/qede/qede_ethdev.c |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index 15b6c27..d266fff 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -905,7 +905,7 @@ static int qede_del_mcast_filters(struct rte_eth_dev *eth_dev)
 	ether_addr_copy(&eth_dev->data->mac_addrs[index],
 			(struct ether_addr *)&ucast.mac);
 
-	ecore_filter_ucast_cmd(edev, &ucast, ECORE_SPQ_MODE_CB, NULL);
+	qede_mac_int_ops(eth_dev, &ucast, false);
 }
 
 static void
@@ -1245,6 +1245,9 @@ static void qede_dev_stop(struct rte_eth_dev *eth_dev)
 	/* Disable traffic */
 	ecore_hw_stop_fastpath(edev); /* TBD - loop */
 
+	if (IS_PF(edev))
+		qede_mac_addr_remove(eth_dev, 0);
+
 	DP_INFO(edev, "Device is stopped\n");
 }
 
@@ -2329,6 +2332,9 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
 		dev->data->dev_started = 0;
 		qede_dev_stop(dev);
 		restart = true;
+	} else {
+		if (IS_PF(edev))
+			qede_mac_addr_remove(dev, 0);
 	}
 	rte_delay_ms(1000);
 	qede_start_vport(qdev, mtu); /* Recreate vport */
@@ -2356,7 +2362,9 @@ static int qede_set_mtu(struct rte_eth_dev *dev, uint16_t mtu)
 		dev->data->dev_conf.rxmode.jumbo_frame = 0;
 
 	/* Restore config lost due to vport stop */
-	qede_mac_addr_set(dev, &qdev->primary_mac);
+	if (IS_PF(edev))
+		qede_mac_addr_set(dev, &qdev->primary_mac);
+
 	if (dev->data->promiscuous)
 		qede_promiscuous_enable(dev);
 	else
-- 
1.7.10.3

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

* [dpdk-stable] [PATCH 17.11 3/5] net/qede: fix to prevent overwriting packet type
  2018-06-08  0:51 [dpdk-stable] [PATCH 17.11 1/5] net/qede: fix VF port creation sequence Rasesh Mody
  2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 2/5] net/qede: fix device stop to remove primary MAC Rasesh Mody
@ 2018-06-08  0:51 ` Rasesh Mody
  2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 4/5] net/qede/base: fix to support OVLAN mode Rasesh Mody
  2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 5/5] net/qede: fix L2-handles used for RSS hash update Rasesh Mody
  3 siblings, 0 replies; 9+ messages in thread
From: Rasesh Mody @ 2018-06-08  0:51 UTC (permalink / raw)
  To: stable; +Cc: Harish Patil, yliu, Dept-EngDPDKDev

From: Harish Patil <harish.patil@cavium.com>

[ upstream commit c152cbe2522afa12e49bdc4bb19eb5adc6227218 ]

Fixes: 3f72dd780e10 ("net/qede: check tunnel L3 header")

Signed-off-by: Harish Patil <harish.patil@cavium.com>
---
 drivers/net/qede/qede_rxtx.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/qede/qede_rxtx.c b/drivers/net/qede/qede_rxtx.c
index 69c84af..49b5bc5 100644
--- a/drivers/net/qede/qede_rxtx.c
+++ b/drivers/net/qede/qede_rxtx.c
@@ -1466,6 +1466,8 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags)
 			 */
 			rx_mb->data_off = offset + RTE_PKTMBUF_HEADROOM;
 			packet_type |= qede_rx_cqe_to_pkt_type_outer(rx_mb);
+		} else {
+			packet_type |= qede_rx_cqe_to_pkt_type(parse_flag);
 		}
 
 		/* Common handling for non-tunnel packets and for inner
@@ -1487,7 +1489,6 @@ static inline uint32_t qede_rx_cqe_to_tunn_pkt_type(uint16_t flags)
 			ol_flags |= PKT_RX_IP_CKSUM_BAD;
 		} else {
 			ol_flags |= PKT_RX_IP_CKSUM_GOOD;
-			packet_type |= qede_rx_cqe_to_pkt_type(parse_flag);
 		}
 
 		if (CQE_HAS_VLAN(parse_flag) ||
-- 
1.7.10.3

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

* [dpdk-stable] [PATCH 17.11 4/5] net/qede/base: fix to support OVLAN mode
  2018-06-08  0:51 [dpdk-stable] [PATCH 17.11 1/5] net/qede: fix VF port creation sequence Rasesh Mody
  2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 2/5] net/qede: fix device stop to remove primary MAC Rasesh Mody
  2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 3/5] net/qede: fix to prevent overwriting packet type Rasesh Mody
@ 2018-06-08  0:51 ` Rasesh Mody
  2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 5/5] net/qede: fix L2-handles used for RSS hash update Rasesh Mody
  3 siblings, 0 replies; 9+ messages in thread
From: Rasesh Mody @ 2018-06-08  0:51 UTC (permalink / raw)
  To: stable; +Cc: Rasesh Mody, yliu, Dept-EngDPDKDev

[ upstream commit 36f45bce2537b6c8d4b00bc8434b96103341c74c ]

This fix allows driver to program NIC configuration to support OVLAN
mode in multi-function scenario

Fixes: 47af701989bc ("net/qede/base: add UFP support")

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
---
 drivers/net/qede/base/ecore.h             |    6 ++++++
 drivers/net/qede/base/ecore_dcbx.c        |    5 +++++
 drivers/net/qede/base/ecore_dcbx_api.h    |    1 +
 drivers/net/qede/base/ecore_dev.c         |   10 ++++++++--
 drivers/net/qede/base/ecore_hsi_common.h  |    5 ++++-
 drivers/net/qede/base/ecore_sp_commands.c |   29 ++++++++++++++++++++---------
 6 files changed, 44 insertions(+), 12 deletions(-)

diff --git a/drivers/net/qede/base/ecore.h b/drivers/net/qede/base/ecore.h
index ce5f3a9..a44ce51 100644
--- a/drivers/net/qede/base/ecore.h
+++ b/drivers/net/qede/base/ecore.h
@@ -534,6 +534,12 @@ enum ecore_mf_mode_bit {
 	ECORE_MF_UFP_SPECIFIC,
 
 	ECORE_MF_DISABLE_ARFS,
+
+	/* Use vlan for steering */
+	ECORE_MF_8021Q_TAGGING,
+
+	/* Use stag for steering */
+	ECORE_MF_8021AD_TAGGING,
 };
 
 enum ecore_ufp_mode {
diff --git a/drivers/net/qede/base/ecore_dcbx.c b/drivers/net/qede/base/ecore_dcbx.c
index 21ddda9..157a605 100644
--- a/drivers/net/qede/base/ecore_dcbx.c
+++ b/drivers/net/qede/base/ecore_dcbx.c
@@ -149,6 +149,10 @@ u8 ecore_dcbx_get_dscp_value(struct ecore_hwfn *p_hwfn, u8 pri)
 	}
 	p_data->arr[type].update = UPDATE_DCB_DSCP;
 
+	/* Do not add valn tag 0 when DCB is enabled and port is in UFP mode */
+	if (OSAL_TEST_BIT(ECORE_MF_UFP_SPECIFIC, &p_hwfn->p_dev->mf_bits))
+		p_data->arr[type].dont_add_vlan0 = true;
+
 	/* QM reconf data */
 	if (p_hwfn->hw_info.personality == personality)
 		p_hwfn->hw_info.offload_tc = tc;
@@ -935,6 +939,7 @@ static void ecore_dcbx_update_protocol_data(struct protocol_dcb_data *p_data,
 	p_data->dcb_tc = p_src->arr[type].tc;
 	p_data->dscp_enable_flag = p_src->arr[type].dscp_enable;
 	p_data->dscp_val = p_src->arr[type].dscp_val;
+	p_data->dcb_dont_add_vlan0 = p_src->arr[type].dont_add_vlan0;
 }
 
 /* Set pf update ramrod command params */
diff --git a/drivers/net/qede/base/ecore_dcbx_api.h b/drivers/net/qede/base/ecore_dcbx_api.h
index 9ff4df4..4df99ae 100644
--- a/drivers/net/qede/base/ecore_dcbx_api.h
+++ b/drivers/net/qede/base/ecore_dcbx_api.h
@@ -29,6 +29,7 @@ struct ecore_dcbx_app_data {
 	u8 tc;			/* Traffic Class */
 	bool dscp_enable;	/* DSCP enabled */
 	u8 dscp_val;		/* DSCP value */
+	bool dont_add_vlan0;	/* Do not insert a vlan tag with id 0 */
 };
 
 #ifndef __EXTRACT__LINUX__
diff --git a/drivers/net/qede/base/ecore_dev.c b/drivers/net/qede/base/ecore_dev.c
index da1830c..9affcbc 100644
--- a/drivers/net/qede/base/ecore_dev.c
+++ b/drivers/net/qede/base/ecore_dev.c
@@ -3496,9 +3496,14 @@ static enum _ecore_status_t ecore_hw_get_resc(struct ecore_hwfn *p_hwfn,
 		break;
 	case NVM_CFG1_GLOB_MF_MODE_UFP:
 		p_hwfn->p_dev->mf_bits = 1 << ECORE_MF_OVLAN_CLSS |
-					 1 << ECORE_MF_UFP_SPECIFIC;
+					 1 << ECORE_MF_UFP_SPECIFIC |
+					 1 << ECORE_MF_8021Q_TAGGING;
+		break;
+	case NVM_CFG1_GLOB_MF_MODE_BD:
+		p_hwfn->p_dev->mf_bits = 1 << ECORE_MF_OVLAN_CLSS |
+					 1 << ECORE_MF_LLH_PROTO_CLSS |
+					 1 << ECORE_MF_8021AD_TAGGING;
 		break;
-
 	case NVM_CFG1_GLOB_MF_MODE_NPAR1_0:
 		p_hwfn->p_dev->mf_bits = 1 << ECORE_MF_LLH_MAC_CLSS |
 					 1 << ECORE_MF_LLH_PROTO_CLSS |
@@ -3527,6 +3532,7 @@ static enum _ecore_status_t ecore_hw_get_resc(struct ecore_hwfn *p_hwfn,
 	 */
 	switch (mf_mode) {
 	case NVM_CFG1_GLOB_MF_MODE_MF_ALLOWED:
+	case NVM_CFG1_GLOB_MF_MODE_BD:
 		p_hwfn->p_dev->mf_mode = ECORE_MF_OVLAN;
 		break;
 	case NVM_CFG1_GLOB_MF_MODE_NPAR1_0:
diff --git a/drivers/net/qede/base/ecore_hsi_common.h b/drivers/net/qede/base/ecore_hsi_common.h
index d8abd60..31ae2a0 100644
--- a/drivers/net/qede/base/ecore_hsi_common.h
+++ b/drivers/net/qede/base/ecore_hsi_common.h
@@ -1515,7 +1515,10 @@ struct protocol_dcb_data {
 	u8 dcb_priority /* dcbPri flag value */;
 	u8 dcb_tc /* dcb TC value */;
 	u8 dscp_val /* dscp value to write if dscp_enable_flag is set */;
-	u8 reserved0;
+/* When DCB is enabled - if this flag is set, dont add VLAN 0 tag to untagged
+ * frames
+ */
+	u8 dcb_dont_add_vlan0;
 };
 
 /*
diff --git a/drivers/net/qede/base/ecore_sp_commands.c b/drivers/net/qede/base/ecore_sp_commands.c
index 7598e7a..83705b8 100644
--- a/drivers/net/qede/base/ecore_sp_commands.c
+++ b/drivers/net/qede/base/ecore_sp_commands.c
@@ -295,6 +295,7 @@ static void ecore_set_hw_tunn_mode_port(struct ecore_hwfn *p_hwfn,
 }
 
 #define ETH_P_8021Q 0x8100
+#define ETH_P_8021AD 0x88A8 /* 802.1ad Service VLAN         */
 
 enum _ecore_status_t ecore_sp_pf_start(struct ecore_hwfn *p_hwfn,
 				       struct ecore_ptt *p_ptt,
@@ -308,7 +309,7 @@ enum _ecore_status_t ecore_sp_pf_start(struct ecore_hwfn *p_hwfn,
 	struct ecore_sp_init_data init_data;
 	enum _ecore_status_t rc = ECORE_NOTIMPL;
 	u8 page_cnt;
-	int i;
+	u8 i;
 
 	/* update initial eq producer */
 	ecore_eq_prod_update(p_hwfn,
@@ -343,18 +344,27 @@ enum _ecore_status_t ecore_sp_pf_start(struct ecore_hwfn *p_hwfn,
 
 	p_ramrod->outer_tag_config.outer_tag.tci =
 		OSAL_CPU_TO_LE16(p_hwfn->hw_info.ovlan);
+	if (OSAL_TEST_BIT(ECORE_MF_8021Q_TAGGING, &p_hwfn->p_dev->mf_bits)) {
+		p_ramrod->outer_tag_config.outer_tag.tpid = ETH_P_8021Q;
+	} else if (OSAL_TEST_BIT(ECORE_MF_8021AD_TAGGING,
+		 &p_hwfn->p_dev->mf_bits)) {
+		p_ramrod->outer_tag_config.outer_tag.tpid = ETH_P_8021AD;
+		p_ramrod->outer_tag_config.enable_stag_pri_change = 1;
+	}
+
+	p_ramrod->outer_tag_config.pri_map_valid = 1;
+	for (i = 0; i < ECORE_MAX_PFC_PRIORITIES; i++)
+		p_ramrod->outer_tag_config.inner_to_outer_pri_map[i] = i;
 
+	/* enable_stag_pri_change should be set if port is in BD mode or,
+	 * UFP with Host Control mode or, UFP with DCB over base interface.
+	 */
 	if (OSAL_TEST_BIT(ECORE_MF_UFP_SPECIFIC, &p_hwfn->p_dev->mf_bits)) {
-		p_ramrod->outer_tag_config.outer_tag.tpid =
-			OSAL_CPU_TO_LE16(ETH_P_8021Q);
-		if (p_hwfn->ufp_info.pri_type == ECORE_UFP_PRI_OS)
+		if ((p_hwfn->ufp_info.pri_type == ECORE_UFP_PRI_OS) ||
+		    (p_hwfn->p_dcbx_info->results.dcbx_enabled))
 			p_ramrod->outer_tag_config.enable_stag_pri_change = 1;
 		else
 			p_ramrod->outer_tag_config.enable_stag_pri_change = 0;
-		p_ramrod->outer_tag_config.pri_map_valid = 1;
-		for (i = 0; i < 8; i++)
-			p_ramrod->outer_tag_config.inner_to_outer_pri_map[i] =
-									  (u8)i;
 	}
 
 	/* Place EQ address in RAMROD */
@@ -451,7 +461,8 @@ enum _ecore_status_t ecore_sp_pf_update_ufp(struct ecore_hwfn *p_hwfn)
 		return rc;
 
 	p_ent->ramrod.pf_update.update_enable_stag_pri_change = true;
-	if (p_hwfn->ufp_info.pri_type == ECORE_UFP_PRI_OS)
+	if ((p_hwfn->ufp_info.pri_type == ECORE_UFP_PRI_OS) ||
+	    (p_hwfn->p_dcbx_info->results.dcbx_enabled))
 		p_ent->ramrod.pf_update.enable_stag_pri_change = 1;
 	else
 		p_ent->ramrod.pf_update.enable_stag_pri_change = 0;
-- 
1.7.10.3

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

* [dpdk-stable] [PATCH 17.11 5/5] net/qede: fix L2-handles used for RSS hash update
  2018-06-08  0:51 [dpdk-stable] [PATCH 17.11 1/5] net/qede: fix VF port creation sequence Rasesh Mody
                   ` (2 preceding siblings ...)
  2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 4/5] net/qede/base: fix to support OVLAN mode Rasesh Mody
@ 2018-06-08  0:51 ` Rasesh Mody
  2018-06-08 14:45   ` Yuanhan Liu
  3 siblings, 1 reply; 9+ messages in thread
From: Rasesh Mody @ 2018-06-08  0:51 UTC (permalink / raw)
  To: stable; +Cc: Rasesh Mody, yliu, Dept-EngDPDKDev

[ upstream commit 3a1a1f3f1344c8a3bc0b06cd23e97b3922a91a61 ]

Fix fast path array index which is used for passing L2 handles to RSS
indirection table, properly distribute rxq handles for indirection table.
Currently, it is using the local copy of indirection table. When the RX
queue configuration changes the local copy becomes invalid.

Fixes: 69d7ba88f1a1 ("net/qede/base: use L2-handles for RSS configuration")

Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
Reviewed-by: Kevin Traynor <ktraynor@redhat.com>
---
 drivers/net/qede/qede_ethdev.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
index d266fff..7462f1a 100644
--- a/drivers/net/qede/qede_ethdev.c
+++ b/drivers/net/qede/qede_ethdev.c
@@ -2084,7 +2084,7 @@ int qede_rss_hash_update(struct rte_eth_dev *eth_dev,
 	vport_update_params.vport_id = 0;
 	/* pass the L2 handles instead of qids */
 	for (i = 0 ; i < ECORE_RSS_IND_TABLE_SIZE ; i++) {
-		idx = qdev->rss_ind_table[i];
+		idx = i % QEDE_RSS_COUNT(qdev);
 		rss_params.rss_ind_table[i] = qdev->fp_array[idx].rxq->handle;
 	}
 	vport_update_params.rss_params = &rss_params;
-- 
1.7.10.3

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

* Re: [dpdk-stable] [PATCH 17.11 5/5] net/qede: fix L2-handles used for RSS hash update
  2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 5/5] net/qede: fix L2-handles used for RSS hash update Rasesh Mody
@ 2018-06-08 14:45   ` Yuanhan Liu
  2018-06-08 23:10     ` Mody, Rasesh
  0 siblings, 1 reply; 9+ messages in thread
From: Yuanhan Liu @ 2018-06-08 14:45 UTC (permalink / raw)
  To: Rasesh Mody; +Cc: stable, Dept-EngDPDKDev

On Thu, Jun 07, 2018 at 05:51:14PM -0700, Rasesh Mody wrote:
> [ upstream commit 3a1a1f3f1344c8a3bc0b06cd23e97b3922a91a61 ]

Note that this commit is not from upstream, instead, it's from
dpdk-next-net.

Another thing worth noting is the commit hash will likely change
after it get applied to upstream, for, AFIAK, they do rebase for
merging dpdk-next tress. That's the reason we don't directly pick
commits from dpdk-next trees.

For this one, I will apply it without above commit info. I have
also applied the others.

Thanks.

	--yliu


> 
> Fix fast path array index which is used for passing L2 handles to RSS
> indirection table, properly distribute rxq handles for indirection table.
> Currently, it is using the local copy of indirection table. When the RX
> queue configuration changes the local copy becomes invalid.
> 
> Fixes: 69d7ba88f1a1 ("net/qede/base: use L2-handles for RSS configuration")
> 
> Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
> Reviewed-by: Kevin Traynor <ktraynor@redhat.com>
> ---
>  drivers/net/qede/qede_ethdev.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c
> index d266fff..7462f1a 100644
> --- a/drivers/net/qede/qede_ethdev.c
> +++ b/drivers/net/qede/qede_ethdev.c
> @@ -2084,7 +2084,7 @@ int qede_rss_hash_update(struct rte_eth_dev *eth_dev,
>  	vport_update_params.vport_id = 0;
>  	/* pass the L2 handles instead of qids */
>  	for (i = 0 ; i < ECORE_RSS_IND_TABLE_SIZE ; i++) {
> -		idx = qdev->rss_ind_table[i];
> +		idx = i % QEDE_RSS_COUNT(qdev);
>  		rss_params.rss_ind_table[i] = qdev->fp_array[idx].rxq->handle;
>  	}
>  	vport_update_params.rss_params = &rss_params;
> -- 
> 1.7.10.3

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

* Re: [dpdk-stable] [PATCH 17.11 5/5] net/qede: fix L2-handles used for RSS hash update
  2018-06-08 14:45   ` Yuanhan Liu
@ 2018-06-08 23:10     ` Mody, Rasesh
  2018-06-15 14:33       ` Yuanhan Liu
  0 siblings, 1 reply; 9+ messages in thread
From: Mody, Rasesh @ 2018-06-08 23:10 UTC (permalink / raw)
  To: Yuanhan Liu; +Cc: stable, Dept-Eng DPDK Dev

> From: Yuanhan Liu [mailto:yliu@fridaylinux.org]
> Sent: Friday, June 08, 2018 7:45 AM
> 
> On Thu, Jun 07, 2018 at 05:51:14PM -0700, Rasesh Mody wrote:
> > [ upstream commit 3a1a1f3f1344c8a3bc0b06cd23e97b3922a91a61 ]
> 
> Note that this commit is not from upstream, instead, it's from dpdk-next-net.
> 
> Another thing worth noting is the commit hash will likely change after it get
> applied to upstream, for, AFIAK, they do rebase for merging dpdk-next tress.
> That's the reason we don't directly pick commits from dpdk-next trees.
> 
> For this one, I will apply it without above commit info. I have also applied the
> others.

Thanks, we have additional fixes that are part of dpdk-next-net, but they are not part of upstream yet.
Can you pull in these to dpdk-17.11 stable?

https://dpdk.org/dev/patchwork/patch/40779/
https://dpdk.org/dev/patchwork/patch/40778/
https://dpdk.org/dev/patchwork/patch/40777/

> 
> Thanks.
> 
> 	--yliu
> 
> 
> >
> > Fix fast path array index which is used for passing L2 handles to RSS
> > indirection table, properly distribute rxq handles for indirection table.
> > Currently, it is using the local copy of indirection table. When the
> > RX queue configuration changes the local copy becomes invalid.
> >
> > Fixes: 69d7ba88f1a1 ("net/qede/base: use L2-handles for RSS
> > configuration")
> >
> > Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
> > Reviewed-by: Kevin Traynor <ktraynor@redhat.com>
> > ---
> >  drivers/net/qede/qede_ethdev.c |    2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/qede/qede_ethdev.c
> > b/drivers/net/qede/qede_ethdev.c index d266fff..7462f1a 100644
> > --- a/drivers/net/qede/qede_ethdev.c
> > +++ b/drivers/net/qede/qede_ethdev.c
> > @@ -2084,7 +2084,7 @@ int qede_rss_hash_update(struct rte_eth_dev
> *eth_dev,
> >  	vport_update_params.vport_id = 0;
> >  	/* pass the L2 handles instead of qids */
> >  	for (i = 0 ; i < ECORE_RSS_IND_TABLE_SIZE ; i++) {
> > -		idx = qdev->rss_ind_table[i];
> > +		idx = i % QEDE_RSS_COUNT(qdev);
> >  		rss_params.rss_ind_table[i] = qdev->fp_array[idx].rxq-
> >handle;
> >  	}
> >  	vport_update_params.rss_params = &rss_params;
> > --
> > 1.7.10.3

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

* Re: [dpdk-stable] [PATCH 17.11 5/5] net/qede: fix L2-handles used for RSS hash update
  2018-06-08 23:10     ` Mody, Rasesh
@ 2018-06-15 14:33       ` Yuanhan Liu
  2018-06-15 16:54         ` Mody, Rasesh
  0 siblings, 1 reply; 9+ messages in thread
From: Yuanhan Liu @ 2018-06-15 14:33 UTC (permalink / raw)
  To: Mody, Rasesh; +Cc: stable, Dept-Eng DPDK Dev

On Fri, Jun 08, 2018 at 11:10:04PM +0000, Mody, Rasesh wrote:
> > From: Yuanhan Liu [mailto:yliu@fridaylinux.org]
> > Sent: Friday, June 08, 2018 7:45 AM
> > 
> > On Thu, Jun 07, 2018 at 05:51:14PM -0700, Rasesh Mody wrote:
> > > [ upstream commit 3a1a1f3f1344c8a3bc0b06cd23e97b3922a91a61 ]
> > 
> > Note that this commit is not from upstream, instead, it's from dpdk-next-net.
> > 
> > Another thing worth noting is the commit hash will likely change after it get
> > applied to upstream, for, AFIAK, they do rebase for merging dpdk-next tress.
> > That's the reason we don't directly pick commits from dpdk-next trees.
> > 
> > For this one, I will apply it without above commit info. I have also applied the
> > others.
> 
> Thanks, we have additional fixes that are part of dpdk-next-net, but they are not part of upstream yet.
> Can you pull in these to dpdk-17.11 stable?

I suggest to not cross the line. We normally don't do that.

> https://dpdk.org/dev/patchwork/patch/40779/
> https://dpdk.org/dev/patchwork/patch/40778/

Thus, above 2 will not be applied.

> https://dpdk.org/dev/patchwork/patch/40777/

And since you have mentioned (privately to me), that this one is
critical, I have applied it to dpdk-stable/17.11.

	--yliu

> > > Fix fast path array index which is used for passing L2 handles to RSS
> > > indirection table, properly distribute rxq handles for indirection table.
> > > Currently, it is using the local copy of indirection table. When the
> > > RX queue configuration changes the local copy becomes invalid.
> > >
> > > Fixes: 69d7ba88f1a1 ("net/qede/base: use L2-handles for RSS
> > > configuration")
> > >
> > > Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
> > > Reviewed-by: Kevin Traynor <ktraynor@redhat.com>
> > > ---
> > >  drivers/net/qede/qede_ethdev.c |    2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/net/qede/qede_ethdev.c
> > > b/drivers/net/qede/qede_ethdev.c index d266fff..7462f1a 100644
> > > --- a/drivers/net/qede/qede_ethdev.c
> > > +++ b/drivers/net/qede/qede_ethdev.c
> > > @@ -2084,7 +2084,7 @@ int qede_rss_hash_update(struct rte_eth_dev
> > *eth_dev,
> > >  	vport_update_params.vport_id = 0;
> > >  	/* pass the L2 handles instead of qids */
> > >  	for (i = 0 ; i < ECORE_RSS_IND_TABLE_SIZE ; i++) {
> > > -		idx = qdev->rss_ind_table[i];
> > > +		idx = i % QEDE_RSS_COUNT(qdev);
> > >  		rss_params.rss_ind_table[i] = qdev->fp_array[idx].rxq-
> > >handle;
> > >  	}
> > >  	vport_update_params.rss_params = &rss_params;
> > > --
> > > 1.7.10.3

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

* Re: [dpdk-stable] [PATCH 17.11 5/5] net/qede: fix L2-handles used for RSS hash update
  2018-06-15 14:33       ` Yuanhan Liu
@ 2018-06-15 16:54         ` Mody, Rasesh
  0 siblings, 0 replies; 9+ messages in thread
From: Mody, Rasesh @ 2018-06-15 16:54 UTC (permalink / raw)
  To: Yuanhan Liu; +Cc: stable, Dept-Eng DPDK Dev

> From: Yuanhan Liu [mailto:yliu@fridaylinux.org]
> Sent: Friday, June 15, 2018 7:34 AM
> 
> On Fri, Jun 08, 2018 at 11:10:04PM +0000, Mody, Rasesh wrote:
> > > From: Yuanhan Liu [mailto:yliu@fridaylinux.org]
> > > Sent: Friday, June 08, 2018 7:45 AM
> > >
> > > On Thu, Jun 07, 2018 at 05:51:14PM -0700, Rasesh Mody wrote:
> > > > [ upstream commit 3a1a1f3f1344c8a3bc0b06cd23e97b3922a91a61 ]
> > >
> > > Note that this commit is not from upstream, instead, it's from dpdk-next-
> net.
> > >
> > > Another thing worth noting is the commit hash will likely change
> > > after it get applied to upstream, for, AFIAK, they do rebase for merging
> dpdk-next tress.
> > > That's the reason we don't directly pick commits from dpdk-next trees.
> > >
> > > For this one, I will apply it without above commit info. I have also
> > > applied the others.
> >
> > Thanks, we have additional fixes that are part of dpdk-next-net, but they
> are not part of upstream yet.
> > Can you pull in these to dpdk-17.11 stable?
> 
> I suggest to not cross the line. We normally don't do that.

Understood, thanks for taking care of the critical fix.
> 
> > https://dpdk.org/dev/patchwork/patch/40779/
> > https://dpdk.org/dev/patchwork/patch/40778/
> 
> Thus, above 2 will not be applied.
> 
> > https://dpdk.org/dev/patchwork/patch/40777/
> 
> And since you have mentioned (privately to me), that this one is critical, I
> have applied it to dpdk-stable/17.11.
>
>         --yliu
> 
> > > > Fix fast path array index which is used for passing L2 handles to
> > > > RSS indirection table, properly distribute rxq handles for indirection
> table.
> > > > Currently, it is using the local copy of indirection table. When
> > > > the RX queue configuration changes the local copy becomes invalid.
> > > >
> > > > Fixes: 69d7ba88f1a1 ("net/qede/base: use L2-handles for RSS
> > > > configuration")
> > > >
> > > > Signed-off-by: Rasesh Mody <rasesh.mody@cavium.com>
> > > > Reviewed-by: Kevin Traynor <ktraynor@redhat.com>
> > > > ---
> > > >  drivers/net/qede/qede_ethdev.c |    2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > diff --git a/drivers/net/qede/qede_ethdev.c
> > > > b/drivers/net/qede/qede_ethdev.c index d266fff..7462f1a 100644
> > > > --- a/drivers/net/qede/qede_ethdev.c
> > > > +++ b/drivers/net/qede/qede_ethdev.c
> > > > @@ -2084,7 +2084,7 @@ int qede_rss_hash_update(struct
> rte_eth_dev
> > > *eth_dev,
> > > >   vport_update_params.vport_id = 0;
> > > >   /* pass the L2 handles instead of qids */
> > > >   for (i = 0 ; i < ECORE_RSS_IND_TABLE_SIZE ; i++) {
> > > > -         idx = qdev->rss_ind_table[i];
> > > > +         idx = i % QEDE_RSS_COUNT(qdev);
> > > >           rss_params.rss_ind_table[i] = qdev->fp_array[idx].rxq-
> > > >handle;
> > > >   }
> > > >   vport_update_params.rss_params = &rss_params;
> > > > --
> > > > 1.7.10.3

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

end of thread, other threads:[~2018-06-15 16:54 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-08  0:51 [dpdk-stable] [PATCH 17.11 1/5] net/qede: fix VF port creation sequence Rasesh Mody
2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 2/5] net/qede: fix device stop to remove primary MAC Rasesh Mody
2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 3/5] net/qede: fix to prevent overwriting packet type Rasesh Mody
2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 4/5] net/qede/base: fix to support OVLAN mode Rasesh Mody
2018-06-08  0:51 ` [dpdk-stable] [PATCH 17.11 5/5] net/qede: fix L2-handles used for RSS hash update Rasesh Mody
2018-06-08 14:45   ` Yuanhan Liu
2018-06-08 23:10     ` Mody, Rasesh
2018-06-15 14:33       ` Yuanhan Liu
2018-06-15 16:54         ` Mody, Rasesh

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).