mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
net/mlx5: Bridge, Enable mcast in smfs steering mode
[ Upstream commit 653b7eb9d74426397c95061fd57da3063625af65 ] In order to have mcast offloads the driver needs the following: It should know if that mcast comes from wire port, in addition the flow should not be marked as any specific source, that way it will give the flexibility for the driver not to be depended on the way iterator implemented in the FW. Signed-off-by: Erez Shitrit <erezsh@nvidia.com> Reviewed-by: Moshe Shemesh <moshe@nvidia.com> Reviewed-by: Vlad Buslov <vladbu@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com> Stable-dep-of: ec7cc38ef9f8 ("net/mlx5: Bridge, fix multicast packets sent to uplink") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5d3f7d3020
commit
63a77caa1d
@@ -78,6 +78,8 @@ mlx5_esw_bridge_mdb_flow_create(u16 esw_owner_vhca_id, struct mlx5_esw_bridge_md
|
||||
xa_for_each(&entry->ports, idx, port) {
|
||||
dests[i].type = MLX5_FLOW_DESTINATION_TYPE_FLOW_TABLE;
|
||||
dests[i].ft = port->mcast.ft;
|
||||
if (port->vport_num == MLX5_VPORT_UPLINK)
|
||||
dests[i].ft->flags |= MLX5_FLOW_TABLE_UPLINK_VPORT;
|
||||
i++;
|
||||
}
|
||||
|
||||
@@ -585,10 +587,6 @@ mlx5_esw_bridge_mcast_vlan_flow_create(u16 vlan_proto, struct mlx5_esw_bridge_po
|
||||
if (!rule_spec)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
if (MLX5_CAP_ESW_FLOWTABLE(bridge->br_offloads->esw->dev, flow_source) &&
|
||||
port->vport_num == MLX5_VPORT_UPLINK)
|
||||
rule_spec->flow_context.flow_source =
|
||||
MLX5_FLOW_CONTEXT_FLOW_SOURCE_LOCAL_VPORT;
|
||||
rule_spec->match_criteria_enable = MLX5_MATCH_OUTER_HEADERS;
|
||||
|
||||
flow_act.action |= MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT;
|
||||
@@ -660,11 +658,6 @@ mlx5_esw_bridge_mcast_fwd_flow_create(struct mlx5_esw_bridge_port *port)
|
||||
if (!rule_spec)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
if (MLX5_CAP_ESW_FLOWTABLE(bridge->br_offloads->esw->dev, flow_source) &&
|
||||
port->vport_num == MLX5_VPORT_UPLINK)
|
||||
rule_spec->flow_context.flow_source =
|
||||
MLX5_FLOW_CONTEXT_FLOW_SOURCE_LOCAL_VPORT;
|
||||
|
||||
if (MLX5_CAP_ESW(bridge->br_offloads->esw->dev, merged_eswitch)) {
|
||||
dest.vport.flags = MLX5_FLOW_DEST_VPORT_VHCA_ID;
|
||||
dest.vport.vhca_id = port->esw_owner_vhca_id;
|
||||
|
||||
@@ -67,6 +67,7 @@ enum {
|
||||
MLX5_FLOW_TABLE_TERMINATION = BIT(2),
|
||||
MLX5_FLOW_TABLE_UNMANAGED = BIT(3),
|
||||
MLX5_FLOW_TABLE_OTHER_VPORT = BIT(4),
|
||||
MLX5_FLOW_TABLE_UPLINK_VPORT = BIT(5),
|
||||
};
|
||||
|
||||
#define LEFTOVERS_RULE_NUM 2
|
||||
|
||||
Reference in New Issue
Block a user