net/ixgbe: fix performance drop caused by MACsec
authorShougang Wang <shougangx.wang@intel.com>
Thu, 21 Nov 2019 07:32:05 +0000 (07:32 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 26 Nov 2019 17:05:15 +0000 (18:05 +0100)
Currently macsec offload will be enabled every time when device starts.
It will cause QoS sample application performance drop issue. This patch
adds check in dev_start ops to make sure macsec is only enabled when
required explicitly.

Fixes: 50556c88104c ("net/ixgbe: fix MACsec setting")
Cc: stable@dpdk.org
Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
drivers/net/ixgbe/ixgbe_ethdev.c
drivers/net/ixgbe/ixgbe_ethdev.h
drivers/net/ixgbe/rte_pmd_ixgbe.c

index 0084c33..118bc74 100644 (file)
@@ -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;
@@ -2548,7 +2550,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();
@@ -2802,8 +2804,9 @@ skip_link_setup:
         */
        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;
 
@@ -2836,9 +2839,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 */
@@ -8847,6 +8847,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;
 }
@@ -8857,6 +8858,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;
 }
index 5da6923..76a1b9d 100644 (file)
@@ -366,6 +366,7 @@ struct rte_flow {
 };
 
 struct ixgbe_macsec_setting {
+       uint8_t offload_en;
        uint8_t encrypt_en;
        uint8_t replayprotect_en;
 };
index 073fe1e..8bcaded 100644 (file)
@@ -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;