patch 'net/i40e: enable maximum frame size at port level' has been queued to stable release 21.11.1

Kevin Traynor ktraynor at redhat.com
Tue Mar 1 11:42:20 CET 2022


Hi,

FYI, your patch has been queued to stable release 21.11.1

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 03/06/22. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://github.com/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/e68285796ca68b34fb0f7a10a391957e825b1a04

Thanks.

Kevin

---
>From e68285796ca68b34fb0f7a10a391957e825b1a04 Mon Sep 17 00:00:00 2001
From: Dapeng Yu <dapengx.yu at intel.com>
Date: Tue, 7 Dec 2021 16:59:46 +0800
Subject: [PATCH] net/i40e: enable maximum frame size at port level

[ upstream commit a4ba773679231264e4077824358260c6583cc874 ]

Currently max frame size is set at queue level, which makes the values
of the following counters wrong when a jumbo frame is received.

The expected value:
rx_good_bytes: 0
rx_errors: 1
rx_oversize_errors: 1

The actual value:
rx_good_bytes: 1626
rx_errors: 0
rx_oversize_errors: 0

This patch enables setting max frame size at port level, and makes the
values above right.

Signed-off-by: Dapeng Yu <dapengx.yu at intel.com>
Tested-by: Peng Zhang <peng1x.zhang at intel.com>
Reviewed-by: Qi Zhang <qi.z.zhang at intel.com>
---
 drivers/net/i40e/i40e_ethdev.c | 41 ++++++++++++++++++++++++++++------
 1 file changed, 34 insertions(+), 7 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index 1d417dbf8a..4ac31c2fec 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -387,4 +387,5 @@ static int i40e_set_default_mac_addr(struct rte_eth_dev *dev,
 
 static int i40e_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
+static void i40e_set_mac_max_frame(struct rte_eth_dev *dev, uint16_t size);
 
 static int i40e_ethertype_filter_convert(
@@ -1710,9 +1711,4 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused)
 	i40e_add_tx_flow_control_drop_filter(pf);
 
-	/* Set the max frame size to 0x2600 by default,
-	 * in case other drivers changed the default value.
-	 */
-	i40e_aq_set_mac_config(hw, I40E_FRAME_SIZE_MAX, TRUE, false, 0, NULL);
-
 	/* initialize RSS rule list */
 	TAILQ_INIT(&pf->rss_config_list);
@@ -2365,4 +2361,5 @@ i40e_dev_start(struct rte_eth_dev *dev)
 	struct i40e_vsi *vsi;
 	uint16_t nb_rxq, nb_txq;
+	uint16_t max_frame_size;
 
 	hw->adapter_stopped = 0;
@@ -2503,4 +2500,7 @@ i40e_dev_start(struct rte_eth_dev *dev)
 			    "before starting the port");
 
+	max_frame_size = dev->data->mtu + I40E_ETH_OVERHEAD;
+	i40e_set_mac_max_frame(dev, max_frame_size);
+
 	return I40E_SUCCESS;
 
@@ -2849,4 +2849,7 @@ i40e_dev_set_link_down(struct rte_eth_dev *dev)
 }
 
+#define CHECK_INTERVAL             100  /* 100ms */
+#define MAX_REPEAT_TIME            10  /* 1s (10 * 100ms) in total */
+
 static __rte_always_inline void
 update_link_reg(struct i40e_hw *hw, struct rte_eth_link *link)
@@ -2915,6 +2918,4 @@ update_link_aq(struct i40e_hw *hw, struct rte_eth_link *link,
 	bool enable_lse, int wait_to_complete)
 {
-#define CHECK_INTERVAL             100  /* 100ms */
-#define MAX_REPEAT_TIME            10  /* 1s (10 * 100ms) in total */
 	uint32_t rep_cnt = MAX_REPEAT_TIME;
 	struct i40e_link_status link_status;
@@ -6720,4 +6721,5 @@ i40e_dev_handle_aq_msg(struct rte_eth_dev *dev)
 				rte_eth_dev_callback_process(dev,
 					RTE_ETH_EVENT_INTR_LSC, NULL);
+
 			break;
 		default:
@@ -12104,4 +12106,29 @@ i40e_cloud_filter_qinq_create(struct i40e_pf *pf)
 }
 
+static void
+i40e_set_mac_max_frame(struct rte_eth_dev *dev, uint16_t size)
+{
+	struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+	uint32_t rep_cnt = MAX_REPEAT_TIME;
+	struct rte_eth_link link;
+	enum i40e_status_code status;
+
+	do {
+		update_link_reg(hw, &link);
+		if (link.link_status)
+			break;
+
+		rte_delay_ms(CHECK_INTERVAL);
+	} while (--rep_cnt);
+
+	if (link.link_status) {
+		status = i40e_aq_set_mac_config(hw, size, TRUE, 0, false, NULL);
+		if (status != I40E_SUCCESS)
+			PMD_DRV_LOG(ERR, "Failed to set max frame size at port level");
+	} else {
+		PMD_DRV_LOG(ERR, "Set max frame size at port level not applicable on link down");
+	}
+}
+
 RTE_LOG_REGISTER_SUFFIX(i40e_logtype_init, init, NOTICE);
 RTE_LOG_REGISTER_SUFFIX(i40e_logtype_driver, driver, NOTICE);
-- 
2.34.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-03-01 10:41:03.142787342 +0000
+++ 0064-net-i40e-enable-maximum-frame-size-at-port-level.patch	2022-03-01 10:41:01.360244109 +0000
@@ -1 +1 @@
-From a4ba773679231264e4077824358260c6583cc874 Mon Sep 17 00:00:00 2001
+From e68285796ca68b34fb0f7a10a391957e825b1a04 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit a4ba773679231264e4077824358260c6583cc874 ]
+
@@ -22,2 +23,0 @@
-Cc: stable at dpdk.org
-
@@ -32 +32 @@
-index ecfa3c94db..755786dc10 100644
+index 1d417dbf8a..4ac31c2fec 100644
@@ -51 +51 @@
-@@ -2356,4 +2352,5 @@ i40e_dev_start(struct rte_eth_dev *dev)
+@@ -2365,4 +2361,5 @@ i40e_dev_start(struct rte_eth_dev *dev)
@@ -57 +57 @@
-@@ -2494,4 +2491,7 @@ i40e_dev_start(struct rte_eth_dev *dev)
+@@ -2503,4 +2500,7 @@ i40e_dev_start(struct rte_eth_dev *dev)
@@ -65 +65 @@
-@@ -2840,4 +2840,7 @@ i40e_dev_set_link_down(struct rte_eth_dev *dev)
+@@ -2849,4 +2849,7 @@ i40e_dev_set_link_down(struct rte_eth_dev *dev)
@@ -73 +73 @@
-@@ -2906,6 +2909,4 @@ update_link_aq(struct i40e_hw *hw, struct rte_eth_link *link,
+@@ -2915,6 +2918,4 @@ update_link_aq(struct i40e_hw *hw, struct rte_eth_link *link,
@@ -80 +80 @@
-@@ -6711,4 +6712,5 @@ i40e_dev_handle_aq_msg(struct rte_eth_dev *dev)
+@@ -6720,4 +6721,5 @@ i40e_dev_handle_aq_msg(struct rte_eth_dev *dev)
@@ -86 +86 @@
-@@ -12095,4 +12097,29 @@ i40e_cloud_filter_qinq_create(struct i40e_pf *pf)
+@@ -12104,4 +12106,29 @@ i40e_cloud_filter_qinq_create(struct i40e_pf *pf)



More information about the stable mailing list