]> git.droids-corp.org - dpdk.git/commitdiff
net/failsafe: fix Tx sub device deactivating
authorMatan Azrad <matan@mellanox.com>
Wed, 16 Aug 2017 14:19:28 +0000 (17:19 +0300)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 6 Oct 2017 00:49:47 +0000 (02:49 +0200)
The corrupted code couldn't recognize that all sub devices
were not ready for Tx traffic when failsafe PMD was trying
to switch device because of an unreachable condition using.

Hence, the current Tx sub device variable was not updated
correctly.

The fix removed the unreachable branch and added new one
in the right place respecting the original intent.

Fixes: ebea83f899d8 ("net/failsafe: add plug-in support")
Fixes: 598fb8aec6f6 ("net/failsafe: support device removal")
Cc: stable@dpdk.org
Signed-off-by: Matan Azrad <matan@mellanox.com>
Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
drivers/net/failsafe/failsafe_private.h

index 0361cf434698d622348edc3e4c86a24b250ed576..ef646dbe469dfd5da86723fc10b5b9b32cc52c02 100644 (file)
@@ -334,7 +334,7 @@ fs_switch_dev(struct rte_eth_dev *dev,
        } else if ((txd && txd->state < req_state) ||
                   txd == NULL ||
                   txd == banned) {
-               struct sub_device *sdev;
+               struct sub_device *sdev = NULL;
                uint8_t i;
 
                /* Using acceptable device */
@@ -346,9 +346,10 @@ fs_switch_dev(struct rte_eth_dev *dev,
                        PRIV(dev)->subs_tx = i;
                        break;
                }
-       } else if (txd && txd->state < req_state) {
-               DEBUG("No device ready, deactivating tx_dev");
-               PRIV(dev)->subs_tx = PRIV(dev)->subs_tail;
+               if (i >= PRIV(dev)->subs_tail || sdev == NULL) {
+                       DEBUG("No device ready, deactivating tx_dev");
+                       PRIV(dev)->subs_tx = PRIV(dev)->subs_tail;
+               }
        } else {
                return;
        }