All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yevgeny Kliteynik <kliteyn@nvidia.com>
To: Alexandre Cassen <acassen@corp.free.fr>,
	Saeed Mahameed <saeedm@nvidia.com>,
	Leon Romanovsky <leon@kernel.org>,
	Tariq Toukan <tariqt@nvidia.com>, Mark Bloch <mbloch@nvidia.com>
Cc: Andrew Lunn <andrew+netdev@lunn.ch>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@kernel.org>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Moshe Shemesh <moshe@nvidia.com>,
	Hamdan Agbariya <hamdani@nvidia.com>,
	netdev@vger.kernel.org, linux-rdma@vger.kernel.org
Subject: Re: [PATCH net v2 2/2] net/mlx5: HWS, fix modify header pool match for copy actions
Date: Mon, 19 Oct 2026 00:43:27 +0300	[thread overview]
Message-ID: <b3e5ce46-b6a7-4b90-b92e-2ee737ae79cb@nvidia.com> (raw)
In-Reply-To: <20261012101937.1335231-3-acassen@corp.free.fr>

On 12-Oct-26 13:19, Alexandre Cassen wrote:
> mlx5_fs_hws_mh_pool_match() compares a single dword of each action
> since rules pass their values as arguments. Copy and add_field actions
> keep their destination in the second dword and HWS reads them from the
> pattern alone. Two modify headers whose copies differ only in
> destination then share a pool and the second rule writes to the wrong
> field.
> 
> Use the HWS core comparison that checks these actions in full.
> 
> Found while checking a Sashiko AI review report and confirmed against
> the HWS pattern code. Not reproduced. No in-kernel user puts such
> actions on the FDB but RDMA flow actions can.
> 
> Fixes: b36315ca69cb ("net/mlx5: fs, add HWS modify header API function")
> Signed-off-by: Alexandre Cassen <acassen@corp.free.fr>
> ---
>   .../mlx5/core/steering/hws/fs_hws_pools.c         | 10 +++-------
>   .../mellanox/mlx5/core/steering/hws/mlx5hws.h     | 15 +++++++++++++++
>   .../mellanox/mlx5/core/steering/hws/pat_arg.c     |  8 ++++----
>   3 files changed, 22 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws_pools.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws_pools.c
> index 86828e329187..cd888756e942 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws_pools.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/fs_hws_pools.c
> @@ -389,7 +389,7 @@ bool mlx5_fs_hws_mh_pool_match(struct mlx5_fs_pool *mh_pool,
>   			       struct mlx5hws_action_mh_pattern *pattern)
>   {
>   	struct mlx5hws_action_mh_pattern *pool_pattern;
> -	int num_actions, i;
> +	int num_actions;
>   
>   	pool_pattern = mh_pool->pool_ctx;
>   	if (WARN_ON_ONCE(!pool_pattern))
> @@ -398,12 +398,8 @@ bool mlx5_fs_hws_mh_pool_match(struct mlx5_fs_pool *mh_pool,
>   	if (pattern->sz != pool_pattern->sz)
>   		return false;
>   	num_actions = pattern->sz / MLX5_UN_SZ_BYTES(set_add_copy_action_in_auto);
> -	for (i = 0; i < num_actions; i++) {
> -		if ((__force __be32)pattern->data[i] !=
> -		    (__force __be32)pool_pattern->data[i])
> -			return false;
> -	}
> -	return true;
> +	return mlx5hws_pat_compare_pattern(num_actions, pool_pattern->data,
> +					   num_actions, pattern->data);
>   }
>   
>   struct mlx5hws_action *mlx5_fc_get_hws_action(struct mlx5hws_context *ctx,
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/mlx5hws.h b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/mlx5hws.h
> index 1ad7a50d938b..13e9cdbc5d47 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/mlx5hws.h
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/mlx5hws.h
> @@ -688,6 +688,21 @@ mlx5hws_action_create_modify_header(struct mlx5hws_context *ctx,
>   				    u32 log_bulk_size,
>   				    u32 flags);
>   
> +/**
> + * mlx5hws_pat_compare_pattern - Compare two modify header patterns.
> + *
> + * @cur_num_of_actions: Number of actions in "cur_actions" array.
> + * @cur_actions: First pattern actions.
> + * @num_of_actions: Number of actions in "actions" array.
> + * @actions: Second pattern actions.
> + *
> + * Return: true if the patterns differ only in values, false otherwise.
> + */
> +bool mlx5hws_pat_compare_pattern(int cur_num_of_actions,
> +				 __be64 cur_actions[],
> +				 int num_of_actions,
> +				 __be64 actions[]);
> +

Please move this to pat_arg.h instead - this is not really a part of HWS API,
but an internal helper function.

-- YK


>   /**
>    * mlx5hws_action_create_aso_meter - Create direct rule ASO flow meter action.
>    *
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pat_arg.c b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pat_arg.c
> index 512299b59fd0..a49115f04025 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pat_arg.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/pat_arg.c
> @@ -96,10 +96,10 @@ void mlx5hws_pat_uninit_pattern_cache(struct mlx5hws_pattern_cache *cache)
>   	kfree(cache);
>   }
>   
> -static bool mlx5hws_pat_compare_pattern(int cur_num_of_actions,
> -					__be64 cur_actions[],
> -					int num_of_actions,
> -					__be64 actions[])
> +bool mlx5hws_pat_compare_pattern(int cur_num_of_actions,
> +				 __be64 cur_actions[],
> +				 int num_of_actions,
> +				 __be64 actions[])
>   {
>   	int i;
>   


  parent reply	other threads:[~2026-10-18 21:43 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-12 10:19 [PATCH net v2 0/2] net/mlx5: HWS, fix modify header pattern compare Alexandre Cassen
2026-10-12 10:19 ` [PATCH net v2 1/2] net/mlx5: HWS, fix modify header pattern compare on big-endian Alexandre Cassen
2026-10-12 10:32   ` sashiko-bot
2026-10-18 15:03   ` Simon Horman
2026-10-19  9:21   ` Yevgeny Kliteynik
2026-10-12 10:19 ` [PATCH net v2 2/2] net/mlx5: HWS, fix modify header pool match for copy actions Alexandre Cassen
2026-10-12 10:32   ` sashiko-bot
2026-10-18 15:04   ` Simon Horman
2026-10-18 21:43   ` Yevgeny Kliteynik [this message]
2026-10-19 11:25     ` Alexandre Cassen
2026-10-12 10:24 ` [PATCH net v2 0/2] net/mlx5: HWS, fix modify header pattern compare netdev-bot+sinfo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b3e5ce46-b6a7-4b90-b92e-2ee737ae79cb@nvidia.com \
    --to=kliteyn@nvidia.com \
    --cc=acassen@corp.free.fr \
    --cc=andrew+netdev@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@kernel.org \
    --cc=hamdani@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=leon@kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=mbloch@nvidia.com \
    --cc=moshe@nvidia.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=saeedm@nvidia.com \
    --cc=tariqt@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.