summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIdo Schimmel <idosch@mellanox.com>2017-06-04 10:53:40 -0400
committerDavid S. Miller <davem@davemloft.net>2017-06-04 23:49:49 -0400
commitde5ed99e9777a487da4ad9c58e409ed26b640d9e (patch)
tree1746950039e57e11c44674b289d216f469b7b006
parentda0abcf93fe5353268b0b5b30396fb10dc32bef4 (diff)
mlxsw: spectrum_router: Align RIF index allocation with existing code
The way we usually allocate an index is by letting the allocation function return an error instead of an invalid index. Do the same for RIF index. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Reviewed-by: Petr Machata <petrm@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
index a4272c351e3a..20061058801e 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
@@ -2979,16 +2979,18 @@ mlxsw_sp_dev_rif_type(const struct mlxsw_sp *mlxsw_sp,
2979 return mlxsw_sp_fid_type_rif_type(mlxsw_sp, type); 2979 return mlxsw_sp_fid_type_rif_type(mlxsw_sp, type);
2980} 2980}
2981 2981
2982#define MLXSW_SP_INVALID_INDEX_RIF 0xffff 2982static int mlxsw_sp_rif_index_alloc(struct mlxsw_sp *mlxsw_sp, u16 *p_rif_index)
2983static int mlxsw_sp_avail_rif_get(struct mlxsw_sp *mlxsw_sp)
2984{ 2983{
2985 int i; 2984 int i;
2986 2985
2987 for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) 2986 for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) {
2988 if (!mlxsw_sp->router->rifs[i]) 2987 if (!mlxsw_sp->router->rifs[i]) {
2989 return i; 2988 *p_rif_index = i;
2989 return 0;
2990 }
2991 }
2990 2992
2991 return MLXSW_SP_INVALID_INDEX_RIF; 2993 return -ENOBUFS;
2992} 2994}
2993 2995
2994static struct mlxsw_sp_rif *mlxsw_sp_rif_alloc(size_t rif_size, u16 rif_index, 2996static struct mlxsw_sp_rif *mlxsw_sp_rif_alloc(size_t rif_size, u16 rif_index,
@@ -3048,11 +3050,9 @@ mlxsw_sp_rif_create(struct mlxsw_sp *mlxsw_sp,
3048 if (IS_ERR(vr)) 3050 if (IS_ERR(vr))
3049 return ERR_CAST(vr); 3051 return ERR_CAST(vr);
3050 3052
3051 rif_index = mlxsw_sp_avail_rif_get(mlxsw_sp); 3053 err = mlxsw_sp_rif_index_alloc(mlxsw_sp, &rif_index);
3052 if (rif_index == MLXSW_SP_INVALID_INDEX_RIF) { 3054 if (err)
3053 err = -ERANGE; 3055 goto err_rif_index_alloc;
3054 goto err_avail_rif_get;
3055 }
3056 3056
3057 rif = mlxsw_sp_rif_alloc(ops->rif_size, rif_index, vr->id, params->dev); 3057 rif = mlxsw_sp_rif_alloc(ops->rif_size, rif_index, vr->id, params->dev);
3058 if (!rif) { 3058 if (!rif) {
@@ -3095,7 +3095,7 @@ err_configure:
3095err_fid_get: 3095err_fid_get:
3096 kfree(rif); 3096 kfree(rif);
3097err_rif_alloc: 3097err_rif_alloc:
3098err_avail_rif_get: 3098err_rif_index_alloc:
3099 mlxsw_sp_vr_put(vr); 3099 mlxsw_sp_vr_put(vr);
3100 return ERR_PTR(err); 3100 return ERR_PTR(err);
3101} 3101}