Use get_restore_flags() internal API introduced in previous commits in rte_eth_dev_start(), to restore only the configuration requested by the driver.
Signed-off-by: Dariusz Sosnowski <dsosnow...@nvidia.com> --- lib/ethdev/rte_ethdev.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c index 362a1883f0..9e82556374 100644 --- a/lib/ethdev/rte_ethdev.c +++ b/lib/ethdev/rte_ethdev.c @@ -1719,20 +1719,27 @@ eth_dev_allmulticast_restore(struct rte_eth_dev *dev, uint16_t port_id) static int eth_dev_config_restore(struct rte_eth_dev *dev, - struct rte_eth_dev_info *dev_info, uint16_t port_id) + struct rte_eth_dev_info *dev_info, + uint32_t restore_flags, + uint16_t port_id) { int ret; - if (!(*dev_info->dev_flags & RTE_ETH_DEV_NOLIVE_MAC_ADDR)) + if (!(*dev_info->dev_flags & RTE_ETH_DEV_NOLIVE_MAC_ADDR) && + (restore_flags & RTE_ETH_RESTORE_MAC_ADDR)) eth_dev_mac_restore(dev, dev_info); - ret = eth_dev_promiscuous_restore(dev, port_id); - if (ret != 0) - return ret; + if (restore_flags & RTE_ETH_RESTORE_PROMISC) { + ret = eth_dev_promiscuous_restore(dev, port_id); + if (ret != 0) + return ret; + } - ret = eth_dev_allmulticast_restore(dev, port_id); - if (ret != 0) - return ret; + if (restore_flags & RTE_ETH_RESTORE_ALLMULTI) { + ret = eth_dev_allmulticast_restore(dev, port_id); + if (ret != 0) + return ret; + } return 0; } @@ -1742,6 +1749,7 @@ rte_eth_dev_start(uint16_t port_id) { struct rte_eth_dev *dev; struct rte_eth_dev_info dev_info; + uint32_t restore_flags; int diag; int ret, ret_stop; @@ -1769,8 +1777,11 @@ rte_eth_dev_start(uint16_t port_id) if (ret != 0) return ret; + rte_eth_get_restore_flags(dev, RTE_ETH_START, &restore_flags); + /* Lets restore MAC now if device does not support live change */ - if (*dev_info.dev_flags & RTE_ETH_DEV_NOLIVE_MAC_ADDR) + if ((*dev_info.dev_flags & RTE_ETH_DEV_NOLIVE_MAC_ADDR) && + (restore_flags & RTE_ETH_RESTORE_MAC_ADDR)) eth_dev_mac_restore(dev, &dev_info); diag = (*dev->dev_ops->dev_start)(dev); @@ -1779,7 +1790,7 @@ rte_eth_dev_start(uint16_t port_id) else return eth_err(port_id, diag); - ret = eth_dev_config_restore(dev, &dev_info, port_id); + ret = eth_dev_config_restore(dev, &dev_info, restore_flags, port_id); if (ret != 0) { RTE_ETHDEV_LOG_LINE(ERR, "Error during restoring configuration for device (port %u): %s", -- 2.39.5