Skip to content

Commit c9f1b07

Browse files
hadarhenziondavem330
authored andcommitted
net/mlx5: Add creation flags when adding new flow table
When creating flow tables, allow the caller to specify creation flags. Currently no flags are used and as such this patch doesn't add any new functionality. Signed-off-by: Hadar Hen Zion <[email protected]> Signed-off-by: Saeed Mahameed <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 43f9383 commit c9f1b07

File tree

12 files changed

+45
-26
lines changed

12 files changed

+45
-26
lines changed

drivers/infiniband/hw/mlx5/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1857,7 +1857,7 @@ static struct mlx5_ib_flow_prio *get_flow_table(struct mlx5_ib_dev *dev,
18571857
ft = mlx5_create_auto_grouped_flow_table(ns, priority,
18581858
num_entries,
18591859
num_groups,
1860-
0);
1860+
0, 0);
18611861

18621862
if (!IS_ERR(ft)) {
18631863
prio->refcount = 0;

drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ static int arfs_create_table(struct mlx5e_priv *priv,
324324
int err;
325325

326326
ft->t = mlx5_create_flow_table(priv->fs.ns, MLX5E_NIC_PRIO,
327-
MLX5E_ARFS_TABLE_SIZE, MLX5E_ARFS_FT_LEVEL);
327+
MLX5E_ARFS_TABLE_SIZE, MLX5E_ARFS_FT_LEVEL, 0);
328328
if (IS_ERR(ft->t)) {
329329
err = PTR_ERR(ft->t);
330330
ft->t = NULL;

drivers/net/ethernet/mellanox/mlx5/core/en_fs.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -777,7 +777,7 @@ static int mlx5e_create_ttc_table(struct mlx5e_priv *priv)
777777
int err;
778778

779779
ft->t = mlx5_create_flow_table(priv->fs.ns, MLX5E_NIC_PRIO,
780-
MLX5E_TTC_TABLE_SIZE, MLX5E_TTC_FT_LEVEL);
780+
MLX5E_TTC_TABLE_SIZE, MLX5E_TTC_FT_LEVEL, 0);
781781
if (IS_ERR(ft->t)) {
782782
err = PTR_ERR(ft->t);
783783
ft->t = NULL;
@@ -948,7 +948,7 @@ static int mlx5e_create_l2_table(struct mlx5e_priv *priv)
948948

949949
ft->num_groups = 0;
950950
ft->t = mlx5_create_flow_table(priv->fs.ns, MLX5E_NIC_PRIO,
951-
MLX5E_L2_TABLE_SIZE, MLX5E_L2_FT_LEVEL);
951+
MLX5E_L2_TABLE_SIZE, MLX5E_L2_FT_LEVEL, 0);
952952

953953
if (IS_ERR(ft->t)) {
954954
err = PTR_ERR(ft->t);
@@ -1038,7 +1038,7 @@ static int mlx5e_create_vlan_table(struct mlx5e_priv *priv)
10381038

10391039
ft->num_groups = 0;
10401040
ft->t = mlx5_create_flow_table(priv->fs.ns, MLX5E_NIC_PRIO,
1041-
MLX5E_VLAN_TABLE_SIZE, MLX5E_VLAN_FT_LEVEL);
1041+
MLX5E_VLAN_TABLE_SIZE, MLX5E_VLAN_FT_LEVEL, 0);
10421042

10431043
if (IS_ERR(ft->t)) {
10441044
err = PTR_ERR(ft->t);

drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ static struct mlx5e_ethtool_table *get_flow_table(struct mlx5e_priv *priv,
9999
MLX5E_ETHTOOL_NUM_ENTRIES);
100100
ft = mlx5_create_auto_grouped_flow_table(ns, prio,
101101
table_size,
102-
MLX5E_ETHTOOL_NUM_GROUPS, 0);
102+
MLX5E_ETHTOOL_NUM_GROUPS, 0, 0);
103103
if (IS_ERR(ft))
104104
return (void *)ft;
105105

drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ mlx5e_tc_add_nic_flow(struct mlx5e_priv *priv,
8383
MLX5E_TC_PRIO,
8484
MLX5E_TC_TABLE_NUM_ENTRIES,
8585
MLX5E_TC_TABLE_NUM_GROUPS,
86-
0);
86+
0, 0);
8787
if (IS_ERR(priv->fs.tc.t)) {
8888
netdev_err(priv->netdev,
8989
"Failed to create tc offload table\n");

drivers/net/ethernet/mellanox/mlx5/core/eswitch.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ static int esw_create_legacy_fdb_table(struct mlx5_eswitch *esw, int nvports)
361361
memset(flow_group_in, 0, inlen);
362362

363363
table_size = BIT(MLX5_CAP_ESW_FLOWTABLE_FDB(dev, log_max_ft_size));
364-
fdb = mlx5_create_flow_table(root_ns, 0, table_size, 0);
364+
fdb = mlx5_create_flow_table(root_ns, 0, table_size, 0, 0);
365365
if (IS_ERR(fdb)) {
366366
err = PTR_ERR(fdb);
367367
esw_warn(dev, "Failed to create FDB Table err %d\n", err);

drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,8 @@ static int esw_create_offloads_fdb_table(struct mlx5_eswitch *esw, int nvports)
423423

424424
fdb = mlx5_create_auto_grouped_flow_table(root_ns, FDB_FAST_PATH,
425425
ESW_OFFLOADS_NUM_ENTRIES,
426-
ESW_OFFLOADS_NUM_GROUPS, 0);
426+
ESW_OFFLOADS_NUM_GROUPS, 0,
427+
0);
427428
if (IS_ERR(fdb)) {
428429
err = PTR_ERR(fdb);
429430
esw_warn(dev, "Failed to create Fast path FDB Table err %d\n", err);
@@ -432,7 +433,7 @@ static int esw_create_offloads_fdb_table(struct mlx5_eswitch *esw, int nvports)
432433
esw->fdb_table.fdb = fdb;
433434

434435
table_size = nvports + MAX_PF_SQ + 1;
435-
fdb = mlx5_create_flow_table(root_ns, FDB_SLOW_PATH, table_size, 0);
436+
fdb = mlx5_create_flow_table(root_ns, FDB_SLOW_PATH, table_size, 0, 0);
436437
if (IS_ERR(fdb)) {
437438
err = PTR_ERR(fdb);
438439
esw_warn(dev, "Failed to create slow path FDB Table err %d\n", err);
@@ -524,7 +525,7 @@ static int esw_create_offloads_table(struct mlx5_eswitch *esw)
524525
return -ENOMEM;
525526
}
526527

527-
ft_offloads = mlx5_create_flow_table(ns, 0, dev->priv.sriov.num_vfs + 2, 0);
528+
ft_offloads = mlx5_create_flow_table(ns, 0, dev->priv.sriov.num_vfs + 2, 0, 0);
528529
if (IS_ERR(ft_offloads)) {
529530
err = PTR_ERR(ft_offloads);
530531
esw_warn(esw->dev, "Failed to create offloads table, err %d\n", err);

drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "fs_core.h"
3838
#include "fs_cmd.h"
3939
#include "mlx5_core.h"
40+
#include "eswitch.h"
4041

4142
int mlx5_cmd_update_root_ft(struct mlx5_core_dev *dev,
4243
struct mlx5_flow_table *ft)
@@ -61,8 +62,9 @@ int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
6162
enum fs_flow_table_op_mod op_mod,
6263
enum fs_flow_table_type type, unsigned int level,
6364
unsigned int log_size, struct mlx5_flow_table
64-
*next_ft, unsigned int *table_id)
65+
*next_ft, unsigned int *table_id, u32 flags)
6566
{
67+
int en_encap_decap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN);
6668
u32 out[MLX5_ST_SZ_DW(create_flow_table_out)] = {0};
6769
u32 in[MLX5_ST_SZ_DW(create_flow_table_in)] = {0};
6870
int err;
@@ -78,6 +80,9 @@ int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
7880
MLX5_SET(create_flow_table_in, in, other_vport, 1);
7981
}
8082

83+
MLX5_SET(create_flow_table_in, in, decap_en, en_encap_decap);
84+
MLX5_SET(create_flow_table_in, in, encap_en, en_encap_decap);
85+
8186
switch (op_mod) {
8287
case FS_FT_OP_MOD_NORMAL:
8388
if (next_ft) {

drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
3838
enum fs_flow_table_op_mod op_mod,
3939
enum fs_flow_table_type type, unsigned int level,
4040
unsigned int log_size, struct mlx5_flow_table
41-
*next_ft, unsigned int *table_id);
41+
*next_ft, unsigned int *table_id, u32 flags);
4242

4343
int mlx5_cmd_destroy_flow_table(struct mlx5_core_dev *dev,
4444
struct mlx5_flow_table *ft);

drivers/net/ethernet/mellanox/mlx5/core/fs_core.c

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,8 @@ static struct mlx5_flow_group *alloc_flow_group(u32 *create_fg_in)
505505

506506
static struct mlx5_flow_table *alloc_flow_table(int level, u16 vport, int max_fte,
507507
enum fs_flow_table_type table_type,
508-
enum fs_flow_table_op_mod op_mod)
508+
enum fs_flow_table_op_mod op_mod,
509+
u32 flags)
509510
{
510511
struct mlx5_flow_table *ft;
511512

@@ -519,6 +520,7 @@ static struct mlx5_flow_table *alloc_flow_table(int level, u16 vport, int max_ft
519520
ft->type = table_type;
520521
ft->vport = vport;
521522
ft->max_fte = max_fte;
523+
ft->flags = flags;
522524
INIT_LIST_HEAD(&ft->fwd_rules);
523525
mutex_init(&ft->lock);
524526

@@ -777,7 +779,8 @@ static void list_add_flow_table(struct mlx5_flow_table *ft,
777779
static struct mlx5_flow_table *__mlx5_create_flow_table(struct mlx5_flow_namespace *ns,
778780
enum fs_flow_table_op_mod op_mod,
779781
u16 vport, int prio,
780-
int max_fte, u32 level)
782+
int max_fte, u32 level,
783+
u32 flags)
781784
{
782785
struct mlx5_flow_table *next_ft = NULL;
783786
struct mlx5_flow_table *ft;
@@ -810,7 +813,7 @@ static struct mlx5_flow_table *__mlx5_create_flow_table(struct mlx5_flow_namespa
810813
vport,
811814
max_fte ? roundup_pow_of_two(max_fte) : 0,
812815
root->table_type,
813-
op_mod);
816+
op_mod, flags);
814817
if (!ft) {
815818
err = -ENOMEM;
816819
goto unlock_root;
@@ -820,7 +823,8 @@ static struct mlx5_flow_table *__mlx5_create_flow_table(struct mlx5_flow_namespa
820823
log_table_sz = ft->max_fte ? ilog2(ft->max_fte) : 0;
821824
next_ft = find_next_chained_ft(fs_prio);
822825
err = mlx5_cmd_create_flow_table(root->dev, ft->vport, ft->op_mod, ft->type,
823-
ft->level, log_table_sz, next_ft, &ft->id);
826+
ft->level, log_table_sz, next_ft, &ft->id,
827+
ft->flags);
824828
if (err)
825829
goto free_ft;
826830

@@ -845,41 +849,43 @@ static struct mlx5_flow_table *__mlx5_create_flow_table(struct mlx5_flow_namespa
845849

846850
struct mlx5_flow_table *mlx5_create_flow_table(struct mlx5_flow_namespace *ns,
847851
int prio, int max_fte,
848-
u32 level)
852+
u32 level,
853+
u32 flags)
849854
{
850855
return __mlx5_create_flow_table(ns, FS_FT_OP_MOD_NORMAL, 0, prio,
851-
max_fte, level);
856+
max_fte, level, flags);
852857
}
853858

854859
struct mlx5_flow_table *mlx5_create_vport_flow_table(struct mlx5_flow_namespace *ns,
855860
int prio, int max_fte,
856861
u32 level, u16 vport)
857862
{
858863
return __mlx5_create_flow_table(ns, FS_FT_OP_MOD_NORMAL, vport, prio,
859-
max_fte, level);
864+
max_fte, level, 0);
860865
}
861866

862867
struct mlx5_flow_table *mlx5_create_lag_demux_flow_table(
863868
struct mlx5_flow_namespace *ns,
864869
int prio, u32 level)
865870
{
866871
return __mlx5_create_flow_table(ns, FS_FT_OP_MOD_LAG_DEMUX, 0, prio, 0,
867-
level);
872+
level, 0);
868873
}
869874
EXPORT_SYMBOL(mlx5_create_lag_demux_flow_table);
870875

871876
struct mlx5_flow_table *mlx5_create_auto_grouped_flow_table(struct mlx5_flow_namespace *ns,
872877
int prio,
873878
int num_flow_table_entries,
874879
int max_num_groups,
875-
u32 level)
880+
u32 level,
881+
u32 flags)
876882
{
877883
struct mlx5_flow_table *ft;
878884

879885
if (max_num_groups > num_flow_table_entries)
880886
return ERR_PTR(-EINVAL);
881887

882-
ft = mlx5_create_flow_table(ns, prio, num_flow_table_entries, level);
888+
ft = mlx5_create_flow_table(ns, prio, num_flow_table_entries, level, flags);
883889
if (IS_ERR(ft))
884890
return ft;
885891

@@ -1822,7 +1828,7 @@ static int create_anchor_flow_table(struct mlx5_flow_steering *steering)
18221828
ns = mlx5_get_flow_namespace(steering->dev, MLX5_FLOW_NAMESPACE_ANCHOR);
18231829
if (!ns)
18241830
return -EINVAL;
1825-
ft = mlx5_create_flow_table(ns, ANCHOR_PRIO, ANCHOR_SIZE, ANCHOR_LEVEL);
1831+
ft = mlx5_create_flow_table(ns, ANCHOR_PRIO, ANCHOR_SIZE, ANCHOR_LEVEL, 0);
18261832
if (IS_ERR(ft)) {
18271833
mlx5_core_err(steering->dev, "Failed to create last anchor flow table");
18281834
return PTR_ERR(ft);

drivers/net/ethernet/mellanox/mlx5/core/fs_core.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ struct mlx5_flow_table {
117117
struct mutex lock;
118118
/* FWD rules that point on this flow table */
119119
struct list_head fwd_rules;
120+
u32 flags;
120121
};
121122

122123
struct mlx5_fc_cache {

include/linux/mlx5/fs.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ enum {
4242
MLX5_FLOW_CONTEXT_ACTION_FWD_NEXT_PRIO = 1 << 16,
4343
};
4444

45+
enum {
46+
MLX5_FLOW_TABLE_TUNNEL_EN = BIT(0),
47+
};
48+
4549
#define LEFTOVERS_RULE_NUM 2
4650
static inline void build_leftovers_ft_param(int *priority,
4751
int *n_ent,
@@ -97,13 +101,15 @@ mlx5_create_auto_grouped_flow_table(struct mlx5_flow_namespace *ns,
97101
int prio,
98102
int num_flow_table_entries,
99103
int max_num_groups,
100-
u32 level);
104+
u32 level,
105+
u32 flags);
101106

102107
struct mlx5_flow_table *
103108
mlx5_create_flow_table(struct mlx5_flow_namespace *ns,
104109
int prio,
105110
int num_flow_table_entries,
106-
u32 level);
111+
u32 level,
112+
u32 flags);
107113
struct mlx5_flow_table *
108114
mlx5_create_vport_flow_table(struct mlx5_flow_namespace *ns,
109115
int prio,

0 commit comments

Comments
 (0)