[dpdk-dev] [PATCH] net/failsafe: fix reconfiguration

Matan Azrad matan at mellanox.com
Sun Feb 11 18:27:34 CET 2018


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: stable at dpdk.org

Signed-off-by: Matan Azrad <matan at mellanox.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



More information about the dev mailing list