[5/8] net/mlx5/hws: fix incorrect port ID on root item convert
Checks
Commit Message
From: Alex Vesker <valex@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: erezsh@nvidia.com
Cc: stable@dpdk.org
Signed-off-by: Alex Vesker <valex@nvidia.com>
Acked-by: Matan Azrad <matan@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(-)
@@ -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) +
@@ -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));