mirror of https://gitee.com/openkylin/linux.git
net/mlx5e: Refactor eswitch flow attr for destination specific properties
Currently the eswitch flow attr structure stores each destination specific property in its own specific array. Group them in an array of destination structures as a pre-step towards adding additional destination specific field properties. Signed-off-by: Eli Britstein <elibr@mellanox.com> Reviewed-by: Oz Shlomo <ozsh@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
e85e02bad2
commit
df65a573ea
|
@ -939,8 +939,8 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv,
|
|||
}
|
||||
out_priv = netdev_priv(encap_dev);
|
||||
rpriv = out_priv->ppriv;
|
||||
attr->out_rep[attr->out_count] = rpriv->rep;
|
||||
attr->out_mdev[attr->out_count++] = out_priv->mdev;
|
||||
attr->dests[attr->out_count].rep = rpriv->rep;
|
||||
attr->dests[attr->out_count++].mdev = out_priv->mdev;
|
||||
}
|
||||
|
||||
err = mlx5_eswitch_add_vlan_action(esw, attr);
|
||||
|
@ -2468,8 +2468,9 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
|
|||
MLX5_FLOW_CONTEXT_ACTION_COUNT;
|
||||
out_priv = netdev_priv(out_dev);
|
||||
rpriv = out_priv->ppriv;
|
||||
attr->out_rep[attr->out_count] = rpriv->rep;
|
||||
attr->out_mdev[attr->out_count++] = out_priv->mdev;
|
||||
attr->dests[attr->out_count].rep = rpriv->rep;
|
||||
attr->dests[attr->out_count].mdev = out_priv->mdev;
|
||||
attr->out_count++;
|
||||
} else if (encap) {
|
||||
parse_attr->mirred_ifindex = out_dev->ifindex;
|
||||
parse_attr->tun_info = *info;
|
||||
|
@ -2477,7 +2478,9 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv, struct tcf_exts *exts,
|
|||
action |= MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT |
|
||||
MLX5_FLOW_CONTEXT_ACTION_FWD_DEST |
|
||||
MLX5_FLOW_CONTEXT_ACTION_COUNT;
|
||||
/* attr->out_rep is resolved when we handle encap */
|
||||
/* attr->dests[].rep is resolved when we
|
||||
* handle encap
|
||||
*/
|
||||
} else if (parse_attr->filter_dev != priv->netdev) {
|
||||
/* All mlx5 devices are called to configure
|
||||
* high level device filters. Therefore, the
|
||||
|
|
|
@ -283,8 +283,6 @@ enum mlx5_flow_match_level {
|
|||
|
||||
struct mlx5_esw_flow_attr {
|
||||
struct mlx5_eswitch_rep *in_rep;
|
||||
struct mlx5_eswitch_rep *out_rep[MLX5_MAX_FLOW_FWD_VPORTS];
|
||||
struct mlx5_core_dev *out_mdev[MLX5_MAX_FLOW_FWD_VPORTS];
|
||||
struct mlx5_core_dev *in_mdev;
|
||||
|
||||
int split_count;
|
||||
|
@ -297,6 +295,10 @@ struct mlx5_esw_flow_attr {
|
|||
u8 total_vlan;
|
||||
bool vlan_handled;
|
||||
u32 encap_id;
|
||||
struct {
|
||||
struct mlx5_eswitch_rep *rep;
|
||||
struct mlx5_core_dev *mdev;
|
||||
} dests[MLX5_MAX_FLOW_FWD_VPORTS];
|
||||
u32 mod_hdr_id;
|
||||
u8 match_level;
|
||||
struct mlx5_fc *counter;
|
||||
|
|
|
@ -122,9 +122,9 @@ mlx5_eswitch_add_offloaded_rule(struct mlx5_eswitch *esw,
|
|||
} else {
|
||||
for (j = attr->split_count; j < attr->out_count; j++) {
|
||||
dest[i].type = MLX5_FLOW_DESTINATION_TYPE_VPORT;
|
||||
dest[i].vport.num = attr->out_rep[j]->vport;
|
||||
dest[i].vport.num = attr->dests[j].rep->vport;
|
||||
dest[i].vport.vhca_id =
|
||||
MLX5_CAP_GEN(attr->out_mdev[j], vhca_id);
|
||||
MLX5_CAP_GEN(attr->dests[j].mdev, vhca_id);
|
||||
if (MLX5_CAP_ESW(esw->dev, merged_eswitch))
|
||||
dest[i].vport.flags |=
|
||||
MLX5_FLOW_DEST_VPORT_VHCA_ID;
|
||||
|
@ -218,9 +218,9 @@ mlx5_eswitch_add_fwd_rule(struct mlx5_eswitch *esw,
|
|||
flow_act.action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
|
||||
for (i = 0; i < attr->split_count; i++) {
|
||||
dest[i].type = MLX5_FLOW_DESTINATION_TYPE_VPORT;
|
||||
dest[i].vport.num = attr->out_rep[i]->vport;
|
||||
dest[i].vport.num = attr->dests[i].rep->vport;
|
||||
dest[i].vport.vhca_id =
|
||||
MLX5_CAP_GEN(attr->out_mdev[i], vhca_id);
|
||||
MLX5_CAP_GEN(attr->dests[i].mdev, vhca_id);
|
||||
if (MLX5_CAP_ESW(esw->dev, merged_eswitch))
|
||||
dest[i].vport.flags |= MLX5_FLOW_DEST_VPORT_VHCA_ID;
|
||||
}
|
||||
|
@ -327,7 +327,7 @@ esw_vlan_action_get_vport(struct mlx5_esw_flow_attr *attr, bool push, bool pop)
|
|||
struct mlx5_eswitch_rep *in_rep, *out_rep, *vport = NULL;
|
||||
|
||||
in_rep = attr->in_rep;
|
||||
out_rep = attr->out_rep[0];
|
||||
out_rep = attr->dests[0].rep;
|
||||
|
||||
if (push)
|
||||
vport = in_rep;
|
||||
|
@ -348,7 +348,7 @@ static int esw_add_vlan_action_check(struct mlx5_esw_flow_attr *attr,
|
|||
goto out_notsupp;
|
||||
|
||||
in_rep = attr->in_rep;
|
||||
out_rep = attr->out_rep[0];
|
||||
out_rep = attr->dests[0].rep;
|
||||
|
||||
if (push && in_rep->vport == FDB_UPLINK_VPORT)
|
||||
goto out_notsupp;
|
||||
|
@ -400,7 +400,7 @@ int mlx5_eswitch_add_vlan_action(struct mlx5_eswitch *esw,
|
|||
|
||||
if (!push && !pop && fwd) {
|
||||
/* tracks VF --> wire rules without vlan push action */
|
||||
if (attr->out_rep[0]->vport == FDB_UPLINK_VPORT) {
|
||||
if (attr->dests[0].rep->vport == FDB_UPLINK_VPORT) {
|
||||
vport->vlan_refcount++;
|
||||
attr->vlan_handled = true;
|
||||
}
|
||||
|
@ -460,7 +460,7 @@ int mlx5_eswitch_del_vlan_action(struct mlx5_eswitch *esw,
|
|||
|
||||
if (!push && !pop && fwd) {
|
||||
/* tracks VF --> wire rules without vlan push action */
|
||||
if (attr->out_rep[0]->vport == FDB_UPLINK_VPORT)
|
||||
if (attr->dests[0].rep->vport == FDB_UPLINK_VPORT)
|
||||
vport->vlan_refcount--;
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue