net/mlx5e: Set action fwd flag when parsing tc action goto
authorRoi Dayan <roid@nvidia.com>
Wed, 11 Aug 2021 11:09:07 +0000 (14:09 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 18 Jan 2023 10:48:49 +0000 (11:48 +0100)
commit 7f8770c71646cf93abdf3fea8b7733aaec4c82a3 upstream.

Do it when parsing like in other actions instead of when
checking if goto is supported in current scenario.

Signed-off-by: Roi Dayan <roid@nvidia.com>
Reviewed-by: Maor Dickman <maord@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Cc: dann frazier <dann.frazier@canonical.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c

index 8f2f996..9ea4281 100644 (file)
@@ -3597,7 +3597,8 @@ static int parse_tc_nic_actions(struct mlx5e_priv *priv,
                        if (err)
                                return err;
 
-                       action |= MLX5_FLOW_CONTEXT_ACTION_COUNT;
+                       action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST |
+                                 MLX5_FLOW_CONTEXT_ACTION_COUNT;
                        attr->dest_chain = act->chain_index;
                        break;
                case FLOW_ACTION_CT:
@@ -3632,12 +3633,9 @@ static int parse_tc_nic_actions(struct mlx5e_priv *priv,
 
        attr->action = action;
 
-       if (attr->dest_chain) {
-               if (attr->action & MLX5_FLOW_CONTEXT_ACTION_FWD_DEST) {
-                       NL_SET_ERR_MSG(extack, "Mirroring goto chain rules isn't supported");
-                       return -EOPNOTSUPP;
-               }
-               attr->action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
+       if (attr->dest_chain && parse_attr->mirred_ifindex[0]) {
+               NL_SET_ERR_MSG(extack, "Mirroring goto chain rules isn't supported");
+               return -EOPNOTSUPP;
        }
 
        if (attr->action & MLX5_FLOW_CONTEXT_ACTION_MOD_HDR)
@@ -4146,7 +4144,8 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
                        if (err)
                                return err;
 
-                       action |= MLX5_FLOW_CONTEXT_ACTION_COUNT;
+                       action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST |
+                                 MLX5_FLOW_CONTEXT_ACTION_COUNT;
                        attr->dest_chain = act->chain_index;
                        break;
                case FLOW_ACTION_CT:
@@ -4218,24 +4217,18 @@ static int parse_tc_fdb_actions(struct mlx5e_priv *priv,
        if (!actions_match_supported(priv, flow_action, parse_attr, flow, extack))
                return -EOPNOTSUPP;
 
-       if (attr->dest_chain) {
-               if (decap) {
-                       /* It can be supported if we'll create a mapping for
-                        * the tunnel device only (without tunnel), and set
-                        * this tunnel id with this decap flow.
-                        *
-                        * On restore (miss), we'll just set this saved tunnel
-                        * device.
-                        */
-
-                       NL_SET_ERR_MSG(extack,
-                                      "Decap with goto isn't supported");
-                       netdev_warn(priv->netdev,
-                                   "Decap with goto isn't supported");
-                       return -EOPNOTSUPP;
-               }
+       if (attr->dest_chain && decap) {
+               /* It can be supported if we'll create a mapping for
+                * the tunnel device only (without tunnel), and set
+                * this tunnel id with this decap flow.
+                *
+                * On restore (miss), we'll just set this saved tunnel
+                * device.
+                */
 
-               attr->action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
+               NL_SET_ERR_MSG(extack, "Decap with goto isn't supported");
+               netdev_warn(priv->netdev, "Decap with goto isn't supported");
+               return -EOPNOTSUPP;
        }
 
        if (esw_attr->split_count > 0 && !mlx5_esw_has_fwd_fdb(priv->mdev)) {