Commit f58df510 authored by Ido Schimmel's avatar Ido Schimmel Committed by David S. Miller
Browse files

mlxsw: spectrum_acl: Make global TCAM resources available to regions



Each TCAM region currently uses its own resources and there is no
sharing between the different regions.

This is going to change with A-TCAM as each region will need to allocate
an eRP table from the global eRP tables array.

Make the global TCAM resources available to each region by passing the
TCAM private data to the region initialization routine.

Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 57e56d36
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -628,6 +628,7 @@ struct mlxsw_sp_acl_tcam_ops {
	void (*fini)(struct mlxsw_sp *mlxsw_sp, void *priv);
	void (*fini)(struct mlxsw_sp *mlxsw_sp, void *priv);
	size_t region_priv_size;
	size_t region_priv_size;
	int (*region_init)(struct mlxsw_sp *mlxsw_sp, void *region_priv,
	int (*region_init)(struct mlxsw_sp *mlxsw_sp, void *region_priv,
			   void *tcam_priv,
			   struct mlxsw_sp_acl_tcam_region *region);
			   struct mlxsw_sp_acl_tcam_region *region);
	void (*region_fini)(struct mlxsw_sp *mlxsw_sp, void *region_priv);
	void (*region_fini)(struct mlxsw_sp *mlxsw_sp, void *region_priv);
	int (*region_associate)(struct mlxsw_sp *mlxsw_sp,
	int (*region_associate)(struct mlxsw_sp *mlxsw_sp,
+1 −0
Original line number Original line Diff line number Diff line
@@ -122,6 +122,7 @@ mlxsw_sp1_acl_ctcam_region_catchall_del(struct mlxsw_sp *mlxsw_sp,


static int
static int
mlxsw_sp1_acl_tcam_region_init(struct mlxsw_sp *mlxsw_sp, void *region_priv,
mlxsw_sp1_acl_tcam_region_init(struct mlxsw_sp *mlxsw_sp, void *region_priv,
			       void *tcam_priv,
			       struct mlxsw_sp_acl_tcam_region *_region)
			       struct mlxsw_sp_acl_tcam_region *_region)
{
{
	struct mlxsw_sp1_acl_tcam_region *region = region_priv;
	struct mlxsw_sp1_acl_tcam_region *region = region_priv;
+4 −2
Original line number Original line Diff line number Diff line
@@ -130,14 +130,16 @@ static void mlxsw_sp2_acl_tcam_fini(struct mlxsw_sp *mlxsw_sp, void *priv)


static int
static int
mlxsw_sp2_acl_tcam_region_init(struct mlxsw_sp *mlxsw_sp, void *region_priv,
mlxsw_sp2_acl_tcam_region_init(struct mlxsw_sp *mlxsw_sp, void *region_priv,
			       void *tcam_priv,
			       struct mlxsw_sp_acl_tcam_region *_region)
			       struct mlxsw_sp_acl_tcam_region *_region)
{
{
	struct mlxsw_sp2_acl_tcam_region *region = region_priv;
	struct mlxsw_sp2_acl_tcam_region *region = region_priv;
	struct mlxsw_sp2_acl_tcam *tcam = tcam_priv;


	region->region = _region;
	region->region = _region;


	return mlxsw_sp_acl_atcam_region_init(mlxsw_sp, &region->aregion,
	return mlxsw_sp_acl_atcam_region_init(mlxsw_sp, &tcam->atcam,
					      _region);
					      &region->aregion, _region);
}
}


static void
static void
+1 −0
Original line number Original line Diff line number Diff line
@@ -77,6 +77,7 @@ mlxsw_sp_acl_atcam_region_erp_init(struct mlxsw_sp *mlxsw_sp,
}
}


int mlxsw_sp_acl_atcam_region_init(struct mlxsw_sp *mlxsw_sp,
int mlxsw_sp_acl_atcam_region_init(struct mlxsw_sp *mlxsw_sp,
				   struct mlxsw_sp_acl_atcam *atcam,
				   struct mlxsw_sp_acl_atcam_region *aregion,
				   struct mlxsw_sp_acl_atcam_region *aregion,
				   struct mlxsw_sp_acl_tcam_region *region)
				   struct mlxsw_sp_acl_tcam_region *region)
{
{
+1 −1
Original line number Original line Diff line number Diff line
@@ -577,7 +577,7 @@ mlxsw_sp_acl_tcam_region_create(struct mlxsw_sp *mlxsw_sp,
	if (err)
	if (err)
		goto err_tcam_region_enable;
		goto err_tcam_region_enable;


	err = ops->region_init(mlxsw_sp, region->priv, region);
	err = ops->region_init(mlxsw_sp, region->priv, tcam->priv, region);
	if (err)
	if (err)
		goto err_tcam_region_init;
		goto err_tcam_region_init;


Loading