Commit c7d5fa10 authored by Maor Gottlieb's avatar Maor Gottlieb Committed by Saeed Mahameed
Browse files

net/mlx5: Create more priorities for FDB bypass namespace



Create 16 flow steering priorities for FDB bypass users.

Signed-off-by: default avatarMaor Gottlieb <maorg@nvidia.com>
Reviewed-by: default avatarMark Bloch <mbloch@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
Reviewed-by: default avatarLeon Romanovsky <leonro@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent 4588fed7
Loading
Loading
Loading
Loading
+29 −6
Original line number Diff line number Diff line
@@ -2236,7 +2236,6 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev,

	switch (type) {
	case MLX5_FLOW_NAMESPACE_FDB:
	case MLX5_FLOW_NAMESPACE_FDB_BYPASS:
		if (steering->fdb_root_ns)
			return &steering->fdb_root_ns->ns;
		return NULL;
@@ -2252,6 +2251,10 @@ struct mlx5_flow_namespace *mlx5_get_flow_namespace(struct mlx5_core_dev *dev,
		if (steering->sniffer_tx_root_ns)
			return &steering->sniffer_tx_root_ns->ns;
		return NULL;
	case MLX5_FLOW_NAMESPACE_FDB_BYPASS:
		root_ns = steering->fdb_root_ns;
		prio =  FDB_BYPASS_PATH;
		break;
	case MLX5_FLOW_NAMESPACE_EGRESS:
	case MLX5_FLOW_NAMESPACE_EGRESS_KERNEL:
		root_ns = steering->egress_root_ns;
@@ -2843,6 +2846,28 @@ static int create_fdb_fast_path(struct mlx5_flow_steering *steering)
	return 0;
}

static int create_fdb_bypass(struct mlx5_flow_steering *steering)
{
	struct mlx5_flow_namespace *ns;
	struct fs_prio *prio;
	int i;

	prio = fs_create_prio(&steering->fdb_root_ns->ns, FDB_BYPASS_PATH, 0);
	if (IS_ERR(prio))
		return PTR_ERR(prio);

	ns = fs_create_namespace(prio, MLX5_FLOW_TABLE_MISS_ACTION_DEF);
	if (IS_ERR(ns))
		return PTR_ERR(ns);

	for (i = 0; i < MLX5_BY_PASS_NUM_REGULAR_PRIOS; i++) {
		prio = fs_create_prio(ns, i, 1);
		if (IS_ERR(prio))
			return PTR_ERR(prio);
	}
	return 0;
}

static int init_fdb_root_ns(struct mlx5_flow_steering *steering)
{
	struct fs_prio *maj_prio;
@@ -2852,12 +2877,10 @@ static int init_fdb_root_ns(struct mlx5_flow_steering *steering)
	if (!steering->fdb_root_ns)
		return -ENOMEM;

	maj_prio = fs_create_prio(&steering->fdb_root_ns->ns, FDB_BYPASS_PATH,
				  1);
	if (IS_ERR(maj_prio)) {
		err = PTR_ERR(maj_prio);
	err = create_fdb_bypass(steering);
	if (err)
		goto out_err;
	}

	err = create_fdb_fast_path(steering);
	if (err)
		goto out_err;