When using other process to dump flow information, the modify field
information cannot be dumpped due to incorrect lcore value. Add loop
to get modify field information from all lcore to fix the issue.
Fixes: a7ac7fae4919 ("net/mlx5: enhance flow dump")
Cc: [email protected]
Signed-off-by: Sean Zhang <[email protected]>
Acked-by: Viacheslav Ovsiienko <[email protected]>
---
drivers/net/mlx5/mlx5_flow.c | 58 +++++++++++++++++++++++++-----------
1 file changed, 41 insertions(+), 17 deletions(-)
diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c
index cf83db7b60..abb86241fc 100644
--- a/drivers/net/mlx5/mlx5_flow.c
+++ b/drivers/net/mlx5/mlx5_flow.c
@@ -10390,23 +10390,47 @@ mlx5_flow_dev_dump_sh_all(struct rte_eth_dev *dev,
}
i = lcore_index;
- for (j = 0; j <= h->mask; j++) {
- l_inconst = &h->buckets[j].l;
- if (!l_inconst || !l_inconst->cache[i])
- continue;
-
- e = LIST_FIRST(&l_inconst->cache[i]->h);
- while (e) {
- modify_hdr =
- (struct mlx5_flow_dv_modify_hdr_resource *)e;
- data = (const uint8_t *)modify_hdr->actions;
- size = (size_t)(modify_hdr->actions_num) * 8;
- actions_num = modify_hdr->actions_num;
- id = (uint64_t)(uintptr_t)modify_hdr->action;
- type = DR_DUMP_REC_TYPE_PMD_MODIFY_HDR;
- save_dump_file(data, size, type, id,
- (void *)(&actions_num), file);
- e = LIST_NEXT(e, next);
+ if (lcore_index == MLX5_LIST_NLCORE) {
+ for (i = 0; i <= (uint32_t)lcore_index; i++) {
+ for (j = 0; j <= h->mask; j++) {
+ l_inconst = &h->buckets[j].l;
+ if (!l_inconst || !l_inconst->cache[i])
+ continue;
+
+ e = LIST_FIRST(&l_inconst->cache[i]->h);
+ while (e) {
+ modify_hdr =
+ (struct
mlx5_flow_dv_modify_hdr_resource *)e;
+ data = (const uint8_t
*)modify_hdr->actions;
+ size =
(size_t)(modify_hdr->actions_num) * 8;
+ actions_num =
modify_hdr->actions_num;
+ id =
(uint64_t)(uintptr_t)modify_hdr->action;
+ type =
DR_DUMP_REC_TYPE_PMD_MODIFY_HDR;
+ save_dump_file(data, size,
type, id,
+ (void
*)(&actions_num), file);
+ e = LIST_NEXT(e, next);
+ }
+ }
+ }
+ } else {
+ for (j = 0; j <= h->mask; j++) {
+ l_inconst = &h->buckets[j].l;
+ if (!l_inconst || !l_inconst->cache[i])
+ continue;
+
+ e = LIST_FIRST(&l_inconst->cache[i]->h);
+ while (e) {
+ modify_hdr =
+ (struct
mlx5_flow_dv_modify_hdr_resource *)e;
+ data = (const uint8_t
*)modify_hdr->actions;
+ size =
(size_t)(modify_hdr->actions_num) * 8;
+ actions_num = modify_hdr->actions_num;
+ id =
(uint64_t)(uintptr_t)modify_hdr->action;
+ type = DR_DUMP_REC_TYPE_PMD_MODIFY_HDR;
+ save_dump_file(data, size, type, id,
+ (void *)(&actions_num),
file);
+ e = LIST_NEXT(e, next);
+ }
}
}
--
2.34.1