[dpdk-dev] [PATCH v2] net/ixgbe: fix QoS performance drop issue

Shougang Wang shougangx.wang at intel.com
Thu Nov 21 08:32:05 CET 2019


Currently macsec offload will be enabled all the time
when device start. It will cause QoS sample application
performance drop issue. This patch add check before this
feature enabled.

Fixes: 50556c88104c ("net/ixgbe: fix MACsec setting")

Signed-off-by: Shougang Wang <shougangx.wang at intel.com>
---
 drivers/net/ixgbe/ixgbe_ethdev.c  | 14 ++++++++------
 drivers/net/ixgbe/ixgbe_ethdev.h  |  1 +
 drivers/net/ixgbe/rte_pmd_ixgbe.c |  1 +
 3 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 8c1caac18..aeb82d1c8 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -1095,6 +1095,8 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)
 
 	PMD_INIT_FUNC_TRACE();
 
+	ixgbe_dev_macsec_setting_reset(eth_dev);
+
 	eth_dev->dev_ops = &ixgbe_eth_dev_ops;
 	eth_dev->rx_pkt_burst = &ixgbe_recv_pkts;
 	eth_dev->tx_pkt_burst = &ixgbe_xmit_pkts;
@@ -2545,7 +2547,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
 	uint32_t *link_speeds;
 	struct ixgbe_tm_conf *tm_conf =
 		IXGBE_DEV_PRIVATE_TO_TM_CONF(dev->data->dev_private);
-	struct ixgbe_macsec_setting *macsec_ctrl =
+	struct ixgbe_macsec_setting *macsec_setting =
 		IXGBE_DEV_PRIVATE_TO_MACSEC_SETTING(dev->data->dev_private);
 
 	PMD_INIT_FUNC_TRACE();
@@ -2799,8 +2801,9 @@ ixgbe_dev_start(struct rte_eth_dev *dev)
 	 */
 	ixgbe_dev_link_update(dev, 0);
 
-	/* setup the macsec ctrl register */
-	ixgbe_dev_macsec_register_enable(dev, macsec_ctrl);
+	/* setup the macsec setting register */
+	if (macsec_setting->offload_en)
+		ixgbe_dev_macsec_register_enable(dev, macsec_setting);
 
 	return 0;
 
@@ -2833,9 +2836,6 @@ ixgbe_dev_stop(struct rte_eth_dev *dev)
 
 	PMD_INIT_FUNC_TRACE();
 
-	/* disable mecsec register */
-	ixgbe_dev_macsec_register_disable(dev);
-
 	rte_eal_alarm_cancel(ixgbe_dev_setup_link_alarm_handler, dev);
 
 	/* disable interrupts */
@@ -8843,6 +8843,7 @@ ixgbe_dev_macsec_setting_save(struct rte_eth_dev *dev,
 	struct ixgbe_macsec_setting *macsec =
 		IXGBE_DEV_PRIVATE_TO_MACSEC_SETTING(dev->data->dev_private);
 
+	macsec->offload_en = macsec_setting->offload_en;
 	macsec->encrypt_en = macsec_setting->encrypt_en;
 	macsec->replayprotect_en = macsec_setting->replayprotect_en;
 }
@@ -8853,6 +8854,7 @@ ixgbe_dev_macsec_setting_reset(struct rte_eth_dev *dev)
 	struct ixgbe_macsec_setting *macsec =
 		IXGBE_DEV_PRIVATE_TO_MACSEC_SETTING(dev->data->dev_private);
 
+	macsec->offload_en = 0;
 	macsec->encrypt_en = 0;
 	macsec->replayprotect_en = 0;
 }
diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h
index 5da6923a1..76a1b9d18 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.h
+++ b/drivers/net/ixgbe/ixgbe_ethdev.h
@@ -366,6 +366,7 @@ struct rte_flow {
 };
 
 struct ixgbe_macsec_setting {
+	uint8_t offload_en;
 	uint8_t encrypt_en;
 	uint8_t replayprotect_en;
 };
diff --git a/drivers/net/ixgbe/rte_pmd_ixgbe.c b/drivers/net/ixgbe/rte_pmd_ixgbe.c
index 073fe1e23..8bcaded6e 100644
--- a/drivers/net/ixgbe/rte_pmd_ixgbe.c
+++ b/drivers/net/ixgbe/rte_pmd_ixgbe.c
@@ -522,6 +522,7 @@ rte_pmd_ixgbe_macsec_enable(uint16_t port, uint8_t en, uint8_t rp)
 
 	dev = &rte_eth_devices[port];
 
+	macsec_setting.offload_en = 1;
 	macsec_setting.encrypt_en = en;
 	macsec_setting.replayprotect_en = rp;
 
-- 
2.17.1



More information about the dev mailing list