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:
 
        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 (!actions_match_supported(priv, flow_action, parse_attr, flow, extack))
                        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:
        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 (!(attr->action &