On Tue, Apr 17, 2018 at 11:14:33PM +0800, Xueming Li wrote: > Dump verb flow detail including flow spec type and size for debugging > purpose. > > Signed-off-by: Xueming Li <xuemi...@mellanox.com> > --- > drivers/net/mlx5/mlx5_flow.c | 68 > ++++++++++++++++++++++++++++++++++++------- > drivers/net/mlx5/mlx5_rxq.c | 25 +++++++++++++--- > drivers/net/mlx5/mlx5_utils.h | 6 ++++ > 3 files changed, 85 insertions(+), 14 deletions(-) > > diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c > index a6791c525..371d029c8 100644 > --- a/drivers/net/mlx5/mlx5_flow.c > +++ b/drivers/net/mlx5/mlx5_flow.c > @@ -2050,6 +2050,57 @@ mlx5_flow_create_update_rxqs(struct rte_eth_dev *dev, > struct rte_flow *flow) > } > > /** > + * Dump flow hash RX queue detail. > + * > + * @param dev > + * Pointer to Ethernet device. > + * @param flow > + * Pointer to the rte_flow. > + * @param i > + * Hash RX queue index. > + */ > +static void > +mlx5_flow_dump(struct rte_eth_dev *dev __rte_unused, > + struct rte_flow *flow __rte_unused, > + unsigned int i __rte_unused)
Can this "i" be renamed to hrxq_idx to have something more understandable across the code? > +{ > +#ifndef NDEBUG > + uintptr_t spec_ptr; > + uint16_t j; > + char buf[256]; > + uint8_t off; > + > + spec_ptr = (uintptr_t)(flow->frxq[i].ibv_attr + 1); > + for (j = 0, off = 0; j < flow->frxq[i].ibv_attr->num_of_specs; > + j++) { > + struct ibv_flow_spec *spec = (void *)spec_ptr; > + off += sprintf(buf + off, " %x(%hu)", spec->hdr.type, > + spec->hdr.size); > + spec_ptr += spec->hdr.size; > + } > + DRV_LOG(DEBUG, > + "port %u Verbs flow %p type %u: hrxq:%p qp:%p ind:%p, > hash:%lx/%u" > + " specs:%hhu(%hu), priority:%hu, type:%d, flags:%x," > + " comp_mask:%x specs:%s", > + dev->data->port_id, (void *)flow, i, > + (void *)flow->frxq[i].hrxq, > + (void *)flow->frxq[i].hrxq->qp, > + (void *)flow->frxq[i].hrxq->ind_table, > + flow->frxq[i].hash_fields | > + (flow->tunnel && > + flow->rss_conf.level > 1 ? (uint32_t)IBV_RX_HASH_INNER : 0), > + flow->rss_conf.queue_num, > + flow->frxq[i].ibv_attr->num_of_specs, > + flow->frxq[i].ibv_attr->size, > + flow->frxq[i].ibv_attr->priority, > + flow->frxq[i].ibv_attr->type, > + flow->frxq[i].ibv_attr->flags, > + flow->frxq[i].ibv_attr->comp_mask, > + buf); > +#endif >[...] Thanks, -- Nélio Laranjeiro 6WIND