mlxsw: spectrum_kvdl: Cosmetic kvdl allocator API change
authorArkadi Sharshevsky <arkadis@mellanox.com>
Sat, 25 Mar 2017 07:28:22 +0000 (08:28 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 26 Mar 2017 02:56:15 +0000 (19:56 -0700)
Currently the return allocated index and err value are multiplexed.
This patch changes the API to decouple the ret value from the allocated
index.

Signed-off-by: Arkadi Sharshevsky <arkadis@mellanox.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/mellanox/mlxsw/spectrum.h
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c
drivers/net/ethernet/mellanox/mlxsw/spectrum_kvdl.c
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c

index 3025b766fea11d277a39f3bd371488a63cbd706c..c245e4c3d9adc3a36a1a8451f3348eeaa68af5ce 100644 (file)
@@ -583,7 +583,8 @@ int mlxsw_sp_bridge_vrf_join(struct mlxsw_sp *mlxsw_sp,
 void mlxsw_sp_bridge_vrf_leave(struct mlxsw_sp *mlxsw_sp,
                               struct net_device *l3_dev);
 
-int mlxsw_sp_kvdl_alloc(struct mlxsw_sp *mlxsw_sp, unsigned int entry_count);
+int mlxsw_sp_kvdl_alloc(struct mlxsw_sp *mlxsw_sp, unsigned int entry_count,
+                       u32 *p_entry_index);
 void mlxsw_sp_kvdl_free(struct mlxsw_sp *mlxsw_sp, int entry_index);
 
 struct mlxsw_afk *mlxsw_sp_acl_afk(struct mlxsw_sp_acl *acl);
index 4d6920d4502609cbc9683ee14051879cd2beb43b..d3b791f69f5bb8b0332a9321cc258a7d7573d3d3 100644 (file)
@@ -595,7 +595,6 @@ static int mlxsw_sp_act_kvdl_set_add(void *priv, u32 *p_kvdl_index,
        struct mlxsw_sp *mlxsw_sp = priv;
        char pefa_pl[MLXSW_REG_PEFA_LEN];
        u32 kvdl_index;
-       int ret;
        int err;
 
        /* The first action set of a TCAM entry is stored directly in TCAM,
@@ -604,10 +603,10 @@ static int mlxsw_sp_act_kvdl_set_add(void *priv, u32 *p_kvdl_index,
        if (is_first)
                return 0;
 
-       ret = mlxsw_sp_kvdl_alloc(mlxsw_sp, MLXSW_SP_KDVL_ACT_EXT_SIZE);
-       if (ret < 0)
-               return ret;
-       kvdl_index = ret;
+       err = mlxsw_sp_kvdl_alloc(mlxsw_sp, MLXSW_SP_KDVL_ACT_EXT_SIZE,
+                                 &kvdl_index);
+       if (err)
+               return err;
        mlxsw_reg_pefa_pack(pefa_pl, kvdl_index, enc_actions);
        err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(pefa), pefa_pl);
        if (err)
@@ -636,13 +635,11 @@ static int mlxsw_sp_act_kvdl_fwd_entry_add(void *priv, u32 *p_kvdl_index,
        struct mlxsw_sp *mlxsw_sp = priv;
        char ppbs_pl[MLXSW_REG_PPBS_LEN];
        u32 kvdl_index;
-       int ret;
        int err;
 
-       ret = mlxsw_sp_kvdl_alloc(mlxsw_sp, 1);
-       if (ret < 0)
-               return ret;
-       kvdl_index = ret;
+       err = mlxsw_sp_kvdl_alloc(mlxsw_sp, 1, &kvdl_index);
+       if (err)
+               return err;
        mlxsw_reg_ppbs_pack(ppbs_pl, kvdl_index, local_port);
        err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ppbs), ppbs_pl);
        if (err)
index ac321e8e5c1ac4cb85ce90b53b7907cddd3e859b..26c26cd30c3d4038948fcd79028a3b853d3651c7 100644 (file)
@@ -45,7 +45,8 @@
        (MLXSW_SP_KVD_LINEAR_SIZE - MLXSW_SP_KVDL_CHUNKS_BASE)
 #define MLXSW_SP_CHUNK_MAX 32
 
-int mlxsw_sp_kvdl_alloc(struct mlxsw_sp *mlxsw_sp, unsigned int entry_count)
+int mlxsw_sp_kvdl_alloc(struct mlxsw_sp *mlxsw_sp, unsigned int entry_count,
+                       u32 *p_entry_index)
 {
        int entry_index;
        int size;
@@ -72,7 +73,8 @@ int mlxsw_sp_kvdl_alloc(struct mlxsw_sp *mlxsw_sp, unsigned int entry_count)
 
                for (i = 0; i < type_entries; i++)
                        set_bit(entry_index + i, mlxsw_sp->kvdl.usage);
-               return entry_index;
+               *p_entry_index = entry_index;
+               return 0;
        }
        return -ENOBUFS;
 }
index 8dbed1d4ef2fbce6094a8e176b4681b0e4d820ef..905d459970589dd2df527a83a0946420cbca6175 100644 (file)
@@ -1274,7 +1274,6 @@ mlxsw_sp_nexthop_group_refresh(struct mlxsw_sp *mlxsw_sp,
        bool old_adj_index_valid;
        u32 old_adj_index;
        u16 old_ecmp_size;
-       int ret;
        int i;
        int err;
 
@@ -1312,15 +1311,14 @@ mlxsw_sp_nexthop_group_refresh(struct mlxsw_sp *mlxsw_sp,
                 */
                goto set_trap;
 
-       ret = mlxsw_sp_kvdl_alloc(mlxsw_sp, ecmp_size);
-       if (ret < 0) {
+       err = mlxsw_sp_kvdl_alloc(mlxsw_sp, ecmp_size, &adj_index);
+       if (err) {
                /* We ran out of KVD linear space, just set the
                 * trap and let everything flow through kernel.
                 */
                dev_warn(mlxsw_sp->bus_info->dev, "Failed to allocate KVD linear area for nexthop group.\n");
                goto set_trap;
        }
-       adj_index = ret;
        old_adj_index_valid = nh_grp->adj_index_valid;
        old_adj_index = nh_grp->adj_index;
        old_ecmp_size = nh_grp->ecmp_size;