Skip to content

Commit

Permalink
net: enetc: allow the enetc_reconfigure() callback to fail
Browse files Browse the repository at this point in the history
enetc_reconfigure() was modified in commit c33bfaf ("net: enetc:
set up XDP program under enetc_reconfigure()") to take an optional
callback that runs while the netdev is down, but this callback currently
cannot fail.

Code up the error handling so that the interface is restarted with the
old resources if the callback fails.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Vladimir Oltean authored and Jakub Kicinski committed Feb 4, 2023
1 parent 1c81a9b commit 46a0ecf
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions drivers/net/ethernet/freescale/enetc/enetc.c
Original file line number Diff line number Diff line change
Expand Up @@ -2574,8 +2574,11 @@ static int enetc_reconfigure(struct enetc_ndev_priv *priv, bool extended,
* without reconfiguration.
*/
if (!netif_running(priv->ndev)) {
if (cb)
cb(priv, ctx);
if (cb) {
err = cb(priv, ctx);
if (err)
return err;
}

return 0;
}
Expand All @@ -2596,8 +2599,11 @@ static int enetc_reconfigure(struct enetc_ndev_priv *priv, bool extended,
enetc_free_rxtx_rings(priv);

/* Interface is down, run optional callback now */
if (cb)
cb(priv, ctx);
if (cb) {
err = cb(priv, ctx);
if (err)
goto out_restart;
}

enetc_assign_tx_resources(priv, tx_res);
enetc_assign_rx_resources(priv, rx_res);
Expand All @@ -2606,6 +2612,10 @@ static int enetc_reconfigure(struct enetc_ndev_priv *priv, bool extended,

return 0;

out_restart:
enetc_setup_bdrs(priv, extended);
enetc_start(priv->ndev);
enetc_free_rx_resources(rx_res, priv->num_rx_rings);
out_free_tx_res:
enetc_free_tx_resources(tx_res, priv->num_tx_rings);
out:
Expand Down

0 comments on commit 46a0ecf

Please sign in to comment.