net/mlx5: Break encap/decap into two separated flow table creation flags
authorMark Bloch <markb@mellanox.com>
Tue, 28 Aug 2018 11:18:44 +0000 (14:18 +0300)
committerLeon Romanovsky <leonro@mellanox.com>
Wed, 5 Sep 2018 04:58:00 +0000 (07:58 +0300)
Today we are able to attach encap and decap actions only to the FDB. In
preparation to enable those actions on the NIC flow tables, break the
single flag into two. Those flags control whatever a decap or encap
operations can be attached to the flow table created. For FDB, if
encapsulation is required, we set both of them.

Signed-off-by: Mark Bloch <markb@mellanox.com>
Reviewed-by: Saeed Mahameed <saeedm@mellanox.com>
Reviewed-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c
include/linux/mlx5/fs.h

index f72b5c9dcfe95f98cc388676462207bf76247504..ff21807a0c4bebfc460c4f821ac05571362f79d9 100644 (file)
@@ -529,7 +529,8 @@ static int esw_create_offloads_fast_fdb_table(struct mlx5_eswitch *esw)
                esw_size >>= 1;
 
        if (esw->offloads.encap != DEVLINK_ESWITCH_ENCAP_MODE_NONE)
-               flags |= MLX5_FLOW_TABLE_TUNNEL_EN;
+               flags |= (MLX5_FLOW_TABLE_TUNNEL_EN_ENCAP |
+                         MLX5_FLOW_TABLE_TUNNEL_EN_DECAP);
 
        fdb = mlx5_create_auto_grouped_flow_table(root_ns, FDB_FAST_PATH,
                                                  esw_size,
index 9ae777e565293770a58e12632789d5d9bcd8a08c..1698f325a21e9509e1de904ad24d660dd557a1f1 100644 (file)
@@ -152,7 +152,8 @@ static int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
                                      struct mlx5_flow_table *next_ft,
                                      unsigned int *table_id, u32 flags)
 {
-       int en_encap_decap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN);
+       int en_encap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN_ENCAP);
+       int en_decap = !!(flags & MLX5_FLOW_TABLE_TUNNEL_EN_DECAP);
        u32 out[MLX5_ST_SZ_DW(create_flow_table_out)] = {0};
        u32 in[MLX5_ST_SZ_DW(create_flow_table_in)]   = {0};
        int err;
@@ -169,9 +170,9 @@ static int mlx5_cmd_create_flow_table(struct mlx5_core_dev *dev,
        }
 
        MLX5_SET(create_flow_table_in, in, flow_table_context.decap_en,
-                en_encap_decap);
+                en_decap);
        MLX5_SET(create_flow_table_in, in, flow_table_context.encap_en,
-                en_encap_decap);
+                en_encap);
 
        switch (op_mod) {
        case FS_FT_OP_MOD_NORMAL:
index 0cbf4d5cb1abad17347fd14eea280b59c031b4ea..0194e62ad66a38357b173fc091cb5a011d65ec6f 100644 (file)
@@ -45,7 +45,8 @@ enum {
 };
 
 enum {
-       MLX5_FLOW_TABLE_TUNNEL_EN = BIT(0),
+       MLX5_FLOW_TABLE_TUNNEL_EN_ENCAP = BIT(0),
+       MLX5_FLOW_TABLE_TUNNEL_EN_DECAP = BIT(1),
 };
 
 #define LEFTOVERS_RULE_NUM      2