net/mlx5: fix translate vport function name
[dpdk.git] / drivers / net / mlx5 / mlx5_flow_dv.c
index 5127e40..0e7d67b 100644 (file)
@@ -3086,8 +3086,8 @@ flow_dv_matcher_register(struct rte_eth_dev *dev,
  *   Mask
  */
 static void
-flow_dv_translate_source_vport(void *matcher, void *key,
-                             int16_t port, uint16_t mask)
+flow_dv_translate_item_source_vport(void *matcher, void *key,
+                                   int16_t port, uint16_t mask)
 {
        void *misc_m = MLX5_ADDR_OF(fte_match_param, matcher, misc_parameters);
        void *misc_v = MLX5_ADDR_OF(fte_match_param, key, misc_parameters);
@@ -3234,6 +3234,7 @@ flow_dv_translate(struct rte_eth_dev *dev,
        };
        union flow_dv_attr flow_attr = { .attr = 0 };
        struct mlx5_flow_dv_tag_resource tag_resource;
+       uint32_t modify_action_position = UINT32_MAX;
 
        if (priority == MLX5_FLOW_PRIO_RSVD)
                priority = priv->config.flow_prio - 1;
@@ -3473,13 +3474,16 @@ cnt_err:
                                                                 dev_flow,
                                                                 error))
                                        return -rte_errno;
-                               dev_flow->dv.actions[actions_n++] =
+                               dev_flow->dv.actions[modify_action_position] =
                                        dev_flow->dv.modify_hdr->verbs_action;
                        }
                        break;
                default:
                        break;
                }
+               if ((action_flags & MLX5_FLOW_MODIFY_HDR_ACTIONS) &&
+                   modify_action_position == UINT32_MAX)
+                       modify_action_position = actions_n++;
        }
        dev_flow->dv.actions_n = actions_n;
        flow->actions = action_flags;
@@ -3491,10 +3495,10 @@ cnt_err:
                 * Add matching on source vport index only
                 * for ingress rules in E-Switch configurations.
                 */
-               flow_dv_translate_source_vport(matcher.mask.buf,
-                                              dev_flow->dv.value.buf,
-                                              priv->vport_id,
-                                              0xffff);
+               flow_dv_translate_item_source_vport(matcher.mask.buf,
+                                                   dev_flow->dv.value.buf,
+                                                   priv->vport_id,
+                                                   0xffff);
        }
        for (; items->type != RTE_FLOW_ITEM_TYPE_END; items++) {
                int tunnel = !!(item_flags & MLX5_FLOW_LAYER_TUNNEL);
@@ -3650,9 +3654,7 @@ flow_dv_apply(struct rte_eth_dev *dev, struct rte_flow *flow,
                                         "cannot get drop hash queue");
                                goto error;
                        }
-                       dv->actions[n++] =
-                               mlx5_glue->dv_create_flow_action_dest_ibv_qp
-                               (dv->hrxq->qp);
+                       dv->actions[n++] = dv->hrxq->action;
                } else if (flow->actions &
                           (MLX5_FLOW_ACTION_QUEUE | MLX5_FLOW_ACTION_RSS)) {
                        struct mlx5_hrxq *hrxq;
@@ -3677,9 +3679,7 @@ flow_dv_apply(struct rte_eth_dev *dev, struct rte_flow *flow,
                                goto error;
                        }
                        dv->hrxq = hrxq;
-                       dv->actions[n++] =
-                               mlx5_glue->dv_create_flow_action_dest_ibv_qp
-                               (dv->hrxq->qp);
+                       dv->actions[n++] = dv->hrxq->action;
                }
                dv->flow =
                        mlx5_glue->dv_create_flow(dv->matcher->matcher_object,