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: Roi Dayan <roid@nvidia.com> Reviewed-by: Oz Shlomo <ozsh@nvidia.com> Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
This commit is contained in:
parent
39542e234b
commit
c118ebc982
@ -488,12 +488,14 @@ static void mlx5e_detach_encap_route(struct mlx5e_priv *priv,
|
||||
int out_index);
|
||||
|
||||
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 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)
|
||||
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)
|
||||
|
||||
static int mlx5e_attach_encap_route(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow *flow,
|
||||
struct mlx5_flow_attr *attr,
|
||||
struct mlx5e_encap_entry *e,
|
||||
bool new_encap_entry,
|
||||
unsigned long tbl_time_before,
|
||||
@ -740,6 +743,7 @@ static int mlx5e_attach_encap_route(struct mlx5e_priv *priv,
|
||||
|
||||
int mlx5e_attach_encap(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow *flow,
|
||||
struct mlx5_flow_attr *attr,
|
||||
struct net_device *mirred_dev,
|
||||
int out_index,
|
||||
struct netlink_ext_ack *extack,
|
||||
@ -748,7 +752,6 @@ int mlx5e_attach_encap(struct mlx5e_priv *priv,
|
||||
{
|
||||
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
|
||||
struct mlx5e_tc_flow_parse_attr *parse_attr;
|
||||
struct mlx5_flow_attr *attr = flow->attr;
|
||||
const struct ip_tunnel_info *tun_info;
|
||||
unsigned long tbl_time_before = 0;
|
||||
struct mlx5e_encap_entry *e;
|
||||
@ -834,8 +837,8 @@ int mlx5e_attach_encap(struct mlx5e_priv *priv,
|
||||
e->compl_result = 1;
|
||||
|
||||
attach_flow:
|
||||
err = mlx5e_attach_encap_route(priv, flow, e, entry_created, tbl_time_before,
|
||||
out_index);
|
||||
err = mlx5e_attach_encap_route(priv, flow, attr, e, entry_created,
|
||||
tbl_time_before, out_index);
|
||||
if (err)
|
||||
goto out_err;
|
||||
|
||||
@ -1198,6 +1201,7 @@ out:
|
||||
|
||||
static int mlx5e_attach_encap_route(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow *flow,
|
||||
struct mlx5_flow_attr *attr,
|
||||
struct mlx5e_encap_entry *e,
|
||||
bool new_encap_entry,
|
||||
unsigned long tbl_time_before,
|
||||
@ -1206,7 +1210,6 @@ static int mlx5e_attach_encap_route(struct mlx5e_priv *priv,
|
||||
struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
|
||||
unsigned long tbl_time_after = tbl_time_before;
|
||||
struct mlx5e_tc_flow_parse_attr *parse_attr;
|
||||
struct mlx5_flow_attr *attr = flow->attr;
|
||||
const struct ip_tunnel_info *tun_info;
|
||||
struct mlx5_esw_flow_attr *esw_attr;
|
||||
struct mlx5e_route_entry *r;
|
||||
|
@ -7,15 +7,19 @@
|
||||
#include "tc_priv.h"
|
||||
|
||||
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,
|
||||
struct mlx5e_tc_flow *flow,
|
||||
struct mlx5_flow_attr *attr,
|
||||
struct net_device *mirred_dev,
|
||||
int out_index,
|
||||
struct netlink_ext_ack *extack,
|
||||
struct net_device **encap_dev,
|
||||
bool *encap_valid);
|
||||
|
||||
int mlx5e_attach_decap(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow *flow,
|
||||
struct netlink_ext_ack *extack);
|
||||
|
@ -1370,12 +1370,12 @@ int mlx5e_tc_add_flow_mod_hdr(struct mlx5e_priv *priv,
|
||||
static int
|
||||
set_encap_dests(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow *flow,
|
||||
struct mlx5_flow_attr *attr,
|
||||
struct netlink_ext_ack *extack,
|
||||
bool *encap_valid,
|
||||
bool *vf_tun)
|
||||
{
|
||||
struct mlx5e_tc_flow_parse_attr *parse_attr;
|
||||
struct mlx5_flow_attr *attr = flow->attr;
|
||||
struct mlx5_esw_flow_attr *esw_attr;
|
||||
struct net_device *encap_dev = NULL;
|
||||
struct mlx5e_rep_priv *rpriv;
|
||||
@ -1402,7 +1402,7 @@ set_encap_dests(struct mlx5e_priv *priv,
|
||||
err = -ENODEV;
|
||||
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);
|
||||
dev_put(out_dev);
|
||||
if (err)
|
||||
@ -1432,9 +1432,9 @@ out:
|
||||
static void
|
||||
clean_encap_dests(struct mlx5e_priv *priv,
|
||||
struct mlx5e_tc_flow *flow,
|
||||
struct mlx5_flow_attr *attr,
|
||||
bool *vf_tun)
|
||||
{
|
||||
struct mlx5_flow_attr *attr = flow->attr;
|
||||
struct mlx5_esw_flow_attr *esw_attr;
|
||||
int out_index;
|
||||
|
||||
@ -1450,7 +1450,7 @@ clean_encap_dests(struct mlx5e_priv *priv,
|
||||
!esw_attr->dest_int_port)
|
||||
*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]);
|
||||
}
|
||||
}
|
||||
@ -1555,7 +1555,7 @@ mlx5e_tc_add_fdb_flow(struct mlx5e_priv *priv,
|
||||
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)
|
||||
goto err_out;
|
||||
|
||||
@ -1651,7 +1651,7 @@ static void mlx5e_tc_del_fdb_flow(struct mlx5e_priv *priv,
|
||||
if (flow->decap_route)
|
||||
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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user