Skip to content

Commit

Permalink
ionic: Add missing err handling for queue reconfig
Browse files Browse the repository at this point in the history
commit 52417a9 upstream.

ionic_start_queues_reconfig returns an error code if txrx_init fails.
Handle this error code in the relevant places.

This fixes a corner case where the device could get left in a detached
state if the CMB reconfig fails and the attempt to clean up the mess
also fails. Note that calling netif_device_attach when the netdev is
already attached does not lead to unexpected behavior.

Change goto name "errout" to "err_out" to maintain consistency across
goto statements.

Fixes: 40bc471 ("ionic: add tx/rx-push support with device Component Memory Buffers")
Fixes: 6f7d6f0 ("ionic: pull reset_queues into tx_timeout handler")
Signed-off-by: Nitya Sunkad <nitya.sunkad@amd.com>
Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
nsunkad authored and gregkh committed Aug 16, 2023
1 parent d753b5f commit 813aa99
Showing 1 changed file with 16 additions and 7 deletions.
23 changes: 16 additions & 7 deletions drivers/net/ethernet/pensando/ionic/ionic_lif.c
Expand Up @@ -1816,6 +1816,7 @@ static int ionic_change_mtu(struct net_device *netdev, int new_mtu)
static void ionic_tx_timeout_work(struct work_struct *ws)
{
struct ionic_lif *lif = container_of(ws, struct ionic_lif, tx_timeout_work);
int err;

if (test_bit(IONIC_LIF_F_FW_RESET, lif->state))
return;
Expand All @@ -1828,8 +1829,11 @@ static void ionic_tx_timeout_work(struct work_struct *ws)

mutex_lock(&lif->queue_lock);
ionic_stop_queues_reconfig(lif);
ionic_start_queues_reconfig(lif);
err = ionic_start_queues_reconfig(lif);
mutex_unlock(&lif->queue_lock);

if (err)
dev_err(lif->ionic->dev, "%s: Restarting queues failed\n", __func__);
}

static void ionic_tx_timeout(struct net_device *netdev, unsigned int txqueue)
Expand Down Expand Up @@ -2799,17 +2803,22 @@ static int ionic_cmb_reconfig(struct ionic_lif *lif,
if (err) {
dev_err(lif->ionic->dev,
"CMB restore failed: %d\n", err);
goto errout;
goto err_out;
}
}

ionic_start_queues_reconfig(lif);
} else {
/* This was detached in ionic_stop_queues_reconfig() */
netif_device_attach(lif->netdev);
err = ionic_start_queues_reconfig(lif);
if (err) {
dev_err(lif->ionic->dev,
"CMB reconfig failed: %d\n", err);
goto err_out;
}
}

errout:
err_out:
/* This was detached in ionic_stop_queues_reconfig() */
netif_device_attach(lif->netdev);

return err;
}

Expand Down

0 comments on commit 813aa99

Please sign in to comment.