Commit 59756ad6 authored by Mateusz Palczewski's avatar Mateusz Palczewski Committed by Tony Nguyen

iavf: Add __IAVF_INIT_FAILED state

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: default avatarJakub Pawlak <jakub.pawlak@intel.com>
Signed-off-by: default avatarJan Sokolowski <jan.sokolowski@intel.com>
Signed-off-by: default avatarMateusz Palczewski <mateusz.palczewski@intel.com>
Tested-by: default avatarKonrad Jankowski <konrad0.jankowski@intel.com>
Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
parent 45eebd62
...@@ -177,6 +177,7 @@ enum iavf_state_t { ...@@ -177,6 +177,7 @@ enum iavf_state_t {
__IAVF_INIT_VERSION_CHECK, /* aq msg sent, awaiting reply */ __IAVF_INIT_VERSION_CHECK, /* aq msg sent, awaiting reply */
__IAVF_INIT_GET_RESOURCES, /* aq msg sent, awaiting reply */ __IAVF_INIT_GET_RESOURCES, /* aq msg sent, awaiting reply */
__IAVF_INIT_SW, /* got resources, setting up structs */ __IAVF_INIT_SW, /* got resources, setting up structs */
__IAVF_INIT_FAILED, /* init failed, restarting procedure */
__IAVF_RESETTING, /* in reset */ __IAVF_RESETTING, /* in reset */
__IAVF_COMM_FAILED, /* communication with PF failed */ __IAVF_COMM_FAILED, /* communication with PF failed */
/* Below here, watchdog is running */ /* Below here, watchdog is running */
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
static int iavf_setup_all_tx_resources(struct iavf_adapter *adapter); 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_setup_all_rx_resources(struct iavf_adapter *adapter);
static int iavf_close(struct net_device *netdev); 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); static int iavf_check_reset_complete(struct iavf_hw *hw);
char iavf_driver_name[] = "iavf"; char iavf_driver_name[] = "iavf";
...@@ -1688,9 +1688,9 @@ static int iavf_process_aq_command(struct iavf_adapter *adapter) ...@@ -1688,9 +1688,9 @@ static int iavf_process_aq_command(struct iavf_adapter *adapter)
* *
* Function process __IAVF_STARTUP driver state. * Function process __IAVF_STARTUP driver state.
* When success the state is changed to __IAVF_INIT_VERSION_CHECK * 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 pci_dev *pdev = adapter->pdev;
struct iavf_hw *hw = &adapter->hw; struct iavf_hw *hw = &adapter->hw;
...@@ -1730,8 +1730,9 @@ static int iavf_startup(struct iavf_adapter *adapter) ...@@ -1730,8 +1730,9 @@ static int iavf_startup(struct iavf_adapter *adapter)
goto err; goto err;
} }
iavf_change_state(adapter, __IAVF_INIT_VERSION_CHECK); iavf_change_state(adapter, __IAVF_INIT_VERSION_CHECK);
return;
err: err:
return err; iavf_change_state(adapter, __IAVF_INIT_FAILED);
} }
/** /**
...@@ -1740,9 +1741,9 @@ static int iavf_startup(struct iavf_adapter *adapter) ...@@ -1740,9 +1741,9 @@ static int iavf_startup(struct iavf_adapter *adapter)
* *
* Function process __IAVF_INIT_VERSION_CHECK driver state. * Function process __IAVF_INIT_VERSION_CHECK driver state.
* When success the state is changed to __IAVF_INIT_GET_RESOURCES * 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 pci_dev *pdev = adapter->pdev;
struct iavf_hw *hw = &adapter->hw; struct iavf_hw *hw = &adapter->hw;
...@@ -1777,8 +1778,9 @@ static int iavf_init_version_check(struct iavf_adapter *adapter) ...@@ -1777,8 +1778,9 @@ static int iavf_init_version_check(struct iavf_adapter *adapter)
goto err; goto err;
} }
iavf_change_state(adapter, __IAVF_INIT_GET_RESOURCES); iavf_change_state(adapter, __IAVF_INIT_GET_RESOURCES);
return;
err: err:
return err; iavf_change_state(adapter, __IAVF_INIT_FAILED);
} }
/** /**
...@@ -1788,9 +1790,9 @@ static int iavf_init_version_check(struct iavf_adapter *adapter) ...@@ -1788,9 +1790,9 @@ static int iavf_init_version_check(struct iavf_adapter *adapter)
* Function process __IAVF_INIT_GET_RESOURCES driver state and * Function process __IAVF_INIT_GET_RESOURCES driver state and
* finishes driver initialization procedure. * finishes driver initialization procedure.
* When success the state is changed to __IAVF_DOWN * 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 net_device *netdev = adapter->netdev;
struct pci_dev *pdev = adapter->pdev; struct pci_dev *pdev = adapter->pdev;
...@@ -1818,7 +1820,7 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter) ...@@ -1818,7 +1820,7 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter)
*/ */
iavf_shutdown_adminq(hw); iavf_shutdown_adminq(hw);
dev_err(&pdev->dev, "Unable to get VF config due to PF error condition, not retrying\n"); dev_err(&pdev->dev, "Unable to get VF config due to PF error condition, not retrying\n");
return 0; return;
} }
if (err) { if (err) {
dev_err(&pdev->dev, "Unable to get VF config (%d)\n", err); dev_err(&pdev->dev, "Unable to get VF config (%d)\n", err);
...@@ -1910,7 +1912,7 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter) ...@@ -1910,7 +1912,7 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter)
else else
iavf_init_rss(adapter); iavf_init_rss(adapter);
return err; return;
err_mem: err_mem:
iavf_free_rss(adapter); iavf_free_rss(adapter);
err_register: err_register:
...@@ -1921,7 +1923,7 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter) ...@@ -1921,7 +1923,7 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter)
kfree(adapter->vf_res); kfree(adapter->vf_res);
adapter->vf_res = NULL; adapter->vf_res = NULL;
err: err:
return err; iavf_change_state(adapter, __IAVF_INIT_FAILED);
} }
/** /**
...@@ -3658,15 +3660,18 @@ static void iavf_init_task(struct work_struct *work) ...@@ -3658,15 +3660,18 @@ static void iavf_init_task(struct work_struct *work)
} }
switch (adapter->state) { switch (adapter->state) {
case __IAVF_STARTUP: case __IAVF_STARTUP:
if (iavf_startup(adapter) < 0) iavf_startup(adapter);
if (adapter->state == __IAVF_INIT_FAILED)
goto init_failed; goto init_failed;
break; break;
case __IAVF_INIT_VERSION_CHECK: 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; goto init_failed;
break; break;
case __IAVF_INIT_GET_RESOURCES: 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 init_failed;
goto out; goto out;
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment