[dpdk-stable] [PATCH v3] net/mlx5: optimize Rx hash fields conversion

Raslan Darawsheh rasland at mellanox.com
Sun Jan 19 17:41:28 CET 2020


Hi,

> -----Original Message-----
> From: Dekel Peled <dekelp at mellanox.com>
> Sent: Wednesday, January 15, 2020 11:20 PM
> To: Matan Azrad <matan at mellanox.com>; Slava Ovsiienko
> <viacheslavo at mellanox.com>
> Cc: Raslan Darawsheh <rasland at mellanox.com>; Ori Kam
> <orika at mellanox.com>; dev at dpdk.org; stable at dpdk.org
> Subject: [PATCH v3] net/mlx5: optimize Rx hash fields conversion
> 
> Previous fix added translation of Rx hash fields to PRM format.
> 
> This patch optimizes the fix, to perform value translation only
> if value is not zero.
> In case value is zero, there is no need to translate it.
> 
> Fixes: 51035775c3c7 ("net/mlx5: fix setting of Rx hash fields")
> Cc: stable at dpdk.org
> 
> Signed-off-by: Dekel Peled <dekelp at mellanox.com>
> Acked-by: Viacheslav Ovsiienko <viacheslavo at mellanox.com>
> 
> ---
> v2: Modify title for clarity, change 'fix' to 'optimize'.
>     Remove the 'Fixes' label.
> v3: Add back the 'Fixes' label.
> ---
> 
> ---
>  drivers/net/mlx5/mlx5_rxq.c | 34 +++++++++++++++++++---------------
>  1 file changed, 19 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c
> index ca25e32..c936a7f 100644
> --- a/drivers/net/mlx5/mlx5_rxq.c
> +++ b/drivers/net/mlx5/mlx5_rxq.c
> @@ -2460,7 +2460,6 @@ struct mlx5_hrxq *
>  		}
>  	} else { /* ind_tbl->type == MLX5_IND_TBL_TYPE_DEVX */
>  		struct mlx5_devx_tir_attr tir_attr;
> -		struct mlx5_rx_hash_field_select *rx_hash_field_select;
>  		uint32_t i;
>  		uint32_t lro = 1;
> 
> @@ -2474,23 +2473,27 @@ struct mlx5_hrxq *
>  		memset(&tir_attr, 0, sizeof(tir_attr));
>  		tir_attr.disp_type = MLX5_TIRC_DISP_TYPE_INDIRECT;
>  		tir_attr.rx_hash_fn = MLX5_RX_HASH_FN_TOEPLITZ;
> -#ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT
>  		tir_attr.tunneled_offload_en = !!tunnel;
> -		/* Translate hash_fields bitmap to PRM format. */
> -		rx_hash_field_select = hash_fields & IBV_RX_HASH_INNER ?
> -				       &tir_attr.rx_hash_field_selector_inner :
> -				       &tir_attr.rx_hash_field_selector_outer;
> +		/* If needed, translate hash_fields bitmap to PRM format. */
> +		if (hash_fields) {
> +#ifdef HAVE_IBV_DEVICE_TUNNEL_SUPPORT
> +			struct mlx5_rx_hash_field_select
> *rx_hash_field_select =
> +					hash_fields & IBV_RX_HASH_INNER ?
> +
> 	&tir_attr.rx_hash_field_selector_inner :
> +
> 	&tir_attr.rx_hash_field_selector_outer;
>  #else
> -		rx_hash_field_select =
> &tir_attr.rx_hash_field_selector_outer;
> +			struct mlx5_rx_hash_field_select
> *rx_hash_field_select =
> +
> 	&tir_attr.rx_hash_field_selector_outer;
>  #endif
> -		/* 1 bit: 0: IPv4, 1: IPv6. */
> -		rx_hash_field_select->l3_prot_type =
> -			!!(hash_fields & MLX5_IPV6_IBV_RX_HASH);
> -		/* 1 bit: 0: TCP, 1: UDP. */
> -		rx_hash_field_select->l4_prot_type =
> -			!!(hash_fields & MLX5_UDP_IBV_RX_HASH);
> -		/* Bitmask which sets which fields to use in RX Hash. */
> -		rx_hash_field_select->selected_fields =
> +
> +			/* 1 bit: 0: IPv4, 1: IPv6. */
> +			rx_hash_field_select->l3_prot_type =
> +				!!(hash_fields & MLX5_IPV6_IBV_RX_HASH);
> +			/* 1 bit: 0: TCP, 1: UDP. */
> +			rx_hash_field_select->l4_prot_type =
> +				!!(hash_fields & MLX5_UDP_IBV_RX_HASH);
> +			/* Bitmask which sets which fields to use in RX Hash.
> */
> +			rx_hash_field_select->selected_fields =
>  			((!!(hash_fields & MLX5_L3_SRC_IBV_RX_HASH)) <<
> 
> MLX5_RX_HASH_FIELD_SELECT_SELECTED_FIELDS_SRC_IP) |
>  			(!!(hash_fields & MLX5_L3_DST_IBV_RX_HASH)) <<
> @@ -2499,6 +2502,7 @@ struct mlx5_hrxq *
> 
> MLX5_RX_HASH_FIELD_SELECT_SELECTED_FIELDS_L4_SPORT |
>  			(!!(hash_fields & MLX5_L4_DST_IBV_RX_HASH)) <<
> 
> MLX5_RX_HASH_FIELD_SELECT_SELECTED_FIELDS_L4_DPORT;
> +		}
>  		if (rxq_ctrl->obj->type ==
> MLX5_RXQ_OBJ_TYPE_DEVX_HAIRPIN)
>  			tir_attr.transport_domain = priv->sh->td->id;
>  		else
> --
> 1.8.3.1

Fixed fixes reference,
patch applied to next-net-mlx,

Kindest regards,
Raslan Darawsheh


More information about the stable mailing list