Unverified Commit 69bffe75 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!8127 mlxsw: spectrum_acl_tcam: Fix warning during rehash

parents 01322718 d45b066d
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -723,6 +723,17 @@ static void mlxsw_sp_acl_tcam_vregion_rehash_work(struct work_struct *work)
		mlxsw_sp_acl_tcam_vregion_rehash_work_schedule(vregion);
}

static void
mlxsw_sp_acl_tcam_rehash_ctx_vchunk_reset(struct mlxsw_sp_acl_tcam_rehash_ctx *ctx)
{
	/* The entry markers are relative to the current chunk and therefore
	 * needs to be reset together with the chunk marker.
	 */
	ctx->current_vchunk = NULL;
	ctx->start_ventry = NULL;
	ctx->stop_ventry = NULL;
}

static void
mlxsw_sp_acl_tcam_rehash_ctx_vchunk_changed(struct mlxsw_sp_acl_tcam_vchunk *vchunk)
{
@@ -745,7 +756,7 @@ mlxsw_sp_acl_tcam_rehash_ctx_vregion_changed(struct mlxsw_sp_acl_tcam_vregion *v
	 * the current chunk pointer to make sure all chunks
	 * are properly migrated.
	 */
	vregion->rehash.ctx.current_vchunk = NULL;
	mlxsw_sp_acl_tcam_rehash_ctx_vchunk_reset(&vregion->rehash.ctx);
}

static struct mlxsw_sp_acl_tcam_vregion *
@@ -1240,7 +1251,7 @@ mlxsw_sp_acl_tcam_vchunk_migrate_end(struct mlxsw_sp *mlxsw_sp,
{
	mlxsw_sp_acl_tcam_chunk_destroy(mlxsw_sp, vchunk->chunk2);
	vchunk->chunk2 = NULL;
	ctx->current_vchunk = NULL;
	mlxsw_sp_acl_tcam_rehash_ctx_vchunk_reset(ctx);
}

static int
@@ -1275,6 +1286,8 @@ mlxsw_sp_acl_tcam_vchunk_migrate_one(struct mlxsw_sp *mlxsw_sp,
		ventry = list_first_entry(&vchunk->ventry_list,
					  typeof(*ventry), list);

	WARN_ON(ventry->vchunk != vchunk);

	list_for_each_entry_from(ventry, &vchunk->ventry_list, list) {
		/* During rollback, once we reach the ventry that failed
		 * to migrate, we are done.
@@ -1369,7 +1382,7 @@ mlxsw_sp_acl_tcam_vregion_migrate(struct mlxsw_sp *mlxsw_sp,
		 * to vregion->region.
		 */
		swap(vregion->region, vregion->region2);
		ctx->current_vchunk = NULL;
		mlxsw_sp_acl_tcam_rehash_ctx_vchunk_reset(ctx);
		ctx->this_is_rollback = true;
		err2 = mlxsw_sp_acl_tcam_vchunk_migrate_all(mlxsw_sp, vregion,
							    ctx, credits);
@@ -1429,6 +1442,7 @@ mlxsw_sp_acl_tcam_vregion_rehash_start(struct mlxsw_sp *mlxsw_sp,

	ctx->hints_priv = hints_priv;
	ctx->this_is_rollback = false;
	mlxsw_sp_acl_tcam_rehash_ctx_vchunk_reset(ctx);

	return 0;