net/mlx5e: TC, Pass attr to tc_act can_offload()
authorRoi Dayan <roid@nvidia.com>
Wed, 24 Nov 2021 12:31:46 +0000 (14:31 +0200)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 27 Jan 2022 20:37:32 +0000 (12:37 -0800)
In later commit we are going to instantiate multiple attr instances
for flow instead of single attr.
Make sure the parsing using correct attr and not flow->attr.

Signed-off-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Oz Shlomo <ozsh@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
19 files changed:
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/accept.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/act.h
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/csum.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/ct.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/drop.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/goto.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/mark.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/mirred.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/mirred_nic.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/mpls.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/pedit.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/ptype.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/redirect_ingress.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/sample.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/trap.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/tun.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/vlan.c
drivers/net/ethernet/mellanox/mlx5/core/en/tc/act/vlan_mangle.c
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index b0de6b9..84c1e87 100644 (file)
@@ -7,7 +7,8 @@
 static bool
 tc_act_can_offload_accept(struct mlx5e_tc_act_parse_state *parse_state,
                          const struct flow_action_entry *act,
-                         int act_index)
+                         int act_index,
+                         struct mlx5_flow_attr *attr)
 {
        return true;
 }
index 48c06a2..04734e5 100644 (file)
@@ -29,7 +29,8 @@ struct mlx5e_tc_act_parse_state {
 struct mlx5e_tc_act {
        bool (*can_offload)(struct mlx5e_tc_act_parse_state *parse_state,
                            const struct flow_action_entry *act,
-                           int act_index);
+                           int act_index,
+                           struct mlx5_flow_attr *attr);
 
        int (*parse_action)(struct mlx5e_tc_act_parse_state *parse_state,
                            const struct flow_action_entry *act,
index 29920ef..c0f08ae 100644 (file)
@@ -38,11 +38,12 @@ csum_offload_supported(struct mlx5e_priv *priv,
 static bool
 tc_act_can_offload_csum(struct mlx5e_tc_act_parse_state *parse_state,
                        const struct flow_action_entry *act,
-                       int act_index)
+                       int act_index,
+                       struct mlx5_flow_attr *attr)
 {
        struct mlx5e_tc_flow *flow = parse_state->flow;
 
-       return csum_offload_supported(flow->priv, flow->attr->action,
+       return csum_offload_supported(flow->priv, attr->action,
                                      act->csum_flags, parse_state->extack);
 }
 
index 06ec30c..0d08cc3 100644 (file)
@@ -8,7 +8,8 @@
 static bool
 tc_act_can_offload_ct(struct mlx5e_tc_act_parse_state *parse_state,
                      const struct flow_action_entry *act,
-                     int act_index)
+                     int act_index,
+                     struct mlx5_flow_attr *attr)
 {
        struct netlink_ext_ack *extack = parse_state->extack;
 
index 2e29a23..3d5f236 100644 (file)
@@ -7,7 +7,8 @@
 static bool
 tc_act_can_offload_drop(struct mlx5e_tc_act_parse_state *parse_state,
                        const struct flow_action_entry *act,
-                       int act_index)
+                       int act_index,
+                       struct mlx5_flow_attr *attr)
 {
        return true;
 }
index f445150..fb1be82 100644 (file)
@@ -8,6 +8,7 @@
 static int
 validate_goto_chain(struct mlx5e_priv *priv,
                    struct mlx5e_tc_flow *flow,
+                   struct mlx5_flow_attr *attr,
                    const struct flow_action_entry *act,
                    struct netlink_ext_ack *extack)
 {
@@ -32,7 +33,7 @@ validate_goto_chain(struct mlx5e_priv *priv,
        }
 
        if (!mlx5_chains_backwards_supported(chains) &&
-           dest_chain <= flow->attr->chain) {
+           dest_chain <= attr->chain) {
                NL_SET_ERR_MSG_MOD(extack, "Goto lower numbered chain isn't supported");
                return -EOPNOTSUPP;
        }
@@ -43,8 +44,8 @@ validate_goto_chain(struct mlx5e_priv *priv,
                return -EOPNOTSUPP;
        }
 
-       if (flow->attr->action & (MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT |
-                                 MLX5_FLOW_CONTEXT_ACTION_DECAP) &&
+       if (attr->action & (MLX5_FLOW_CONTEXT_ACTION_PACKET_REFORMAT |
+                           MLX5_FLOW_CONTEXT_ACTION_DECAP) &&
            !reformat_and_fwd) {
                NL_SET_ERR_MSG_MOD(extack,
                                   "Goto chain is not allowed if action has reformat or decap");
@@ -57,12 +58,13 @@ validate_goto_chain(struct mlx5e_priv *priv,
 static bool
 tc_act_can_offload_goto(struct mlx5e_tc_act_parse_state *parse_state,
                        const struct flow_action_entry *act,
-                       int act_index)
+                       int act_index,
+                       struct mlx5_flow_attr *attr)
 {
        struct netlink_ext_ack *extack = parse_state->extack;
        struct mlx5e_tc_flow *flow = parse_state->flow;
 
-       if (validate_goto_chain(flow->priv, flow, act, extack))
+       if (validate_goto_chain(flow->priv, flow, attr, act, extack))
                return false;
 
        return true;
index d775c3d..e8d2275 100644 (file)
@@ -7,7 +7,8 @@
 static bool
 tc_act_can_offload_mark(struct mlx5e_tc_act_parse_state *parse_state,
                        const struct flow_action_entry *act,
-                       int act_index)
+                       int act_index,
+                       struct mlx5_flow_attr *attr)
 {
        if (act->mark & ~MLX5E_TC_FLOW_ID_MASK) {
                NL_SET_ERR_MSG_MOD(parse_state->extack, "Bad flow mark, only 16 bit supported");
index c614fc7..99fb98b 100644 (file)
@@ -99,7 +99,8 @@ get_fdb_out_dev(struct net_device *uplink_dev, struct net_device *out_dev)
 static bool
 tc_act_can_offload_mirred(struct mlx5e_tc_act_parse_state *parse_state,
                          const struct flow_action_entry *act,
-                         int act_index)
+                         int act_index,
+                         struct mlx5_flow_attr *attr)
 {
        struct netlink_ext_ack *extack = parse_state->extack;
        struct mlx5e_tc_flow *flow = parse_state->flow;
@@ -108,8 +109,8 @@ tc_act_can_offload_mirred(struct mlx5e_tc_act_parse_state *parse_state,
        struct mlx5e_priv *priv = flow->priv;
        struct mlx5_esw_flow_attr *esw_attr;
 
-       parse_attr = flow->attr->parse_attr;
-       esw_attr = flow->attr->esw_attr;
+       parse_attr = attr->parse_attr;
+       esw_attr = attr->esw_attr;
 
        if (!out_dev) {
                /* out_dev is NULL when filters with
index 2c74567..16681cf 100644 (file)
@@ -7,7 +7,8 @@
 static bool
 tc_act_can_offload_mirred_nic(struct mlx5e_tc_act_parse_state *parse_state,
                              const struct flow_action_entry *act,
-                             int act_index)
+                             int act_index,
+                             struct mlx5_flow_attr *attr)
 {
        struct netlink_ext_ack *extack = parse_state->extack;
        struct mlx5e_tc_flow *flow = parse_state->flow;
index 784fc4f..4033294 100644 (file)
@@ -8,7 +8,8 @@
 static bool
 tc_act_can_offload_mpls_push(struct mlx5e_tc_act_parse_state *parse_state,
                             const struct flow_action_entry *act,
-                            int act_index)
+                            int act_index,
+                            struct mlx5_flow_attr *attr)
 {
        struct netlink_ext_ack *extack = parse_state->extack;
        struct mlx5e_priv *priv = parse_state->flow->priv;
@@ -36,13 +37,13 @@ tc_act_parse_mpls_push(struct mlx5e_tc_act_parse_state *parse_state,
 static bool
 tc_act_can_offload_mpls_pop(struct mlx5e_tc_act_parse_state *parse_state,
                            const struct flow_action_entry *act,
-                           int act_index)
+                           int act_index,
+                           struct mlx5_flow_attr *attr)
 {
        struct netlink_ext_ack *extack = parse_state->extack;
-       struct mlx5e_tc_flow *flow = parse_state->flow;
        struct net_device *filter_dev;
 
-       filter_dev = flow->attr->parse_attr->filter_dev;
+       filter_dev = attr->parse_attr->filter_dev;
 
        /* we only support mpls pop if it is the first action
         * and the filter net device is bareudp. Subsequent
index a70460c..39f8f71 100644 (file)
@@ -122,7 +122,8 @@ mlx5e_tc_act_pedit_parse_action(struct mlx5e_priv *priv,
 static bool
 tc_act_can_offload_pedit(struct mlx5e_tc_act_parse_state *parse_state,
                         const struct flow_action_entry *act,
-                        int act_index)
+                        int act_index,
+                        struct mlx5_flow_attr *attr)
 {
        return true;
 }
index 0819110..6454b03 100644 (file)
@@ -7,7 +7,8 @@
 static bool
 tc_act_can_offload_ptype(struct mlx5e_tc_act_parse_state *parse_state,
                         const struct flow_action_entry *act,
-                        int act_index)
+                        int act_index,
+                        struct mlx5_flow_attr *attr)
 {
        return true;
 }
index 1c32e24..9dd2441 100644 (file)
@@ -7,16 +7,16 @@
 static bool
 tc_act_can_offload_redirect_ingress(struct mlx5e_tc_act_parse_state *parse_state,
                                    const struct flow_action_entry *act,
-                                   int act_index)
+                                   int act_index,
+                                   struct mlx5_flow_attr *attr)
 {
        struct netlink_ext_ack *extack = parse_state->extack;
-       struct mlx5e_tc_flow *flow = parse_state->flow;
        struct mlx5e_tc_flow_parse_attr *parse_attr;
        struct net_device *out_dev = act->dev;
        struct mlx5_esw_flow_attr *esw_attr;
 
-       parse_attr = flow->attr->parse_attr;
-       esw_attr = flow->attr->esw_attr;
+       parse_attr = attr->parse_attr;
+       esw_attr = attr->esw_attr;
 
        if (!out_dev)
                return false;
index 6699bdf..0d71e97 100644 (file)
@@ -8,7 +8,8 @@
 static bool
 tc_act_can_offload_sample(struct mlx5e_tc_act_parse_state *parse_state,
                          const struct flow_action_entry *act,
-                         int act_index)
+                         int act_index,
+                         struct mlx5_flow_attr *attr)
 {
        struct netlink_ext_ack *extack = parse_state->extack;
 
index 046b64c..72811e0 100644 (file)
@@ -7,7 +7,8 @@
 static bool
 tc_act_can_offload_trap(struct mlx5e_tc_act_parse_state *parse_state,
                        const struct flow_action_entry *act,
-                       int act_index)
+                       int act_index,
+                       struct mlx5_flow_attr *attr)
 {
        struct netlink_ext_ack *extack = parse_state->extack;
 
index 6f4a2cf..b4fa2de 100644 (file)
@@ -8,7 +8,8 @@
 static bool
 tc_act_can_offload_tun_encap(struct mlx5e_tc_act_parse_state *parse_state,
                             const struct flow_action_entry *act,
-                            int act_index)
+                            int act_index,
+                            struct mlx5_flow_attr *attr)
 {
        if (!act->tunnel) {
                NL_SET_ERR_MSG_MOD(parse_state->extack,
@@ -34,7 +35,8 @@ tc_act_parse_tun_encap(struct mlx5e_tc_act_parse_state *parse_state,
 static bool
 tc_act_can_offload_tun_decap(struct mlx5e_tc_act_parse_state *parse_state,
                             const struct flow_action_entry *act,
-                            int act_index)
+                            int act_index,
+                            struct mlx5_flow_attr *attr)
 {
        return true;
 }
index f465925..6378b75 100644 (file)
@@ -150,7 +150,8 @@ mlx5e_tc_act_vlan_add_pop_action(struct mlx5e_priv *priv,
 static bool
 tc_act_can_offload_vlan(struct mlx5e_tc_act_parse_state *parse_state,
                        const struct flow_action_entry *act,
-                       int act_index)
+                       int act_index,
+                       struct mlx5_flow_attr *attr)
 {
        return true;
 }
index 396b32e..28444d4 100644 (file)
@@ -53,7 +53,8 @@ mlx5e_tc_act_vlan_add_rewrite_action(struct mlx5e_priv *priv, int namespace,
 static bool
 tc_act_can_offload_vlan_mangle(struct mlx5e_tc_act_parse_state *parse_state,
                               const struct flow_action_entry *act,
-                              int act_index)
+                              int act_index,
+                              struct mlx5_flow_attr *attr)
 {
        return true;
 }
index 5eb5f6e..de07ccd 100644 (file)
@@ -3302,7 +3302,7 @@ parse_tc_actions(struct mlx5e_tc_act_parse_state *parse_state,
                        return -EOPNOTSUPP;
                }
 
-               if (!tc_act->can_offload(parse_state, act, i))
+               if (!tc_act->can_offload(parse_state, act, i, attr))
                        return -EOPNOTSUPP;
 
                err = tc_act->parse_action(parse_state, act, priv, attr);
@@ -3313,7 +3313,7 @@ parse_tc_actions(struct mlx5e_tc_act_parse_state *parse_state,
        flow_action_for_each(i, act, flow_action) {
                tc_act = mlx5e_tc_act_get(act->id, ns_type);
                if (!tc_act || !tc_act->post_parse ||
-                   !tc_act->can_offload(parse_state, act, i))
+                   !tc_act->can_offload(parse_state, act, i, attr))
                        continue;
 
                err = tc_act->post_parse(parse_state, priv, attr);