From 005870b4d3a1f6ac2e0f492b57d502e09f1565f3 Mon Sep 17 00:00:00 2001 From: Andrew Rybchenko Date: Fri, 31 Mar 2017 11:22:23 +0100 Subject: [PATCH] net/sfc: fix device reconfigure 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") Cc: stable@dpdk.org Signed-off-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- 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(-) diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index 22141c6037..4e241b2234 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -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); diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index cee1eb8492..fad0ce0457 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -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 | diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 7edb17d7e2..4f7b640fac 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -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); -- 2.20.1