diff options
author | Chris Mi <cmi@nvidia.com> | 2020-08-31 08:23:25 +0300 |
---|---|---|
committer | Saeed Mahameed <saeedm@nvidia.com> | 2021-04-07 07:36:01 +0300 |
commit | c796bb7cd2307d5fb815e919b964bf2d65c95ec3 (patch) | |
tree | b89922596f89fa7db87b8a73c1d31e09a7843506 /drivers/net/ethernet/mellanox/mlx5/core/esw | |
parent | 0a9e2307870bdb627421b4b0bbac04b1ab8e1688 (diff) | |
download | linux-c796bb7cd2307d5fb815e919b964bf2d65c95ec3.tar.xz |
net/mlx5: E-switch, Generalize per vport table API
Currently, per vport table was used only for port mirroring actions.
However, sample action will also require a per vport table instance.
Generalize the vport table API to work with multiple namespaces where
each namespace manages its own vport table instance.
Signed-off-by: Chris Mi <cmi@nvidia.com>
Reviewed-by: Oz Shlomo <ozsh@nvidia.com>
Reviewed-by: Mark Bloch <mbloch@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Diffstat (limited to 'drivers/net/ethernet/mellanox/mlx5/core/esw')
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/esw/vporttbl.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/vporttbl.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/vporttbl.c index 6c4246181615..abba1b801048 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/esw/vporttbl.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/vporttbl.c @@ -3,9 +3,6 @@ #include "eswitch.h" -#define MLX5_ESW_VPORT_TABLE_SIZE 128 -#define MLX5_ESW_VPORT_TBL_NUM_GROUPS 4 - /* This struct is used as a key to the hash table and we need it to be packed * so hash result is consistent */ @@ -14,6 +11,7 @@ struct mlx5_vport_key { u16 prio; u16 vport; u16 vhca_id; + const struct esw_vport_tbl_namespace *vport_ns; } __packed; struct mlx5_vport_table { @@ -24,14 +22,16 @@ struct mlx5_vport_table { }; static struct mlx5_flow_table * -esw_vport_tbl_create(struct mlx5_eswitch *esw, struct mlx5_flow_namespace *ns) +esw_vport_tbl_create(struct mlx5_eswitch *esw, struct mlx5_flow_namespace *ns, + const struct esw_vport_tbl_namespace *vport_ns) { struct mlx5_flow_table_attr ft_attr = {}; struct mlx5_flow_table *fdb; - ft_attr.autogroup.max_num_groups = MLX5_ESW_VPORT_TBL_NUM_GROUPS; - ft_attr.max_fte = MLX5_ESW_VPORT_TABLE_SIZE; + ft_attr.autogroup.max_num_groups = vport_ns->max_num_groups; + ft_attr.max_fte = vport_ns->max_fte; ft_attr.prio = FDB_PER_VPORT; + ft_attr.flags = vport_ns->flags; fdb = mlx5_create_auto_grouped_flow_table(ns, &ft_attr); if (IS_ERR(fdb)) { esw_warn(esw->dev, "Failed to create per vport FDB Table err %ld\n", @@ -49,6 +49,7 @@ static u32 flow_attr_to_vport_key(struct mlx5_eswitch *esw, key->chain = attr->chain; key->prio = attr->prio; key->vhca_id = MLX5_CAP_GEN(esw->dev, vhca_id); + key->vport_ns = attr->vport_ns; return jhash(key, sizeof(*key), 0); } @@ -96,7 +97,7 @@ mlx5_esw_vporttbl_get(struct mlx5_eswitch *esw, struct mlx5_vport_tbl_attr *attr goto err_ns; } - fdb = esw_vport_tbl_create(esw, ns); + fdb = esw_vport_tbl_create(esw, ns, attr->vport_ns); if (IS_ERR(fdb)) goto err_ns; |