mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
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;
|
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;
|
int err;
|
||||||
|
|
||||||
|
|
@ -399,6 +399,7 @@ static void mlx5e_rss_apply(struct mlx5e_rss *rss, u32 *rqns, unsigned int num_r
|
||||||
if (err)
|
if (err)
|
||||||
mlx5e_rss_warn(rss->mdev, "Failed to redirect RQT %#x to channels: err = %d\n",
|
mlx5e_rss_warn(rss->mdev, "Failed to redirect RQT %#x to channels: err = %d\n",
|
||||||
mlx5e_rqt_get_rqtn(&rss->rqt), err);
|
mlx5e_rqt_get_rqtn(&rss->rqt), err);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mlx5e_rss_enable(struct mlx5e_rss *rss, u32 *rqns, unsigned int num_rqns)
|
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_indir = false;
|
||||||
bool changed_hash = 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) {
|
if (hfunc && *hfunc != rss->hash.hfunc) {
|
||||||
switch (*hfunc) {
|
switch (*hfunc) {
|
||||||
|
|
@ -497,7 +506,8 @@ int mlx5e_rss_set_rxfh(struct mlx5e_rss *rss, const u32 *indir,
|
||||||
case ETH_RSS_HASH_TOP:
|
case ETH_RSS_HASH_TOP:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
err = -EINVAL;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
changed_hash = true;
|
changed_hash = true;
|
||||||
changed_indir = 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];
|
rss->indir.table[i] = indir[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed_indir && rss->enabled)
|
if (changed_indir && rss->enabled) {
|
||||||
mlx5e_rss_apply(rss, rqns, num_rqns);
|
err = mlx5e_rss_apply(rss, rqns, num_rqns);
|
||||||
|
if (err) {
|
||||||
|
*rss = *old_rss;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (changed_hash)
|
if (changed_hash)
|
||||||
mlx5e_rss_update_tirs(rss);
|
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)
|
struct mlx5e_rss_params_hash mlx5e_rss_get_hash(struct mlx5e_rss *rss)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user