diff options
author | Shahar Klein <shahark@mellanox.com> | 2018-03-18 03:03:49 -0400 |
---|---|---|
committer | Saeed Mahameed <saeedm@mellanox.com> | 2018-05-17 17:17:35 -0400 |
commit | 10ff5359f883412728ba816046ee3a696625ca02 (patch) | |
tree | d883df37881c18cc2ad3c199716e4dae3e3427d7 | |
parent | 3e99df87722874c669f6c24a79bd1b4ba5fec819 (diff) |
net/mlx5e: Explicitly set source e-switch in offloaded TC rules
Set a specific source e-switch when setting a rule that matches on the
ingress port.
Signed-off-by: Shahar Klein <shahark@mellanox.com>
Reviewed-by: Or Gerlitz <ogerlitz@mellanox.com>
Reviewed-by: Roi Dayan <roid@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/eswitch.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | 8 |
3 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c index 880adc810ccc..1d2ba687b902 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | |||
@@ -2462,6 +2462,7 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts, | |||
2462 | 2462 | ||
2463 | memset(attr, 0, sizeof(*attr)); | 2463 | memset(attr, 0, sizeof(*attr)); |
2464 | attr->in_rep = rpriv->rep; | 2464 | attr->in_rep = rpriv->rep; |
2465 | attr->in_mdev = priv->mdev; | ||
2465 | 2466 | ||
2466 | tcf_exts_to_list(exts, &actions); | 2467 | tcf_exts_to_list(exts, &actions); |
2467 | list_for_each_entry(a, &actions, list) { | 2468 | list_for_each_entry(a, &actions, list) { |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h index ac5db54823a1..98a306e02640 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.h | |||
@@ -231,6 +231,7 @@ struct mlx5_esw_flow_attr { | |||
231 | struct mlx5_eswitch_rep *in_rep; | 231 | struct mlx5_eswitch_rep *in_rep; |
232 | struct mlx5_eswitch_rep *out_rep; | 232 | struct mlx5_eswitch_rep *out_rep; |
233 | struct mlx5_core_dev *out_mdev; | 233 | struct mlx5_core_dev *out_mdev; |
234 | struct mlx5_core_dev *in_mdev; | ||
234 | 235 | ||
235 | int action; | 236 | int action; |
236 | __be16 vlan_proto; | 237 | __be16 vlan_proto; |
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c index ea93867d1ab4..6c83eef5141a 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c | |||
@@ -93,8 +93,16 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw, | |||
93 | misc = MLX5_ADDR_OF(fte_match_param, spec->match_value, misc_parameters); | 93 | misc = MLX5_ADDR_OF(fte_match_param, spec->match_value, misc_parameters); |
94 | MLX5_SET(fte_match_set_misc, misc, source_port, attr->in_rep->vport); | 94 | MLX5_SET(fte_match_set_misc, misc, source_port, attr->in_rep->vport); |
95 | 95 | ||
96 | if (MLX5_CAP_ESW(esw->dev, merged_eswitch)) | ||
97 | MLX5_SET(fte_match_set_misc, misc, | ||
98 | source_eswitch_owner_vhca_id, | ||
99 | MLX5_CAP_GEN(attr->in_mdev, vhca_id)); | ||
100 | |||
96 | misc = MLX5_ADDR_OF(fte_match_param, spec->match_criteria, misc_parameters); | 101 | misc = MLX5_ADDR_OF(fte_match_param, spec->match_criteria, misc_parameters); |
97 | MLX5_SET_TO_ONES(fte_match_set_misc, misc, source_port); | 102 | MLX5_SET_TO_ONES(fte_match_set_misc, misc, source_port); |
103 | if (MLX5_CAP_ESW(esw->dev, merged_eswitch)) | ||
104 | MLX5_SET_TO_ONES(fte_match_set_misc, misc, | ||
105 | source_eswitch_owner_vhca_id); | ||
98 | 106 | ||
99 | spec->match_criteria_enable = MLX5_MATCH_OUTER_HEADERS | | 107 | spec->match_criteria_enable = MLX5_MATCH_OUTER_HEADERS | |
100 | MLX5_MATCH_MISC_PARAMETERS; | 108 | MLX5_MATCH_MISC_PARAMETERS; |