Commit e74ae1fa authored by Guy Truzman's avatar Guy Truzman Committed by Saeed Mahameed

net/mlx5e: Add error flow when failing update_rx

Up until now, return value of update_rx was ignored. Therefore, flow
continues even if it fails. Add error flow in case of update_rx fails in
mlx5e_open_locked, mlx5i_open and mlx5i_pkey_open.
Signed-off-by: default avatarGuy Truzman <gtruzman@nvidia.com>
Reviewed-by: default avatarAya Levin <ayal@nvidia.com>
Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent 38438d39
...@@ -3069,7 +3069,10 @@ int mlx5e_open_locked(struct net_device *netdev) ...@@ -3069,7 +3069,10 @@ int mlx5e_open_locked(struct net_device *netdev)
if (err) if (err)
goto err_clear_state_opened_flag; goto err_clear_state_opened_flag;
priv->profile->update_rx(priv); err = priv->profile->update_rx(priv);
if (err)
goto err_close_channels;
mlx5e_selq_apply(&priv->selq); mlx5e_selq_apply(&priv->selq);
mlx5e_activate_priv_channels(priv); mlx5e_activate_priv_channels(priv);
mlx5e_apply_traps(priv, true); mlx5e_apply_traps(priv, true);
...@@ -3079,6 +3082,8 @@ int mlx5e_open_locked(struct net_device *netdev) ...@@ -3079,6 +3082,8 @@ int mlx5e_open_locked(struct net_device *netdev)
mlx5e_queue_update_stats(priv); mlx5e_queue_update_stats(priv);
return 0; return 0;
err_close_channels:
mlx5e_close_channels(&priv->channels);
err_clear_state_opened_flag: err_clear_state_opened_flag:
clear_bit(MLX5E_STATE_OPENED, &priv->state); clear_bit(MLX5E_STATE_OPENED, &priv->state);
mlx5e_selq_cancel(&priv->selq); mlx5e_selq_cancel(&priv->selq);
......
...@@ -561,12 +561,17 @@ static int mlx5i_open(struct net_device *netdev) ...@@ -561,12 +561,17 @@ static int mlx5i_open(struct net_device *netdev)
if (err) if (err)
goto err_remove_fs_underlay_qp; goto err_remove_fs_underlay_qp;
epriv->profile->update_rx(epriv); err = epriv->profile->update_rx(epriv);
if (err)
goto err_close_channels;
mlx5e_activate_priv_channels(epriv); mlx5e_activate_priv_channels(epriv);
mutex_unlock(&epriv->state_lock); mutex_unlock(&epriv->state_lock);
return 0; return 0;
err_close_channels:
mlx5e_close_channels(&epriv->channels);
err_remove_fs_underlay_qp: err_remove_fs_underlay_qp:
mlx5_fs_remove_rx_underlay_qpn(mdev, ipriv->qpn); mlx5_fs_remove_rx_underlay_qpn(mdev, ipriv->qpn);
err_reset_qp: err_reset_qp:
......
...@@ -221,12 +221,16 @@ static int mlx5i_pkey_open(struct net_device *netdev) ...@@ -221,12 +221,16 @@ static int mlx5i_pkey_open(struct net_device *netdev)
mlx5_core_warn(mdev, "opening child channels failed, %d\n", err); mlx5_core_warn(mdev, "opening child channels failed, %d\n", err);
goto err_clear_state_opened_flag; goto err_clear_state_opened_flag;
} }
epriv->profile->update_rx(epriv); err = epriv->profile->update_rx(epriv);
if (err)
goto err_close_channels;
mlx5e_activate_priv_channels(epriv); mlx5e_activate_priv_channels(epriv);
mutex_unlock(&epriv->state_lock); mutex_unlock(&epriv->state_lock);
return 0; return 0;
err_close_channels:
mlx5e_close_channels(&epriv->channels);
err_clear_state_opened_flag: err_clear_state_opened_flag:
mlx5e_destroy_tis(mdev, epriv->tisn[0][0]); mlx5e_destroy_tis(mdev, epriv->tisn[0][0]);
err_remove_rx_uderlay_qp: err_remove_rx_uderlay_qp:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment