Hi Matan, On Sun, Feb 11, 2018 at 05:27:34PM +0000, Matan Azrad wrote: > Fail-safe PMD manages the states of its sub-devices gradually: > DEV_UNDEFINED, DEV_PARSED, DEV_PROBED, DEV_ACTIVE, DEV_STARTED. > > When the sub-device arguments successfully was parsed, the state is > raised from DEV_UNDEFINED to DEV_PARSED. > When the sub-device successfully was probed, the state is raised from > DEV_PARSED to DEV_PROBED. > When the sub-device successfully was configured by > rte_eth_dev_configure(), the state is raised from DEV_PROBED to > DEV_ACTIVE. > When the sub-device successfully was started by rte_eth_dev_start(), the > state is raised from DEV_ACTIVE to DEV_STARTED. > > When the sub-device successfully was stopped by rte_eth_dev_stop(), the > state is degraded from DEV_STARTED to DEV_ACTIVE. > When the sub-device successfully was closed by rte_eth_dev_close(), the > state is degraded from DEV_ACTIVE to DEV_PROBED. > When the sub-device successfully was removed by > rte_eal_hotplug_remove(), the state is degraded from DEV_PROBED to > DEV_UNDEFINED. > > Fail-safe dev_configure() operation calls to its sub-devices > dev_configure() operation, but only for sub-devices which are in > DEV_PROBED state, means that sub-devices which are in DEV_ACTIVE state > because the application triggered dev_stop() operation cannot be > reconfigured again by dev_configure() operation which is really > problematic when application wants to reconfigure its ports. > Actually, the application may get success report when some of the > sub-devices are not in the wanted configuration. > > The current behavior of fail-safe dev_configure() is correct only for > the first time dev_configure() is triggered by the application or for > sub-device synchronization in plug-in event, but it ignores the option > for reconfiguration from application side. > > Allow calling to sub-devices dev_configure() operations also in > DEV_ACTIVE state when the call was triggered by the application. > > Fixes: a46f8d584eb8 ("net/failsafe: add fail-safe PMD") > Cc: sta...@dpdk.org > > Signed-off-by: Matan Azrad <ma...@mellanox.com>
The commit log is too verbose, but otherwise the issue is real and the fix correct. Acked-by: Gaetan Rivet <gaetan.ri...@6wind.com> > --- > Based on previous series, "fix hotplug races". > > drivers/net/failsafe/failsafe_ops.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/failsafe/failsafe_ops.c > b/drivers/net/failsafe/failsafe_ops.c > index fe64c68..057e435 100644 > --- a/drivers/net/failsafe/failsafe_ops.c > +++ b/drivers/net/failsafe/failsafe_ops.c > @@ -110,7 +110,8 @@ > int lsc_interrupt = 0; > int lsc_enabled; > > - if (sdev->state != DEV_PROBED) > + if (sdev->state != DEV_PROBED && > + !(PRIV(dev)->alarm_lock == 0 && sdev->state == DEV_ACTIVE)) > continue; > > rmv_interrupt = ETH(sdev)->data->dev_flags & > -- > 1.8.3.1 > -- Gaëtan Rivet 6WIND