Skip to content

Commit

Permalink
ionic: pull out common bits from fw_up
Browse files Browse the repository at this point in the history
Pull out some code from ionic_lif_handle_fw_up() that can be
used in the coming FLR recovery patch.

Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
emusln authored and davem330 committed Jul 24, 2023
1 parent 0de38d9 commit 30d2e07
Showing 1 changed file with 42 additions and 22 deletions.
64 changes: 42 additions & 22 deletions drivers/net/ethernet/pensando/ionic/ionic_lif.c
Original file line number Diff line number Diff line change
Expand Up @@ -3266,27 +3266,11 @@ static void ionic_lif_handle_fw_down(struct ionic_lif *lif)
dev_info(ionic->dev, "FW Down: LIFs stopped\n");
}

static void ionic_lif_handle_fw_up(struct ionic_lif *lif)
static int ionic_restart_lif(struct ionic_lif *lif)
{
struct ionic *ionic = lif->ionic;
int err;

if (!test_bit(IONIC_LIF_F_FW_RESET, lif->state))
return;

dev_info(ionic->dev, "FW Up: restarting LIFs\n");

ionic_init_devinfo(ionic);
err = ionic_identify(ionic);
if (err)
goto err_out;
err = ionic_port_identify(ionic);
if (err)
goto err_out;
err = ionic_port_init(ionic);
if (err)
goto err_out;

mutex_lock(&lif->queue_lock);

if (test_and_clear_bit(IONIC_LIF_F_BROKEN, lif->state))
Expand Down Expand Up @@ -3322,12 +3306,8 @@ static void ionic_lif_handle_fw_up(struct ionic_lif *lif)
clear_bit(IONIC_LIF_F_FW_RESET, lif->state);
ionic_link_status_check_request(lif, CAN_SLEEP);
netif_device_attach(lif->netdev);
dev_info(ionic->dev, "FW Up: LIFs restarted\n");

/* restore the hardware timestamping queues */
ionic_lif_hwstamp_replay(lif);

return;
return 0;

err_txrx_free:
ionic_txrx_free(lif);
Expand All @@ -3337,6 +3317,46 @@ static void ionic_lif_handle_fw_up(struct ionic_lif *lif)
ionic_qcqs_free(lif);
err_unlock:
mutex_unlock(&lif->queue_lock);

return err;
}

static void ionic_lif_handle_fw_up(struct ionic_lif *lif)
{
struct ionic *ionic = lif->ionic;
int err;

if (!test_bit(IONIC_LIF_F_FW_RESET, lif->state))
return;

dev_info(ionic->dev, "FW Up: restarting LIFs\n");

/* This is a little different from what happens at
* probe time because the LIF already exists so we
* just need to reanimate it.
*/
ionic_init_devinfo(ionic);
err = ionic_identify(ionic);
if (err)
goto err_out;
err = ionic_port_identify(ionic);
if (err)
goto err_out;
err = ionic_port_init(ionic);
if (err)
goto err_out;

err = ionic_restart_lif(lif);
if (err)
goto err_out;

dev_info(ionic->dev, "FW Up: LIFs restarted\n");

/* restore the hardware timestamping queues */
ionic_lif_hwstamp_replay(lif);

return;

err_out:
dev_err(ionic->dev, "FW Up: LIFs restart failed - err %d\n", err);
}
Expand Down

0 comments on commit 30d2e07

Please sign in to comment.