Commit c118ebc9 authored by Roi Dayan's avatar Roi Dayan Committed by Saeed Mahameed

net/mlx5e: Pass attr arg for attaching/detaching encaps

In later commit that we will have multiple attr instances per flow
we would like to pass a specific attr instance to set encaps.

Currently the mlx5_flow object contains a single mlx5_attr instance.
However, multi table actions (e.g. CT) instantiate multiple attr instances.

Currently mlx5e_attach/detach_encap() reads the first attr instance
from the flow instance. Modify the functions to receive the attr
instance as a parameter which is set by the calling function.
Signed-off-by: default avatarRoi Dayan <roid@nvidia.com>
Reviewed-by: default avatarOz Shlomo <ozsh@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
parent 39542e23
...@@ -488,12 +488,14 @@ static void mlx5e_detach_encap_route(struct mlx5e_priv *priv, ...@@ -488,12 +488,14 @@ static void mlx5e_detach_encap_route(struct mlx5e_priv *priv,
int out_index); int out_index);
void mlx5e_detach_encap(struct mlx5e_priv *priv, void mlx5e_detach_encap(struct mlx5e_priv *priv,
struct mlx5e_tc_flow *flow, int out_index) struct mlx5e_tc_flow *flow,
struct mlx5_flow_attr *attr,
int out_index)
{ {
struct mlx5e_encap_entry *e = flow->encaps[out_index].e; struct mlx5e_encap_entry *e = flow->encaps[out_index].e;
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch; struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
if (flow->attr->esw_attr->dests[out_index].flags & if (attr->esw_attr->dests[out_index].flags &
MLX5_ESW_DEST_CHAIN_WITH_SRC_PORT_CHANGE) MLX5_ESW_DEST_CHAIN_WITH_SRC_PORT_CHANGE)
mlx5e_detach_encap_route(priv, flow, out_index); mlx5e_detach_encap_route(priv, flow, out_index);
...@@ -733,6 +735,7 @@ static unsigned int mlx5e_route_tbl_get_last_update(struct mlx5e_priv *priv) ...@@ -733,6 +735,7 @@ static unsigned int mlx5e_route_tbl_get_last_update(struct mlx5e_priv *priv)
static int mlx5e_attach_encap_route(struct mlx5e_priv *priv, static int mlx5e_attach_encap_route(struct mlx5e_priv *priv,
struct mlx5e_tc_flow *flow, struct mlx5e_tc_flow *flow,
struct mlx5_flow_attr *attr,
struct mlx5e_encap_entry *e, struct mlx5e_encap_entry *e,
bool new_encap_entry, bool new_encap_entry,
unsigned long tbl_time_before, unsigned long tbl_time_before,
...@@ -740,6 +743,7 @@ static int mlx5e_attach_encap_route(struct mlx5e_priv *priv, ...@@ -740,6 +743,7 @@ static int mlx5e_attach_encap_route(struct mlx5e_priv *priv,
int mlx5e_attach_encap(struct mlx5e_priv *priv, int mlx5e_attach_encap(struct mlx5e_priv *priv,
struct mlx5e_tc_flow *flow, struct mlx5e_tc_flow *flow,
struct mlx5_flow_attr *attr,
struct net_device *mirred_dev, struct net_device *mirred_dev,
int out_index, int out_index,
struct netlink_ext_ack *extack, struct netlink_ext_ack *extack,
...@@ -748,7 +752,6 @@ int mlx5e_attach_encap(struct mlx5e_priv *priv, ...@@ -748,7 +752,6 @@ int mlx5e_attach_encap(struct mlx5e_priv *priv,
{ {
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch; struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
struct mlx5e_tc_flow_parse_attr *parse_attr; struct mlx5e_tc_flow_parse_attr *parse_attr;
struct mlx5_flow_attr *attr = flow->attr;
const struct ip_tunnel_info *tun_info; const struct ip_tunnel_info *tun_info;
unsigned long tbl_time_before = 0; unsigned long tbl_time_before = 0;
struct mlx5e_encap_entry *e; struct mlx5e_encap_entry *e;
...@@ -834,8 +837,8 @@ int mlx5e_attach_encap(struct mlx5e_priv *priv, ...@@ -834,8 +837,8 @@ int mlx5e_attach_encap(struct mlx5e_priv *priv,
e->compl_result = 1; e->compl_result = 1;
attach_flow: attach_flow:
err = mlx5e_attach_encap_route(priv, flow, e, entry_created, tbl_time_before, err = mlx5e_attach_encap_route(priv, flow, attr, e, entry_created,
out_index); tbl_time_before, out_index);
if (err) if (err)
goto out_err; goto out_err;
...@@ -1198,6 +1201,7 @@ int mlx5e_attach_decap_route(struct mlx5e_priv *priv, ...@@ -1198,6 +1201,7 @@ int mlx5e_attach_decap_route(struct mlx5e_priv *priv,
static int mlx5e_attach_encap_route(struct mlx5e_priv *priv, static int mlx5e_attach_encap_route(struct mlx5e_priv *priv,
struct mlx5e_tc_flow *flow, struct mlx5e_tc_flow *flow,
struct mlx5_flow_attr *attr,
struct mlx5e_encap_entry *e, struct mlx5e_encap_entry *e,
bool new_encap_entry, bool new_encap_entry,
unsigned long tbl_time_before, unsigned long tbl_time_before,
...@@ -1206,7 +1210,6 @@ static int mlx5e_attach_encap_route(struct mlx5e_priv *priv, ...@@ -1206,7 +1210,6 @@ static int mlx5e_attach_encap_route(struct mlx5e_priv *priv,
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch; struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
unsigned long tbl_time_after = tbl_time_before; unsigned long tbl_time_after = tbl_time_before;
struct mlx5e_tc_flow_parse_attr *parse_attr; struct mlx5e_tc_flow_parse_attr *parse_attr;
struct mlx5_flow_attr *attr = flow->attr;
const struct ip_tunnel_info *tun_info; const struct ip_tunnel_info *tun_info;
struct mlx5_esw_flow_attr *esw_attr; struct mlx5_esw_flow_attr *esw_attr;
struct mlx5e_route_entry *r; struct mlx5e_route_entry *r;
......
...@@ -7,15 +7,19 @@ ...@@ -7,15 +7,19 @@
#include "tc_priv.h" #include "tc_priv.h"
void mlx5e_detach_encap(struct mlx5e_priv *priv, void mlx5e_detach_encap(struct mlx5e_priv *priv,
struct mlx5e_tc_flow *flow, int out_index); struct mlx5e_tc_flow *flow,
struct mlx5_flow_attr *attr,
int out_index);
int mlx5e_attach_encap(struct mlx5e_priv *priv, int mlx5e_attach_encap(struct mlx5e_priv *priv,
struct mlx5e_tc_flow *flow, struct mlx5e_tc_flow *flow,
struct mlx5_flow_attr *attr,
struct net_device *mirred_dev, struct net_device *mirred_dev,
int out_index, int out_index,
struct netlink_ext_ack *extack, struct netlink_ext_ack *extack,
struct net_device **encap_dev, struct net_device **encap_dev,
bool *encap_valid); bool *encap_valid);
int mlx5e_attach_decap(struct mlx5e_priv *priv, int mlx5e_attach_decap(struct mlx5e_priv *priv,
struct mlx5e_tc_flow *flow, struct mlx5e_tc_flow *flow,
struct netlink_ext_ack *extack); struct netlink_ext_ack *extack);
......
...@@ -1370,12 +1370,12 @@ int mlx5e_tc_add_flow_mod_hdr(struct mlx5e_priv *priv, ...@@ -1370,12 +1370,12 @@ int mlx5e_tc_add_flow_mod_hdr(struct mlx5e_priv *priv,
static int static int
set_encap_dests(struct mlx5e_priv *priv, set_encap_dests(struct mlx5e_priv *priv,
struct mlx5e_tc_flow *flow, struct mlx5e_tc_flow *flow,
struct mlx5_flow_attr *attr,
struct netlink_ext_ack *extack, struct netlink_ext_ack *extack,
bool *encap_valid, bool *encap_valid,
bool *vf_tun) bool *vf_tun)
{ {
struct mlx5e_tc_flow_parse_attr *parse_attr; struct mlx5e_tc_flow_parse_attr *parse_attr;
struct mlx5_flow_attr *attr = flow->attr;
struct mlx5_esw_flow_attr *esw_attr; struct mlx5_esw_flow_attr *esw_attr;
struct net_device *encap_dev = NULL; struct net_device *encap_dev = NULL;
struct mlx5e_rep_priv *rpriv; struct mlx5e_rep_priv *rpriv;
...@@ -1402,7 +1402,7 @@ set_encap_dests(struct mlx5e_priv *priv, ...@@ -1402,7 +1402,7 @@ set_encap_dests(struct mlx5e_priv *priv,
err = -ENODEV; err = -ENODEV;
goto out; goto out;
} }
err = mlx5e_attach_encap(priv, flow, out_dev, out_index, err = mlx5e_attach_encap(priv, flow, attr, out_dev, out_index,
extack, &encap_dev, encap_valid); extack, &encap_dev, encap_valid);
dev_put(out_dev); dev_put(out_dev);
if (err) if (err)
...@@ -1432,9 +1432,9 @@ set_encap_dests(struct mlx5e_priv *priv, ...@@ -1432,9 +1432,9 @@ set_encap_dests(struct mlx5e_priv *priv,
static void static void
clean_encap_dests(struct mlx5e_priv *priv, clean_encap_dests(struct mlx5e_priv *priv,
struct mlx5e_tc_flow *flow, struct mlx5e_tc_flow *flow,
struct mlx5_flow_attr *attr,
bool *vf_tun) bool *vf_tun)
{ {
struct mlx5_flow_attr *attr = flow->attr;
struct mlx5_esw_flow_attr *esw_attr; struct mlx5_esw_flow_attr *esw_attr;
int out_index; int out_index;
...@@ -1450,7 +1450,7 @@ clean_encap_dests(struct mlx5e_priv *priv, ...@@ -1450,7 +1450,7 @@ clean_encap_dests(struct mlx5e_priv *priv,
!esw_attr->dest_int_port) !esw_attr->dest_int_port)
*vf_tun = true; *vf_tun = true;
mlx5e_detach_encap(priv, flow, out_index); mlx5e_detach_encap(priv, flow, attr, out_index);
kfree(attr->parse_attr->tun_info[out_index]); kfree(attr->parse_attr->tun_info[out_index]);
} }
} }
...@@ -1555,7 +1555,7 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv, ...@@ -1555,7 +1555,7 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv,
esw_attr->int_port = int_port; esw_attr->int_port = int_port;
} }
err = set_encap_dests(priv, flow, extack, &encap_valid, &vf_tun); err = set_encap_dests(priv, flow, attr, extack, &encap_valid, &vf_tun);
if (err) if (err)
goto err_out; goto err_out;
...@@ -1651,7 +1651,7 @@ static void mlx5e_tc_del_fdb_flow(struct mlx5e_priv *priv, ...@@ -1651,7 +1651,7 @@ static void mlx5e_tc_del_fdb_flow(struct mlx5e_priv *priv,
if (flow->decap_route) if (flow->decap_route)
mlx5e_detach_decap_route(priv, flow); mlx5e_detach_decap_route(priv, flow);
clean_encap_dests(priv, flow, &vf_tun); clean_encap_dests(priv, flow, attr, &vf_tun);
mlx5_tc_ct_match_del(get_ct_priv(priv), &flow->attr->ct_attr); mlx5_tc_ct_match_del(get_ct_priv(priv), &flow->attr->ct_attr);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment