From: Jiri Pirko Date: Thu, 28 Feb 2019 06:59:19 +0000 (+0000) Subject: mlxsw: spectrum_acl: Push rehash start/end code into separate functions X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=1667f7667d85e184bc731884bf9588bed89cca80;p=openwrt%2Fstaging%2Fblogic.git mlxsw: spectrum_acl: Push rehash start/end code into separate functions In preparations for interrupt/continue of rehash work, put the code at the beginning/end of the rehash function into separate functions. Signed-off-by: Jiri Pirko Signed-off-by: Ido Schimmel Signed-off-by: David S. Miller --- diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c index ae1101c17f2c..fa204003bc84 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c @@ -1334,26 +1334,50 @@ out: } static int -mlxsw_sp_acl_tcam_vregion_rehash(struct mlxsw_sp *mlxsw_sp, - struct mlxsw_sp_acl_tcam_vregion *vregion) +mlxsw_sp_acl_tcam_vregion_rehash_start(struct mlxsw_sp *mlxsw_sp, + struct mlxsw_sp_acl_tcam_vregion *vregion, + struct mlxsw_sp_acl_tcam_rehash_ctx *ctx) { const struct mlxsw_sp_acl_tcam_ops *ops = mlxsw_sp->acl_tcam_ops; - struct mlxsw_sp_acl_tcam_rehash_ctx *ctx = &vregion->rehash.ctx; void *hints_priv; - int err; trace_mlxsw_sp_acl_tcam_vregion_rehash(mlxsw_sp, vregion); if (vregion->failed_rollback) return -EBUSY; hints_priv = ops->region_rehash_hints_get(vregion->region->priv); - if (IS_ERR(hints_priv)) { - err = PTR_ERR(hints_priv); + if (IS_ERR(hints_priv)) + return PTR_ERR(hints_priv); + + ctx->hints_priv = hints_priv; + + return 0; +} + +static void +mlxsw_sp_acl_tcam_vregion_rehash_end(struct mlxsw_sp *mlxsw_sp, + struct mlxsw_sp_acl_tcam_vregion *vregion, + struct mlxsw_sp_acl_tcam_rehash_ctx *ctx) +{ + const struct mlxsw_sp_acl_tcam_ops *ops = mlxsw_sp->acl_tcam_ops; + + ops->region_rehash_hints_put(ctx->hints_priv); + ctx->hints_priv = NULL; +} + +static int +mlxsw_sp_acl_tcam_vregion_rehash(struct mlxsw_sp *mlxsw_sp, + struct mlxsw_sp_acl_tcam_vregion *vregion) +{ + struct mlxsw_sp_acl_tcam_rehash_ctx *ctx = &vregion->rehash.ctx; + int err; + + err = mlxsw_sp_acl_tcam_vregion_rehash_start(mlxsw_sp, vregion, ctx); + if (err) { if (err != -EAGAIN) dev_err(mlxsw_sp->bus_info->dev, "Failed get rehash hints\n"); return err; } - ctx->hints_priv = hints_priv; err = mlxsw_sp_acl_tcam_vregion_migrate(mlxsw_sp, vregion, ctx); if (err) { @@ -1365,8 +1389,7 @@ mlxsw_sp_acl_tcam_vregion_rehash(struct mlxsw_sp *mlxsw_sp, } } - ops->region_rehash_hints_put(ctx->hints_priv); - ctx->hints_priv = NULL; + mlxsw_sp_acl_tcam_vregion_rehash_end(mlxsw_sp, vregion, ctx); return err; }