Test-Label: iol-testing Test-Status: WARNING http://dpdk.org/patch/123950 _apply patch failure_ Submitter: Rongwei Liu Date: Wednesday, February 15 2023 11:52:51 Applied on: CommitID:04ed18cd41f12ea1487581731ef56185d902d827 Apply patch set 123950-123953 failed: Checking patch drivers/net/mlx5/hws/mlx5dr_definer.c... error: while searching for: DR_SET(tag, val, fc->byte_off, 0, fc->bit_mask); } static void mlx5dr_definer_gre_key_set(struct mlx5dr_definer_fc *fc, const void *item_spec, error: patch failed: drivers/net/mlx5/hws/mlx5dr_definer.c:309 error: while searching for: } } static int mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, struct mlx5dr_match_template *mt, error: patch failed: drivers/net/mlx5/hws/mlx5dr_definer.c:1750 error: while searching for: item_flags |= cd.tunnel ? MLX5_FLOW_ITEM_INNER_IPV6_ROUTING_EXT : MLX5_FLOW_ITEM_OUTER_IPV6_ROUTING_EXT; break; default: DR_LOG(ERR, "Unsupported item type %d", items->type); rte_errno = ENOTSUP; error: patch failed: drivers/net/mlx5/hws/mlx5dr_definer.c:1877 Checking patch drivers/net/mlx5/mlx5.c... Hunk #1 succeeded at 1027 (offset -6 lines). Checking patch drivers/net/mlx5/mlx5.h... Hunk #1 succeeded at 2238 (offset -17 lines). Checking patch drivers/net/mlx5/mlx5_flow.h... Hunk #1 succeeded at 1225 (offset -4 lines). Checking patch drivers/net/mlx5/mlx5_flow_dv.c... Hunk #1 succeeded at 10588 (offset -80 lines). Checking patch drivers/net/mlx5/mlx5_flow_flex.c... error: while searching for: MLX5_ASSERT(mlx5_flex_index(priv, tp) >= 0); for (i = 0; i < tp->mapnum; i++) { struct mlx5_flex_pattern_field *map = tp->map + i; uint32_t id = map->reg_id; uint32_t def = (RTE_BIT64(map->width) - 1) << map->shift; uint32_t val, msk; /* Skip placeholders for DUMMY fields. */ if (id == MLX5_INVALID_SAMPLE_REG_ID) { pos += map->width; continue; } val = mlx5_flex_get_bitfield(spec, pos, map->width, map->shift); msk = mlx5_flex_get_bitfield(mask, pos, map->width, map->shift); MLX5_ASSERT(map->width); MLX5_ASSERT(id < tp->devx_fp->num_samples); if (tp->tunnel_mode == FLEX_TUNNEL_MODE_MULTI && is_inner) { uint32_t num_samples = tp->devx_fp->num_samples / 2; MLX5_ASSERT(tp->devx_fp->num_samples % 2 == 0); MLX5_ASSERT(id < num_samples); id += num_samples; } if (attr->ext_sample_id) sample_id = tp->devx_fp->sample_ids[id].sample_id; else error: patch failed: drivers/net/mlx5/mlx5_flow_flex.c:240 Checking patch drivers/net/mlx5/mlx5_flow_hw.c... Hunk #1 succeeded at 4331 (offset -8 lines). error: while searching for: case RTE_FLOW_ITEM_TYPE_ICMP6_ECHO_REPLY: case RTE_FLOW_ITEM_TYPE_CONNTRACK: case RTE_FLOW_ITEM_TYPE_IPV6_ROUTING_EXT: break; case RTE_FLOW_ITEM_TYPE_INTEGRITY: /* error: patch failed: drivers/net/mlx5/mlx5_flow_hw.c:4743 Hunk #3 succeeded at 4839 (offset -12 lines). error: while searching for: return NULL; } } __atomic_fetch_add(&it->refcnt, 1, __ATOMIC_RELAXED); LIST_INSERT_HEAD(&priv->flow_hw_itt, it, next); return it; error: patch failed: drivers/net/mlx5/mlx5_flow_hw.c:4890 Hunk #5 succeeded at 4918 (offset -36 lines). error: while searching for: MLX5_FLOW_ITEM_INNER_IPV6_ROUTING_EXT)) mlx5_free_srh_flex_parser(dev); LIST_REMOVE(template, next); claim_zero(mlx5dr_match_template_destroy(template->mt)); mlx5_free(template); return 0; error: patch failed: drivers/net/mlx5/mlx5_flow_hw.c:4925 Applying patch drivers/net/mlx5/hws/mlx5dr_definer.c with 3 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Applied patch drivers/net/mlx5/mlx5.c cleanly. Applied patch drivers/net/mlx5/mlx5.h cleanly. Applied patch drivers/net/mlx5/mlx5_flow.h cleanly. Applied patch drivers/net/mlx5/mlx5_flow_dv.c cleanly. Applying patch drivers/net/mlx5/mlx5_flow_flex.c with 1 reject... Hunk #1 applied cleanly. Rejected hunk #2. Applying patch drivers/net/mlx5/mlx5_flow_hw.c with 3 rejects... Hunk #1 applied cleanly. Rejected hunk #2. Hunk #3 applied cleanly. Rejected hunk #4. Hunk #5 applied cleanly. Rejected hunk #6. diff a/drivers/net/mlx5/hws/mlx5dr_definer.c b/drivers/net/mlx5/hws/mlx5dr_definer.c (rejected hunks) @@ -309,6 +309,43 @@ mlx5dr_definer_ipv6_routing_ext_set(struct mlx5dr_definer_fc *fc, DR_SET(tag, val, fc->byte_off, 0, fc->bit_mask); } +static void +mlx5dr_definer_flex_parser_set(struct mlx5dr_definer_fc *fc, + const void *item, + uint8_t *tag, bool is_inner) +{ + const struct rte_flow_item_flex *flex = item; + uint32_t byte_off, val, idx; + int ret; + + val = 0; + byte_off = MLX5_BYTE_OFF(definer_hl, flex_parser.flex_parser_0); + idx = fc->fname - MLX5DR_DEFINER_FNAME_FLEX_PARSER_0; + byte_off -= idx * sizeof(uint32_t); + ret = mlx5_flex_get_parser_value_per_byte_off(flex, flex->handle, byte_off, + false, is_inner, &val); + if (ret == -1 || !val) + return; + + DR_SET(tag, val, fc->byte_off, 0, fc->bit_mask); +} + +static void +mlx5dr_definer_flex_parser_inner_set(struct mlx5dr_definer_fc *fc, + const void *item, + uint8_t *tag) +{ + mlx5dr_definer_flex_parser_set(fc, item, tag, true); +} + +static void +mlx5dr_definer_flex_parser_outer_set(struct mlx5dr_definer_fc *fc, + const void *item, + uint8_t *tag) +{ + mlx5dr_definer_flex_parser_set(fc, item, tag, false); +} + static void mlx5dr_definer_gre_key_set(struct mlx5dr_definer_fc *fc, const void *item_spec, @@ -1750,6 +1787,47 @@ mlx5dr_definer_check_item_range_supp(struct rte_flow_item *item) } } +static int +mlx5dr_definer_conv_item_flex_parser(struct mlx5dr_definer_conv_data *cd, + struct rte_flow_item *item, + int item_idx) +{ + uint32_t base_off = MLX5_BYTE_OFF(definer_hl, flex_parser.flex_parser_0); + const struct rte_flow_item_flex *v, *m; + enum mlx5dr_definer_fname fname; + struct mlx5dr_definer_fc *fc; + uint32_t i, mask, byte_off; + bool is_inner = cd->tunnel; + int ret; + + m = item->mask; + v = item->spec; + mask = 0; + for (i = 0; i < MLX5_GRAPH_NODE_SAMPLE_NUM; i++) { + byte_off = base_off - i * sizeof(uint32_t); + ret = mlx5_flex_get_parser_value_per_byte_off(m, v->handle, byte_off, + true, is_inner, &mask); + if (ret == -1) { + rte_errno = EINVAL; + return rte_errno; + } + + if (!mask) + continue; + + fname = MLX5DR_DEFINER_FNAME_FLEX_PARSER_0; + fname += (enum mlx5dr_definer_fname)i; + fc = &cd->fc[fname]; + fc->byte_off = byte_off; + fc->item_idx = item_idx; + fc->tag_set = cd->tunnel ? &mlx5dr_definer_flex_parser_inner_set : + &mlx5dr_definer_flex_parser_outer_set; + fc->tag_mask_set = &mlx5dr_definer_ones_set; + fc->bit_mask = mask; + } + return 0; +} + static int mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, struct mlx5dr_match_template *mt, @@ -1877,6 +1955,11 @@ mlx5dr_definer_conv_items_to_hl(struct mlx5dr_context *ctx, item_flags |= cd.tunnel ? MLX5_FLOW_ITEM_INNER_IPV6_ROUTING_EXT : MLX5_FLOW_ITEM_OUTER_IPV6_ROUTING_EXT; break; + case RTE_FLOW_ITEM_TYPE_FLEX: + ret = mlx5dr_definer_conv_item_flex_parser(&cd, items, i); + item_flags |= cd.tunnel ? MLX5_FLOW_ITEM_INNER_FLEX : + MLX5_FLOW_ITEM_OUTER_FLEX; + break; default: DR_LOG(ERR, "Unsupported item type %d", items->type); rte_errno = ENOTSUP; diff a/drivers/net/mlx5/mlx5_flow_flex.c b/drivers/net/mlx5/mlx5_flow_flex.c (rejected hunks) @@ -240,26 +333,17 @@ mlx5_flex_flow_translate_item(struct rte_eth_dev *dev, MLX5_ASSERT(mlx5_flex_index(priv, tp) >= 0); for (i = 0; i < tp->mapnum; i++) { struct mlx5_flex_pattern_field *map = tp->map + i; - uint32_t id = map->reg_id; - uint32_t def = (RTE_BIT64(map->width) - 1) << map->shift; - uint32_t val, msk; + uint32_t val, msk, def; + int id = mlx5_flex_get_sample_id(tp, i, &pos, is_inner, &def); - /* Skip placeholders for DUMMY fields. */ - if (id == MLX5_INVALID_SAMPLE_REG_ID) { - pos += map->width; + if (id == -1) continue; - } + MLX5_ASSERT(id < (int)tp->devx_fp->num_samples); + if (id >= (int)tp->devx_fp->num_samples || + id >= MLX5_GRAPH_NODE_SAMPLE_NUM) + return; val = mlx5_flex_get_bitfield(spec, pos, map->width, map->shift); msk = mlx5_flex_get_bitfield(mask, pos, map->width, map->shift); - MLX5_ASSERT(map->width); - MLX5_ASSERT(id < tp->devx_fp->num_samples); - if (tp->tunnel_mode == FLEX_TUNNEL_MODE_MULTI && is_inner) { - uint32_t num_samples = tp->devx_fp->num_samples / 2; - - MLX5_ASSERT(tp->devx_fp->num_samples % 2 == 0); - MLX5_ASSERT(id < num_samples); - id += num_samples; - } if (attr->ext_sample_id) sample_id = tp->devx_fp->sample_ids[id].sample_id; else diff a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c (rejected hunks) @@ -4743,6 +4773,7 @@ flow_hw_pattern_validate(struct rte_eth_dev *dev, case RTE_FLOW_ITEM_TYPE_ICMP6_ECHO_REPLY: case RTE_FLOW_ITEM_TYPE_CONNTRACK: case RTE_FLOW_ITEM_TYPE_IPV6_ROUTING_EXT: + case RTE_FLOW_ITEM_TYPE_FLEX: break; case RTE_FLOW_ITEM_TYPE_INTEGRITY: /* @@ -4890,6 +4922,19 @@ flow_hw_pattern_template_create(struct rte_eth_dev *dev, return NULL; } } + for (i = 0; items[i].type != RTE_FLOW_ITEM_TYPE_END; ++i) { + if (items[i].type == RTE_FLOW_ITEM_TYPE_FLEX) { + const struct rte_flow_item_flex *spec = + (const struct rte_flow_item_flex *)items[i].spec; + struct rte_flow_item_flex_handle *handle = spec->handle; + + if (flow_hw_flex_item_acquire(dev, handle, &it->flex_item)) { + claim_zero(mlx5dr_match_template_destroy(it->mt)); + mlx5_free(it); + return NULL; + } + } + } __atomic_fetch_add(&it->refcnt, 1, __ATOMIC_RELAXED); LIST_INSERT_HEAD(&priv->flow_hw_itt, it, next); return it; @@ -4925,6 +4970,7 @@ flow_hw_pattern_template_destroy(struct rte_eth_dev *dev __rte_unused, MLX5_FLOW_ITEM_INNER_IPV6_ROUTING_EXT)) mlx5_free_srh_flex_parser(dev); LIST_REMOVE(template, next); + flow_hw_flex_item_release(dev, &template->flex_item); claim_zero(mlx5dr_match_template_destroy(template->mt)); mlx5_free(template); return 0; Checking patch drivers/common/mlx5/mlx5_prm.h... error: while searching for: MLX5_MODI_GTPU_FIRST_EXT_DW_0 = 0x76, MLX5_MODI_HASH_RESULT = 0x81, MLX5_MODI_OUT_IPV6_NEXT_HDR = 0x4A, }; /* Total number of metadata reg_c's. */ error: patch failed: drivers/common/mlx5/mlx5_prm.h:761 Checking patch drivers/net/mlx5/mlx5_flow.h... error: drivers/net/mlx5/mlx5_flow.h: does not match index Checking patch drivers/net/mlx5/mlx5_flow_dv.c... error: drivers/net/mlx5/mlx5_flow_dv.c: does not match index Checking patch drivers/net/mlx5/mlx5_flow_hw.c... error: drivers/net/mlx5/mlx5_flow_hw.c: does not match index Applying patch drivers/common/mlx5/mlx5_prm.h with 1 reject... Rejected hunk #1. diff a/drivers/common/mlx5/mlx5_prm.h b/drivers/common/mlx5/mlx5_prm.h (rejected hunks) @@ -761,6 +761,7 @@ enum mlx5_modification_field { MLX5_MODI_GTPU_FIRST_EXT_DW_0 = 0x76, MLX5_MODI_HASH_RESULT = 0x81, MLX5_MODI_OUT_IPV6_NEXT_HDR = 0x4A, + MLX5_MODI_INVALID = INT_MAX, }; /* Total number of metadata reg_c's. */ Checking patch drivers/net/mlx5/mlx5_flow_dv.c... error: drivers/net/mlx5/mlx5_flow_dv.c: does not match index Checking patch doc/guides/nics/mlx5.rst... error: while searching for: - Sub-Function. - Matching on represented port. - Matching on IPv6 routing extension header. Limitations error: patch failed: doc/guides/nics/mlx5.rst:107 Hunk #2 succeeded at 282 (offset -11 lines). Applying patch doc/guides/nics/mlx5.rst with 1 reject... Rejected hunk #1. Hunk #2 applied cleanly. diff a/doc/guides/nics/mlx5.rst b/doc/guides/nics/mlx5.rst (rejected hunks) @@ -107,6 +107,7 @@ Features - Sub-Function. - Matching on represented port. - Matching on IPv6 routing extension header. +- Modify flex item field. Limitations https://lab.dpdk.org/results/dashboard/patchsets/25407/ UNH-IOL DPDK Community Lab