Skip to content

Commit e14495c

Browse files
sodarferruhy
authored andcommitted
ethdev: restore config only when requested
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 <[email protected]> Acked-by: Ferruh Yigit <[email protected]>
1 parent 11df3a7 commit e14495c

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

lib/ethdev/rte_ethdev.c

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1719,20 +1719,27 @@ eth_dev_allmulticast_restore(struct rte_eth_dev *dev, uint16_t port_id)
17191719

17201720
static int
17211721
eth_dev_config_restore(struct rte_eth_dev *dev,
1722-
struct rte_eth_dev_info *dev_info, uint16_t port_id)
1722+
struct rte_eth_dev_info *dev_info,
1723+
uint64_t restore_flags,
1724+
uint16_t port_id)
17231725
{
17241726
int ret;
17251727

1726-
if (!(*dev_info->dev_flags & RTE_ETH_DEV_NOLIVE_MAC_ADDR))
1728+
if (!(*dev_info->dev_flags & RTE_ETH_DEV_NOLIVE_MAC_ADDR) &&
1729+
(restore_flags & RTE_ETH_RESTORE_MAC_ADDR))
17271730
eth_dev_mac_restore(dev, dev_info);
17281731

1729-
ret = eth_dev_promiscuous_restore(dev, port_id);
1730-
if (ret != 0)
1731-
return ret;
1732+
if (restore_flags & RTE_ETH_RESTORE_PROMISC) {
1733+
ret = eth_dev_promiscuous_restore(dev, port_id);
1734+
if (ret != 0)
1735+
return ret;
1736+
}
17321737

1733-
ret = eth_dev_allmulticast_restore(dev, port_id);
1734-
if (ret != 0)
1735-
return ret;
1738+
if (restore_flags & RTE_ETH_RESTORE_ALLMULTI) {
1739+
ret = eth_dev_allmulticast_restore(dev, port_id);
1740+
if (ret != 0)
1741+
return ret;
1742+
}
17361743

17371744
return 0;
17381745
}
@@ -1742,6 +1749,7 @@ rte_eth_dev_start(uint16_t port_id)
17421749
{
17431750
struct rte_eth_dev *dev;
17441751
struct rte_eth_dev_info dev_info;
1752+
uint64_t restore_flags;
17451753
int diag;
17461754
int ret, ret_stop;
17471755

@@ -1769,8 +1777,11 @@ rte_eth_dev_start(uint16_t port_id)
17691777
if (ret != 0)
17701778
return ret;
17711779

1780+
restore_flags = rte_eth_get_restore_flags(dev, RTE_ETH_START);
1781+
17721782
/* Lets restore MAC now if device does not support live change */
1773-
if (*dev_info.dev_flags & RTE_ETH_DEV_NOLIVE_MAC_ADDR)
1783+
if ((*dev_info.dev_flags & RTE_ETH_DEV_NOLIVE_MAC_ADDR) &&
1784+
(restore_flags & RTE_ETH_RESTORE_MAC_ADDR))
17741785
eth_dev_mac_restore(dev, &dev_info);
17751786

17761787
diag = (*dev->dev_ops->dev_start)(dev);
@@ -1779,7 +1790,7 @@ rte_eth_dev_start(uint16_t port_id)
17791790
else
17801791
return eth_err(port_id, diag);
17811792

1782-
ret = eth_dev_config_restore(dev, &dev_info, port_id);
1793+
ret = eth_dev_config_restore(dev, &dev_info, restore_flags, port_id);
17831794
if (ret != 0) {
17841795
RTE_ETHDEV_LOG_LINE(ERR,
17851796
"Error during restoring configuration for device (port %u): %s",

0 commit comments

Comments
 (0)