Message ID | 20200504083602.19947-1-tariqt@mellanox.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net] net/mlx4_core: Fix use of ENOSPC around mlx4_counter_alloc() | expand |
From: Tariq Toukan <tariqt@mellanox.com> Date: Mon, 4 May 2020 11:36:02 +0300 > When ENOSPC is set the idx is still valid and gets set to the global > MLX4_SINK_COUNTER_INDEX. However gcc's static analysis cannot tell that > ENOSPC is impossible from mlx4_cmd_imm() and gives this warning: > > drivers/net/ethernet/mellanox/mlx4/main.c:2552:28: warning: 'idx' may be > used uninitialized in this function [-Wmaybe-uninitialized] > 2552 | priv->def_counter[port] = idx; > > Also, when ENOSPC is returned mlx4_allocate_default_counters should not > fail. > > Fixes: 6de5f7f6a1fa ("net/mlx4_core: Allocate default counter per port") > Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> > Signed-off-by: Tariq Toukan <tariqt@mellanox.com> Applied, thank you.
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c index 5716c3d2bb86..c72c4e1ea383 100644 --- a/drivers/net/ethernet/mellanox/mlx4/main.c +++ b/drivers/net/ethernet/mellanox/mlx4/main.c @@ -2550,6 +2550,7 @@ static int mlx4_allocate_default_counters(struct mlx4_dev *dev) if (!err || err == -ENOSPC) { priv->def_counter[port] = idx; + err = 0; } else if (err == -ENOENT) { err = 0; continue; @@ -2600,7 +2601,8 @@ int mlx4_counter_alloc(struct mlx4_dev *dev, u32 *idx, u8 usage) MLX4_CMD_TIME_CLASS_A, MLX4_CMD_WRAPPED); if (!err) *idx = get_param_l(&out_param); - + if (WARN_ON(err == -ENOSPC)) + err = -EINVAL; return err; } return __mlx4_counter_alloc(dev, idx);