Message ID | 20210819084749.2553-1-mateusz.palczewski@intel.com |
---|---|
State | Accepted |
Delegated to: | Anthony Nguyen |
Headers | show |
Series | iavf: Fix init and watchdog state machines | expand |
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of > Mateusz Palczewski > Sent: czwartek, 19 sierpnia 2021 10:48 > To: intel-wired-lan@lists.osuosl.org > Cc: Palczewski, Mateusz <mateusz.palczewski@intel.com>; Pawlak, Jakub > <jakub.pawlak@intel.com> > Subject: [Intel-wired-lan] [PATCH net-next v6 2/3] 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: Jakub Pawlak <jakub.pawlak@intel.com> > Signed-off-by: Jan Sokolowski <jan.sokolowski@intel.com> > Signed-off-by: Mateusz Palczewski <mateusz.palczewski@intel.com> > --- > v6: Fixed that patch so that it applies on next-queue tree > v5: Fixed the patch so that it applies on net-next tree > v4: Removed unnecessary line > v3: Added new file to patch series > v2: Splitted the patch into 2 to make them smaller > --- > drivers/net/ethernet/intel/iavf/iavf.h | 1 + > drivers/net/ethernet/intel/iavf/iavf_main.c | 35 ++++++++++++--------- > 2 files changed, 21 insertions(+), 15 deletions(-) > > diff --git a/drivers/net/ethernet/intel/iavf/iavf.h > b/drivers/net/ethernet/intel/iavf/iavf.h > index 4f937cc..d7f8026 100644 > --- a/drivers/net/ethernet/intel/iavf/iavf.h > +++ b/drivers/net/ethernet/intel/iavf/iavf.h > @@ -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 */ > diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c > b/drivers/net/ethernet/intel/iavf/iavf_main.c > index 740e68b..ce8b002 100644 > --- a/drivers/net/ethernet/intel/iavf/iavf_main.c > +++ b/drivers/net/ethernet/intel/iavf/iavf_main.c > @@ -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"; > @@ -1709,9 +1709,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; > @@ -1751,8 +1751,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); > } > > /** > @@ -1761,9 +1762,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; > @@ -1798,8 +1799,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); > } > > /** > @@ -1809,9 +1811,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; > @@ -1839,7 +1841,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); > @@ -1931,7 +1933,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: > @@ -1942,7 +1944,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); > } > > /** > @@ -3689,15 +3691,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: > -- > 2.17.1 > Tested-by: Konrad Jankowski <konrad0.jankowski@intel.com>
diff --git a/drivers/net/ethernet/intel/iavf/iavf.h b/drivers/net/ethernet/intel/iavf/iavf.h index 4f937cc..d7f8026 100644 --- a/drivers/net/ethernet/intel/iavf/iavf.h +++ b/drivers/net/ethernet/intel/iavf/iavf.h @@ -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 */ diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c index 740e68b..ce8b002 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_main.c +++ b/drivers/net/ethernet/intel/iavf/iavf_main.c @@ -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"; @@ -1709,9 +1709,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; @@ -1751,8 +1751,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); } /** @@ -1761,9 +1762,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; @@ -1798,8 +1799,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); } /** @@ -1809,9 +1811,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; @@ -1839,7 +1841,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); @@ -1931,7 +1933,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: @@ -1942,7 +1944,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); } /** @@ -3689,15 +3691,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: