Skip to content

Commit

Permalink
net/ixgbe: fix performance drop caused by MACsec
Browse files Browse the repository at this point in the history
[ upstream commit 54aedfe ]

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: 50556c8 ("net/ixgbe: fix MACsec setting")

Signed-off-by: Shougang Wang <shougangx.wang@intel.com>
Reviewed-by: Xiaolong Ye <xiaolong.ye@intel.com>
  • Loading branch information
Shougang Wang authored and kevintraynor committed Dec 11, 2019
1 parent 7137dc3 commit f4d7ffe
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 6 deletions.
14 changes: 8 additions & 6 deletions drivers/net/ixgbe/ixgbe_ethdev.c
Expand Up @@ -1078,6 +1078,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;
Expand Down Expand Up @@ -2590,7 +2592,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();
Expand Down Expand Up @@ -2832,8 +2834,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;

Expand Down Expand Up @@ -2863,9 +2866,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 */
Expand Down Expand Up @@ -8693,6 +8693,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;
}
Expand All @@ -8703,6 +8704,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;
}
Expand Down
1 change: 1 addition & 0 deletions drivers/net/ixgbe/ixgbe_ethdev.h
Expand Up @@ -361,6 +361,7 @@ struct rte_flow {
};

struct ixgbe_macsec_setting {
uint8_t offload_en;
uint8_t encrypt_en;
uint8_t replayprotect_en;
};
Expand Down
1 change: 1 addition & 0 deletions drivers/net/ixgbe/rte_pmd_ixgbe.c
Expand Up @@ -521,6 +521,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;

Expand Down

0 comments on commit f4d7ffe

Please sign in to comment.