[dpdk-dev] [PATCH v3 3/6] net/mlx5: flow counters simplifying runtime support check

Shahaf Shuler shahafs at mellanox.com
Sun Oct 21 11:20:46 CEST 2018


Friday, October 19, 2018 6:21 PM, Slava Ovsiienko:
> Subject: [PATCH v3 3/6] net/mlx5: flow counters simplifying runtime support
> check

How about "net/mlx5: simplify flow counters support check

> 
> This part of patchset removes the redundant check of counters support in
> runtime. The flag flow_counter_en is eliminated from the code. The Verbs
> create counter function just returns an error if no counter support presented
> in kernel.
> 
> Some log messages regarding the counter support type and presence are
> added.
> 
> mlx5_flow_validate_action_count() is also updated due to flow_counter_en
> flag removal.

In continue to previous patch comments, this patch should only make the needed preparation for the new counters. 
The new counters macro along with implementation should be on a separate commit. 

> 
> Signed-off-by: Viacheslav Ovsiienko <viacheslavo at mellanox.com>
> ---
>  drivers/net/mlx5/mlx5.c      | 15 ++++++++++-----
>  drivers/net/mlx5/mlx5.h      |  1 -
>  drivers/net/mlx5/mlx5_flow.c | 16 +++++++++-------
>  3 files changed, 19 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index
> bb19085..8a33639 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -1009,12 +1009,17 @@
>  	config.hw_csum = !!(attr.device_cap_flags_ex &
> IBV_DEVICE_RAW_IP_CSUM);
>  	DRV_LOG(DEBUG, "checksum offloading is %ssupported",
>  		(config.hw_csum ? "" : "not "));
> -#ifdef HAVE_IBV_DEVICE_COUNTERS_SET_V42
> -	config.flow_counter_en = !!attr.max_counter_sets;
> +#if defined(HAVE_IBV_DEVICE_COUNTERS_SET_V42)
>  	mlx5_glue->describe_counter_set(ctx, 0, &cs_desc);
> -	DRV_LOG(DEBUG, "counter type = %d, num of cs = %ld, attributes =
> %d",
> -		cs_desc.counter_type, cs_desc.num_of_cs,
> -		cs_desc.attributes);
> +	DRV_LOG(DEBUG, "Flow counters are supported (4.2), "
> +		       "type = %d, num of cs = %ld, attr = %d",
> +		       cs_desc.counter_type,
> +		       cs_desc.num_of_cs,
> +		       cs_desc.attributes);

I would refine on saying the counters are supported (since you cannot be sure). 
I would recommend to have a message log only if the macro is not defined to say "flow counters are not supported". This is the only thing we know for sure. 

> +#elif defined(HAVE_IBV_DEVICE_COUNTERS_SET_V45)
> +	DRV_LOG(DEBUG, "Flow counters are supported (4.5)"); #else
> +	DRV_LOG(DEBUG, "Flow counters are not supported");
>  #endif
>  	config.ind_table_max_size =
>  		attr.rss_caps.max_rwq_indirection_table_size;
> diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h index
> d14239c..74d87c0 100644
> --- a/drivers/net/mlx5/mlx5.h
> +++ b/drivers/net/mlx5/mlx5.h
> @@ -114,7 +114,6 @@ struct mlx5_dev_config {
>  	unsigned int tunnel_en:1;
>  	/* Whether tunnel stateless offloads are supported. */
>  	unsigned int mpls_en:1; /* MPLS over GRE/UDP is enabled. */
> -	unsigned int flow_counter_en:1; /* Whether flow counter is
> supported. */
>  	unsigned int cqe_comp:1; /* CQE compression is enabled. */
>  	unsigned int tso:1; /* Whether TSO is supported. */
>  	unsigned int tx_vec_en:1; /* Tx vector is enabled. */ diff --git
> a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index
> fcabab0..c15722d 100644
> --- a/drivers/net/mlx5/mlx5_flow.c
> +++ b/drivers/net/mlx5/mlx5_flow.c
> @@ -921,22 +921,24 @@ uint32_t mlx5_flow_adjust_priority(struct
> rte_eth_dev *dev, int32_t priority,
>   *   0 on success, a negative errno value otherwise and rte_ernno is set.
>   */
>  int
> -mlx5_flow_validate_action_count(struct rte_eth_dev *dev,
> +mlx5_flow_validate_action_count(struct rte_eth_dev *dev __rte_unused,
>  				const struct rte_flow_attr *attr,
>  				struct rte_flow_error *error)
>  {
> -	struct priv *priv = dev->data->dev_private;
> -
> -	if (!priv->config.flow_counter_en)
> -		return rte_flow_error_set(error, ENOTSUP,
> -					  RTE_FLOW_ERROR_TYPE_ACTION,
> NULL,
> -					  "flow counters are not supported.");
> +#if !defined(HAVE_IBV_DEVICE_COUNTERS_SET_V42) && \
> +	!defined(HAVE_IBV_DEVICE_COUNTERS_SET_V45)
> +	(void)attr;
> +	return rte_flow_error_set(error, ENOTSUP,
> +				  RTE_FLOW_ERROR_TYPE_ACTION, NULL,
> +				  "flow counters are not supported."); #else

This ifdef addition is not needed. Just let It fall on the counter creation (like you commit log says). 

>  	if (attr->egress)
>  		return rte_flow_error_set(error, ENOTSUP,
> 
> RTE_FLOW_ERROR_TYPE_ATTR_EGRESS, NULL,
>  					  "count action not supported for "
>  					  "egress");
>  	return 0;
> +#endif
>  }
> 
>  /**
> --
> 1.8.3.1



More information about the dev mailing list