net/mlx5e: Add error flow for ethtool -X command
Prior to this patch, ethtool -X fail but the user receives a success status. Try to roll-back when failing and return success status accordingly. Signed-off-by: Aya Levin <ayal@nvidia.com> Reviewed-by: Tariq Toukan <tariqt@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
c228dce262
commit
6c2509d446
@ -391,7 +391,7 @@ int mlx5e_rss_obtain_tirn(struct mlx5e_rss *rss,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mlx5e_rss_apply(struct mlx5e_rss *rss, u32 *rqns, unsigned int num_rqns)
|
||||
static int mlx5e_rss_apply(struct mlx5e_rss *rss, u32 *rqns, unsigned int num_rqns)
|
||||
{
|
||||
int err;
|
||||
|
||||
@ -399,6 +399,7 @@ static void mlx5e_rss_apply(struct mlx5e_rss *rss, u32 *rqns, unsigned int num_r
|
||||
if (err)
|
||||
mlx5e_rss_warn(rss->mdev, "Failed to redirect RQT %#x to channels: err = %d\n",
|
||||
mlx5e_rqt_get_rqtn(&rss->rqt), err);
|
||||
return err;
|
||||
}
|
||||
|
||||
void mlx5e_rss_enable(struct mlx5e_rss *rss, u32 *rqns, unsigned int num_rqns)
|
||||
@ -490,6 +491,14 @@ int mlx5e_rss_set_rxfh(struct mlx5e_rss *rss, const u32 *indir,
|
||||
{
|
||||
bool changed_indir = false;
|
||||
bool changed_hash = false;
|
||||
struct mlx5e_rss *old_rss;
|
||||
int err = 0;
|
||||
|
||||
old_rss = mlx5e_rss_alloc();
|
||||
if (!old_rss)
|
||||
return -ENOMEM;
|
||||
|
||||
*old_rss = *rss;
|
||||
|
||||
if (hfunc && *hfunc != rss->hash.hfunc) {
|
||||
switch (*hfunc) {
|
||||
@ -497,7 +506,8 @@ int mlx5e_rss_set_rxfh(struct mlx5e_rss *rss, const u32 *indir,
|
||||
case ETH_RSS_HASH_TOP:
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
changed_hash = true;
|
||||
changed_indir = true;
|
||||
@ -520,13 +530,20 @@ int mlx5e_rss_set_rxfh(struct mlx5e_rss *rss, const u32 *indir,
|
||||
rss->indir.table[i] = indir[i];
|
||||
}
|
||||
|
||||
if (changed_indir && rss->enabled)
|
||||
mlx5e_rss_apply(rss, rqns, num_rqns);
|
||||
if (changed_indir && rss->enabled) {
|
||||
err = mlx5e_rss_apply(rss, rqns, num_rqns);
|
||||
if (err) {
|
||||
*rss = *old_rss;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed_hash)
|
||||
mlx5e_rss_update_tirs(rss);
|
||||
|
||||
return 0;
|
||||
out:
|
||||
mlx5e_rss_free(old_rss);
|
||||
return err;
|
||||
}
|
||||
|
||||
struct mlx5e_rss_params_hash mlx5e_rss_get_hash(struct mlx5e_rss *rss)
|
||||
|
Loading…
x
Reference in New Issue
Block a user