iavf: Add __IAVF_INIT_FAILED state
authorMateusz Palczewski <mateusz.palczewski@intel.com>
Thu, 19 Aug 2021 08:47:49 +0000 (08:47 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 8 Mar 2022 18:12:51 +0000 (19:12 +0100)
[ Upstream commit 59756ad6948be91d66867ce458083b820c59b8ba ]

This commit adds a new state, __IAVF_INIT_FAILED to the state machine.
From now on initialization functions report errors not by returning an
error value, but by changing the state to indicate that something went
wrong.

Signed-off-by: Jakub Pawlak <jakub.pawlak@intel.com>
Signed-off-by: Jan Sokolowski <jan.sokolowski@intel.com>
Signed-off-by: Mateusz Palczewski <mateusz.palczewski@intel.com>
Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/intel/iavf/iavf.h
drivers/net/ethernet/intel/iavf/iavf_main.c

index 20d6c157bcb238484de8fea39b1674cd8b9a9e0d..9eb86c86f454fd19bc9c2d46f9463d3a0813c489 100644 (file)
@@ -178,6 +178,7 @@ enum iavf_state_t {
        __IAVF_INIT_VERSION_CHECK,      /* aq msg sent, awaiting reply */
        __IAVF_INIT_GET_RESOURCES,      /* aq msg sent, awaiting reply */
        __IAVF_INIT_SW,         /* got resources, setting up structs */
+       __IAVF_INIT_FAILED,     /* init failed, restarting procedure */
        __IAVF_RESETTING,               /* in reset */
        __IAVF_COMM_FAILED,             /* communication with PF failed */
        /* Below here, watchdog is running */
index 3e60eb9045c3dfd2b9dd86d3b11029e99b3d08fd..181d17945bbe003e46738eef516b3f2b7ecbbc9d 100644 (file)
@@ -14,7 +14,7 @@
 static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter);
 static int iavf_setup_all_rx_resources(struct iavf_adapter *adapter);
 static int iavf_close(struct net_device *netdev);
-static int iavf_init_get_resources(struct iavf_adapter *adapter);
+static void iavf_init_get_resources(struct iavf_adapter *adapter);
 static int iavf_check_reset_complete(struct iavf_hw *hw);
 
 char iavf_driver_name[] = "iavf";
@@ -1722,9 +1722,9 @@ static int iavf_process_aq_command(struct iavf_adapter *adapter)
  *
  * Function process __IAVF_STARTUP driver state.
  * When success the state is changed to __IAVF_INIT_VERSION_CHECK
- * when fails it returns -EAGAIN
+ * when fails the state is changed to __IAVF_INIT_FAILED
  **/
-static int iavf_startup(struct iavf_adapter *adapter)
+static void iavf_startup(struct iavf_adapter *adapter)
 {
        struct pci_dev *pdev = adapter->pdev;
        struct iavf_hw *hw = &adapter->hw;
@@ -1764,8 +1764,9 @@ static int iavf_startup(struct iavf_adapter *adapter)
                goto err;
        }
        iavf_change_state(adapter, __IAVF_INIT_VERSION_CHECK);
+       return;
 err:
-       return err;
+       iavf_change_state(adapter, __IAVF_INIT_FAILED);
 }
 
 /**
@@ -1774,9 +1775,9 @@ err:
  *
  * Function process __IAVF_INIT_VERSION_CHECK driver state.
  * When success the state is changed to __IAVF_INIT_GET_RESOURCES
- * when fails it returns -EAGAIN
+ * when fails the state is changed to __IAVF_INIT_FAILED
  **/
-static int iavf_init_version_check(struct iavf_adapter *adapter)
+static void iavf_init_version_check(struct iavf_adapter *adapter)
 {
        struct pci_dev *pdev = adapter->pdev;
        struct iavf_hw *hw = &adapter->hw;
@@ -1811,8 +1812,9 @@ static int iavf_init_version_check(struct iavf_adapter *adapter)
                goto err;
        }
        iavf_change_state(adapter, __IAVF_INIT_GET_RESOURCES);
+       return;
 err:
-       return err;
+       iavf_change_state(adapter, __IAVF_INIT_FAILED);
 }
 
 /**
@@ -1822,9 +1824,9 @@ err:
  * Function process __IAVF_INIT_GET_RESOURCES driver state and
  * finishes driver initialization procedure.
  * When success the state is changed to __IAVF_DOWN
- * when fails it returns -EAGAIN
+ * when fails the state is changed to __IAVF_INIT_FAILED
  **/
-static int iavf_init_get_resources(struct iavf_adapter *adapter)
+static void iavf_init_get_resources(struct iavf_adapter *adapter)
 {
        struct net_device *netdev = adapter->netdev;
        struct pci_dev *pdev = adapter->pdev;
@@ -1852,7 +1854,7 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter)
                 */
                iavf_shutdown_adminq(hw);
                dev_err(&pdev->dev, "Unable to get VF config due to PF error condition, not retrying\n");
-               return 0;
+               return;
        }
        if (err) {
                dev_err(&pdev->dev, "Unable to get VF config (%d)\n", err);
@@ -1944,7 +1946,7 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter)
        else
                iavf_init_rss(adapter);
 
-       return err;
+       return;
 err_mem:
        iavf_free_rss(adapter);
 err_register:
@@ -1955,7 +1957,7 @@ err_alloc:
        kfree(adapter->vf_res);
        adapter->vf_res = NULL;
 err:
-       return err;
+       iavf_change_state(adapter, __IAVF_INIT_FAILED);
 }
 
 /**
@@ -3704,15 +3706,18 @@ static void iavf_init_task(struct work_struct *work)
        }
        switch (adapter->state) {
        case __IAVF_STARTUP:
-               if (iavf_startup(adapter) < 0)
+               iavf_startup(adapter);
+               if (adapter->state == __IAVF_INIT_FAILED)
                        goto init_failed;
                break;
        case __IAVF_INIT_VERSION_CHECK:
-               if (iavf_init_version_check(adapter) < 0)
+               iavf_init_version_check(adapter);
+               if (adapter->state == __IAVF_INIT_FAILED)
                        goto init_failed;
                break;
        case __IAVF_INIT_GET_RESOURCES:
-               if (iavf_init_get_resources(adapter) < 0)
+               iavf_init_get_resources(adapter);
+               if (adapter->state == __IAVF_INIT_FAILED)
                        goto init_failed;
                goto out;
        default: