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: sta...@dpdk.org Signed-off-by: Sean Zhang <xiazh...@nvidia.com> Acked-by: Viacheslav Ovsiienko <viachesl...@nvidia.com> --- 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