]> git.baikalelectronics.ru Git - kernel.git/commitdiff
net/mlx5e: Pass attr arg for attaching/detaching encaps
authorRoi Dayan <roid@nvidia.com>
Sun, 10 Oct 2021 11:03:12 +0000 (14:03 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 27 Jan 2022 20:37:31 +0000 (12:37 -0800)
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>
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.h
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index 9918ed8c059b6b48347eb38e2256d3fdf4e30648..c8cb173f1ffb434048290627c6e2c2483d423979 100644 (file)
@@ -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;
index 3391504d9a08eef5d9e7a99c74e8c3708589f6a3..d542b8476491e081c1f70cecaca5798a42f20f28 100644 (file)
@@ -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);
index 4fa9dbe26fcc966106f36b2c6f0b879f2eb60ef9..6f34eda3543025eb6c44722c51dc2da3a95bcd85 100644 (file)
@@ -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);