[dpdk-dev,13/13] net/sfc: fix device reconfigure
Checks
Commit Message
Device reconfigure should be done without close which releases
all transmit and receive queue. ethdev API assumes that previously
setup queues (minimum from configured before and now) are kept
across device reconfigure.
Fixes: aaa3f5f0f79d ("net/sfc: add configure and close stubs")
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@solarflare.com>
---
drivers/net/sfc/sfc.c | 3 ++-
drivers/net/sfc/sfc.h | 28 ++++++++++++++--------------
drivers/net/sfc/sfc_ethdev.c | 2 --
3 files changed, 16 insertions(+), 17 deletions(-)
@@ -398,7 +398,8 @@ sfc_configure(struct sfc_adapter *sa)
SFC_ASSERT(sfc_adapter_is_locked(sa));
- SFC_ASSERT(sa->state == SFC_ADAPTER_INITIALIZED);
+ SFC_ASSERT(sa->state == SFC_ADAPTER_INITIALIZED ||
+ sa->state == SFC_ADAPTER_CONFIGURED);
sa->state = SFC_ADAPTER_CONFIGURING;
rc = sfc_check_conf(sa);
@@ -64,20 +64,20 @@ extern "C" {
* V |
* +---------------+------------+
* | INITIALIZED |
- * +---------------+<-----------+
- * |.dev_configure |
- * V |
- * +---------------+ |
- * | CONFIGURING |------------^
- * +---------------+ failed |
- * |success |
- * | +---------------+
- * | | CLOSING |
- * | +---------------+
- * | ^
- * V |.dev_close
- * +---------------+------------+
- * | CONFIGURED |
+ * +---------------+<-----------<---------------+
+ * |.dev_configure | |
+ * V |failed |
+ * +---------------+------------+ |
+ * | CONFIGURING | |
+ * +---------------+----+ |
+ * |success | |
+ * | | +---------------+
+ * | | | CLOSING |
+ * | | +---------------+
+ * | | ^
+ * V |.dev_configure |
+ * +---------------+----+ |.dev_close
+ * | CONFIGURED |----------------------------+
* +---------------+<-----------+
* |.dev_start |
* V |
@@ -192,8 +192,6 @@ sfc_dev_configure(struct rte_eth_dev *dev)
sfc_adapter_lock(sa);
switch (sa->state) {
case SFC_ADAPTER_CONFIGURED:
- sfc_close(sa);
- SFC_ASSERT(sa->state == SFC_ADAPTER_INITIALIZED);
/* FALLTHROUGH */
case SFC_ADAPTER_INITIALIZED:
rc = sfc_configure(sa);