@@ -1719,20 +1719,27 @@ eth_dev_allmulticast_restore(struct rte_eth_dev *dev, uint16_t port_id)
17191719
17201720static int
17211721eth_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