[PATCH] net/mlx5: fix IPv6 DSCP offset in NT HWS API
Bing Zhao
bingz at nvidia.com
Wed Nov 12 09:58:35 CET 2025
Hi,
> -----Original Message-----
> From: Minggang(Gavin) Li <gavinl at nvidia.com>
> Sent: Tuesday, September 30, 2025 3:28 PM
> To: Matan Azrad <matan at nvidia.com>; Slava Ovsiienko
> <viacheslavo at nvidia.com>; Ori Kam <orika at nvidia.com>; NBU-Contact-Thomas
> Monjalon (EXTERNAL) <thomas at monjalon.net>; Dariusz Sosnowski
> <dsosnowski at nvidia.com>; Bing Zhao <bingz at nvidia.com>; Suanming Mou
> <suanmingm at nvidia.com>; Minggang(Gavin) Li <gavinl at nvidia.com>
> Cc: dev at dpdk.org; Raslan Darawsheh <rasland at nvidia.com>; stable at dpdk.org
> Subject: [PATCH] net/mlx5: fix IPv6 DSCP offset in NT HWS API
>
> The RTE action process in the HWS non-template API differs from the
> process in SWS. The bit shift handling for IPv6 DSCP was not handled in
> HWS, resulting in incorrect data in the field.
>
> To resolve this, bit shift handling should be added to HWS.
>
> Fixes: ec1e7a5ceb69 ("net/mlx5: update IPv6 traffic class modification")
> Cc: stable at dpdk.org
> Signed-off-by: Gavin Li <gavinl at nvidia.com>
> ---
> drivers/net/mlx5/mlx5_flow.h | 5 +++++
> drivers/net/mlx5/mlx5_flow_dv.c | 6 ------
> drivers/net/mlx5/mlx5_flow_hw.c | 5 +++++
> 3 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h
> index ff61706054..6ec853f018 100644
> --- a/drivers/net/mlx5/mlx5_flow.h
> +++ b/drivers/net/mlx5/mlx5_flow.h
> @@ -3680,6 +3680,11 @@ void
> mlx5_indirect_list_handles_release(struct rte_eth_dev *dev);
>
> bool mlx5_flow_is_steering_disabled(void);
> +static inline bool
> +mlx5_dv_modify_ipv6_traffic_class_supported(struct mlx5_priv *priv) {
> + return priv->sh->phdev->config.ipv6_tc_fallback ==
> MLX5_IPV6_TC_OK; }
>
> #ifdef HAVE_MLX5_HWS_SUPPORT
>
> diff --git a/drivers/net/mlx5/mlx5_flow_dv.c
> b/drivers/net/mlx5/mlx5_flow_dv.c index bcce1597e2..517a5e530d 100644
> --- a/drivers/net/mlx5/mlx5_flow_dv.c
> +++ b/drivers/net/mlx5/mlx5_flow_dv.c
> @@ -1638,12 +1638,6 @@ mlx5_modify_flex_item(const struct rte_eth_dev
> *dev,
> }
> }
>
> -static inline bool
> -mlx5_dv_modify_ipv6_traffic_class_supported(struct mlx5_priv *priv) -{
> - return priv->sh->phdev->config.ipv6_tc_fallback == MLX5_IPV6_TC_OK;
> -}
> -
> void
> mlx5_flow_field_id_to_modify_info
> (const struct rte_flow_field_data *data, diff --git
> a/drivers/net/mlx5/mlx5_flow_hw.c b/drivers/net/mlx5/mlx5_flow_hw.c index
> 9a0aa1827e..628a47f2ce 100644
> --- a/drivers/net/mlx5/mlx5_flow_hw.c
> +++ b/drivers/net/mlx5/mlx5_flow_hw.c
> @@ -1613,6 +1613,11 @@ flow_hw_modify_field_compile(struct rte_eth_dev
> *dev,
> value = *(const uint8_t *)item.spec << 24;
> value = rte_cpu_to_be_32(value);
> item.spec = &value;
> + } else if (conf->dst.field == RTE_FLOW_FIELD_IPV6_DSCP &&
> + !(mask[0] & MLX5_IPV6_HDR_ECN_MASK) &&
> + mlx5_dv_modify_ipv6_traffic_class_supported(dev-
> >data->dev_private)) {
> + value = *(const unaligned_uint32_t *)item.spec <<
> MLX5_IPV6_HDR_DSCP_SHIFT;
> + item.spec = &value;
> }
> } else {
> type = conf->operation == RTE_FLOW_MODIFY_SET ?
> --
> 2.34.1
Maybe the title can be changed to non-template API directly instead of NT HWS?
Acked-by: Bing Zhao <bingz at nvidia.com>
More information about the dev
mailing list