examples/l3fwd: share queue size variables
[dpdk.git] / drivers / net / mlx5 / mlx5_flow_verbs.c
index 192a00d..85f0788 100644 (file)
@@ -1679,6 +1679,7 @@ flow_verbs_translate(struct rte_eth_dev *dev,
        struct mlx5_priv *priv = dev->data->dev_private;
        struct mlx5_flow_workspace *wks = mlx5_flow_get_thread_workspace();
        struct mlx5_flow_rss_desc *rss_desc;
+       const struct rte_flow_item *tunnel_item = NULL;
 
        MLX5_ASSERT(wks);
        rss_desc = &wks->rss_desc;
@@ -1693,12 +1694,12 @@ flow_verbs_translate(struct rte_eth_dev *dev,
                case RTE_FLOW_ACTION_TYPE_FLAG:
                        flow_verbs_translate_action_flag(dev_flow, actions);
                        action_flags |= MLX5_FLOW_ACTION_FLAG;
-                       dev_flow->handle->mark = 1;
+                       wks->mark = 1;
                        break;
                case RTE_FLOW_ACTION_TYPE_MARK:
                        flow_verbs_translate_action_mark(dev_flow, actions);
                        action_flags |= MLX5_FLOW_ACTION_MARK;
-                       dev_flow->handle->mark = 1;
+                       wks->mark = 1;
                        break;
                case RTE_FLOW_ACTION_TYPE_DROP:
                        flow_verbs_translate_action_drop(dev_flow, actions);
@@ -1818,6 +1819,7 @@ flow_verbs_translate(struct rte_eth_dev *dev,
                case RTE_FLOW_ITEM_TYPE_GRE:
                        subpriority = MLX5_TUNNEL_PRIO_GET(rss_desc);
                        item_flags |= MLX5_FLOW_LAYER_GRE;
+                       tunnel_item = items;
                        break;
                case RTE_FLOW_ITEM_TYPE_MPLS:
                        flow_verbs_translate_item_mpls(dev_flow, items,
@@ -1832,7 +1834,8 @@ flow_verbs_translate(struct rte_eth_dev *dev,
                }
        }
        if (item_flags & MLX5_FLOW_LAYER_GRE)
-               flow_verbs_translate_item_gre(dev_flow, items, item_flags);
+               flow_verbs_translate_item_gre(dev_flow, tunnel_item,
+                                             item_flags);
        dev_flow->handle->layers = item_flags;
        /* Other members of attr will be ignored. */
        dev_flow->verbs.attr.priority =
@@ -1943,7 +1946,6 @@ flow_verbs_apply(struct rte_eth_dev *dev, struct rte_flow *flow,
                        MLX5_ASSERT(priv->drop_queue.hrxq);
                        hrxq = priv->drop_queue.hrxq;
                } else {
-                       uint32_t hrxq_idx;
                        struct mlx5_flow_rss_desc *rss_desc = &wks->rss_desc;
 
                        MLX5_ASSERT(rss_desc->queue_num);
@@ -1952,9 +1954,7 @@ flow_verbs_apply(struct rte_eth_dev *dev, struct rte_flow *flow,
                        rss_desc->tunnel = !!(handle->layers &
                                              MLX5_FLOW_LAYER_TUNNEL);
                        rss_desc->shared_rss = 0;
-                       hrxq_idx = mlx5_hrxq_get(dev, rss_desc);
-                       hrxq = mlx5_ipool_get(priv->sh->ipool[MLX5_IPOOL_HRXQ],
-                                             hrxq_idx);
+                       hrxq = mlx5_hrxq_get(dev, rss_desc);
                        if (!hrxq) {
                                rte_flow_error_set
                                        (error, rte_errno,
@@ -1962,7 +1962,7 @@ flow_verbs_apply(struct rte_eth_dev *dev, struct rte_flow *flow,
                                         "cannot get hash queue");
                                goto error;
                        }
-                       handle->rix_hrxq = hrxq_idx;
+                       handle->rix_hrxq = hrxq->idx;
                }
                MLX5_ASSERT(hrxq);
                handle->drv_flow = mlx5_glue->create_flow