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.w...@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