net/mlx5: fix input register for ASO object
[dpdk.git] / drivers / net / mlx5 / mlx5_flow.c
index f9b4827..5dc0832 100644 (file)
@@ -777,6 +777,7 @@ mlx5_flow_get_reg_id(struct rte_eth_dev *dev,
                        return priv->mtr_color_reg != REG_C_2 ? REG_C_2 :
                               REG_C_3;
        case MLX5_MTR_COLOR:
+       case MLX5_ASO_FLOW_HIT: /* Both features use the same REG_C. */
                MLX5_ASSERT(priv->mtr_color_reg != REG_NON);
                return priv->mtr_color_reg;
        case MLX5_COPY_MARK:
@@ -1411,6 +1412,7 @@ mlx5_validate_action_rss(struct rte_eth_dev *dev,
 {
        struct mlx5_priv *priv = dev->data->dev_private;
        const struct rte_flow_action_rss *rss = action->conf;
+       enum mlx5_rxq_type rxq_type = MLX5_RXQ_TYPE_UNDEFINED;
        unsigned int i;
 
        if (rss->func != RTE_ETH_HASH_FUNCTION_DEFAULT &&
@@ -1476,6 +1478,8 @@ mlx5_validate_action_rss(struct rte_eth_dev *dev,
                                          RTE_FLOW_ERROR_TYPE_ACTION_CONF,
                                          NULL, "No queues configured");
        for (i = 0; i != rss->queue_num; ++i) {
+               struct mlx5_rxq_ctrl *rxq_ctrl;
+
                if (rss->queue[i] >= priv->rxqs_n)
                        return rte_flow_error_set
                                (error, EINVAL,
@@ -1485,6 +1489,15 @@ mlx5_validate_action_rss(struct rte_eth_dev *dev,
                        return rte_flow_error_set
                                (error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION_CONF,
                                 &rss->queue[i], "queue is not configured");
+               rxq_ctrl = container_of((*priv->rxqs)[rss->queue[i]],
+                                       struct mlx5_rxq_ctrl, rxq);
+               if (i == 0)
+                       rxq_type = rxq_ctrl->type;
+               if (rxq_type != rxq_ctrl->type)
+                       return rte_flow_error_set
+                               (error, ENOTSUP, RTE_FLOW_ERROR_TYPE_ACTION_CONF,
+                                &rss->queue[i],
+                                "combining hairpin and regular RSS queues is not supported");
        }
        return 0;
 }
@@ -6773,7 +6786,7 @@ mlx5_flow_group_to_table(struct rte_eth_dev *dev,
                standard_translation = true;
        }
        DRV_LOG(DEBUG,
-               "port %u group=%#x transfer=%d external=%d fdb_def_rule=%d translate=%s",
+               "port %u group=%u transfer=%d external=%d fdb_def_rule=%d translate=%s",
                dev->data->port_id, group, grp_info->transfer,
                grp_info->external, grp_info->fdb_def_rule,
                standard_translation ? "STANDARD" : "TUNNEL");
@@ -7807,6 +7820,11 @@ mlx5_flow_tunnel_get_restore_info(struct rte_eth_dev *dev,
        const struct mlx5_flow_tbl_data_entry *tble;
        const uint64_t mask = PKT_RX_FDIR | PKT_RX_FDIR_ID;
 
+       if (!is_tunnel_offload_active(dev)) {
+               info->flags = 0;
+               return 0;
+       }
+
        if ((ol_flags & mask) != mask)
                goto err;
        tble = tunnel_mark_decode(dev, m->hash.fdir.hi);