From: Alex Vesker <va...@nvidia.com>

When calling item convert function we need to pass the port_id
in the attributes. This value should be passed not only for cases
that match on PORT related items, to resolve we will always pass it.

Fixes: 572fe9ef2f46 ("net/mlx5/hws: fix port ID for root table")
Cc: ere...@nvidia.com
Cc: sta...@dpdk.org

Signed-off-by: Alex Vesker <va...@nvidia.com>
Acked-by: Matan Azrad <ma...@nvidia.com>
---
 drivers/net/mlx5/hws/mlx5dr_matcher.c | 20 +++++---------------
 drivers/net/mlx5/hws/mlx5dr_rule.c    | 22 ++++++----------------
 2 files changed, 11 insertions(+), 31 deletions(-)

diff --git a/drivers/net/mlx5/hws/mlx5dr_matcher.c 
b/drivers/net/mlx5/hws/mlx5dr_matcher.c
index 6a939eb031..dfa2cd435c 100644
--- a/drivers/net/mlx5/hws/mlx5dr_matcher.c
+++ b/drivers/net/mlx5/hws/mlx5dr_matcher.c
@@ -1231,7 +1231,6 @@ static int mlx5dr_matcher_init_root(struct mlx5dr_matcher 
*matcher)
        struct mlx5dv_flow_match_parameters *mask;
        struct mlx5_flow_attr flow_attr = {0};
        struct rte_flow_error rte_error;
-       struct rte_flow_item *item;
        uint8_t match_criteria;
        int ret;
 
@@ -1260,20 +1259,11 @@ static int mlx5dr_matcher_init_root(struct 
mlx5dr_matcher *matcher)
                return rte_errno;
        }
 
-       /* We need the port id in case of matching representor */
-       item = matcher->mt[0].items;
-       while (item->type != RTE_FLOW_ITEM_TYPE_END) {
-               if (item->type == RTE_FLOW_ITEM_TYPE_PORT_REPRESENTOR ||
-                   item->type == RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT) {
-                       ret = flow_hw_get_port_id_from_ctx(ctx, 
&flow_attr.port_id);
-                       if (ret) {
-                               DR_LOG(ERR, "Failed to get port id for dev %s",
-                                      ctx->ibv_ctx->device->name);
-                               rte_errno = EINVAL;
-                               return rte_errno;
-                       }
-               }
-               ++item;
+       ret = flow_hw_get_port_id_from_ctx(ctx, &flow_attr.port_id);
+       if (ret) {
+               DR_LOG(ERR, "Failed to get port id for dev %s", 
ctx->ibv_ctx->device->name);
+               rte_errno = EINVAL;
+               return rte_errno;
        }
 
        mask = simple_calloc(1, MLX5_ST_SZ_BYTES(fte_match_param) +
diff --git a/drivers/net/mlx5/hws/mlx5dr_rule.c 
b/drivers/net/mlx5/hws/mlx5dr_rule.c
index 06d8e66f63..1edb7eac74 100644
--- a/drivers/net/mlx5/hws/mlx5dr_rule.c
+++ b/drivers/net/mlx5/hws/mlx5dr_rule.c
@@ -694,29 +694,19 @@ int mlx5dr_rule_create_root_no_comp(struct mlx5dr_rule 
*rule,
                                    struct mlx5dr_rule_action rule_actions[])
 {
        struct mlx5dv_flow_matcher *dv_matcher = rule->matcher->dv_matcher;
+       struct mlx5dr_context *ctx = rule->matcher->tbl->ctx;
        struct mlx5dv_flow_match_parameters *value;
        struct mlx5_flow_attr flow_attr = {0};
        struct mlx5dv_flow_action_attr *attr;
-       const struct rte_flow_item *cur_item;
        struct rte_flow_error error;
        uint8_t match_criteria;
        int ret;
 
-       /* We need the port id in case of matching representor */
-       cur_item = items;
-       while (cur_item->type != RTE_FLOW_ITEM_TYPE_END) {
-               if (cur_item->type == RTE_FLOW_ITEM_TYPE_PORT_REPRESENTOR ||
-                   cur_item->type == RTE_FLOW_ITEM_TYPE_REPRESENTED_PORT) {
-                       ret = 
flow_hw_get_port_id_from_ctx(rule->matcher->tbl->ctx,
-                                                          &flow_attr.port_id);
-                       if (ret) {
-                               DR_LOG(ERR, "Failed to get port id for dev %s",
-                                      
rule->matcher->tbl->ctx->ibv_ctx->device->name);
-                               rte_errno = EINVAL;
-                               return rte_errno;
-                       }
-               }
-               ++cur_item;
+       ret = flow_hw_get_port_id_from_ctx(ctx, &flow_attr.port_id);
+       if (ret) {
+               DR_LOG(ERR, "Failed to get port id for dev %s", 
ctx->ibv_ctx->device->name);
+               rte_errno = EINVAL;
+               return rte_errno;
        }
 
        attr = simple_calloc(num_actions, sizeof(*attr));
-- 
2.39.3

Reply via email to