net/mlx5e: Specifying known origin of packets matching the flow
authorJianbo Liu <jianbol@mellanox.com>
Tue, 25 Jun 2019 17:48:02 +0000 (17:48 +0000)
committerSaeed Mahameed <saeedm@mellanox.com>
Wed, 26 Jun 2019 19:01:28 +0000 (12:01 -0700)
In vport metadata matching, source port number is replaced by metadata.
While FW has no idea about what it is in the metadata, a syndrome will
happen. Specify a known origin to avoid the syndrome.
However, there is no functional change because ANY_VPORT (0) is filled
in flow_source, the same default value as before, as a pre-step towards
metadata matching for fast path.
There are two other values can be filled in flow_source. When setting
0x1, packet matching this rule is from uplink, while 0x2 is for packet
from other local vports.

Signed-off-by: Jianbo Liu <jianbol@mellanox.com>
Reviewed-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/diag/fs_tracepoint.h
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c
include/linux/mlx5/fs.h

index 9ec46edf22a6e3fcc38e08390d51741fe186f3be..ddf1b87f1bc0d6716823a4c3385a61cd2f971428 100644 (file)
@@ -187,6 +187,7 @@ TRACE_EVENT(mlx5_fs_set_fte,
                __field(u32, index)
                __field(u32, action)
                __field(u32, flow_tag)
+               __field(u32, flow_source)
                __field(u8,  mask_enable)
                __field(int, new_fte)
                __array(u32, mask_outer, MLX5_ST_SZ_DW(fte_match_set_lyr_2_4))
@@ -205,6 +206,7 @@ TRACE_EVENT(mlx5_fs_set_fte,
                           __entry->action = fte->action.action;
                           __entry->mask_enable = __entry->fg->mask.match_criteria_enable;
                           __entry->flow_tag = fte->flow_context.flow_tag;
+                          __entry->flow_source = fte->flow_context.flow_source;
                           memcpy(__entry->mask_outer,
                                  MLX5_ADDR_OF(fte_match_param,
                                               &__entry->fg->mask.match_criteria,
index fb1335a433ae5d75f8f3d2710216a391bf191a35..7ac1249eadc33c7962d1da4e7250fd911060de0e 100644 (file)
@@ -398,6 +398,9 @@ static int mlx5_cmd_set_fte(struct mlx5_core_dev *dev,
 
        MLX5_SET(flow_context, in_flow_context, flow_tag,
                 fte->flow_context.flow_tag);
+       MLX5_SET(flow_context, in_flow_context, flow_source,
+                fte->flow_context.flow_source);
+
        MLX5_SET(flow_context, in_flow_context, extended_destination,
                 extended_dest);
        if (extended_dest) {
index 9bf49ce218fa8c89aa5627fa210ceff3a6ec1ae2..dc7e7aa53a132337302665807b2fb990672aae9f 100644 (file)
@@ -95,6 +95,7 @@ enum {
 struct mlx5_flow_context {
        u32 flags;
        u32 flow_tag;
+       u32 flow_source;
 };
 
 struct mlx5_flow_spec {