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

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -177,6 +177,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 */
+20 −15
Original line number Diff line number Diff line
@@ -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";
@@ -1688,9 +1688,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;
@@ -1730,8 +1730,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);
}

/**
@@ -1740,9 +1741,9 @@ static int iavf_startup(struct iavf_adapter *adapter)
 *
 * 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;
@@ -1777,8 +1778,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);
}

/**
@@ -1788,9 +1790,9 @@ static int iavf_init_version_check(struct iavf_adapter *adapter)
 * 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;
@@ -1818,7 +1820,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);
@@ -1910,7 +1912,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:
@@ -1921,7 +1923,7 @@ static int iavf_init_get_resources(struct iavf_adapter *adapter)
	kfree(adapter->vf_res);
	adapter->vf_res = NULL;
err:
	return err;
	iavf_change_state(adapter, __IAVF_INIT_FAILED);
}

/**
@@ -3658,15 +3660,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: