iavf: Add __IAVF_INIT_FAILED state
[ Upstream commit 59756ad694
]
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>
This commit is contained in:
Родитель
7e2d102501
Коммит
57d2f0db2e
|
@ -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 */
|
||||
|
|
|
@ -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:
|
||||
|
|
Загрузка…
Ссылка в новой задаче