On Mon, Apr 16, 2018 at 06:21:50PM +0200, Adrien Mazarguil wrote:
> When an unsupported hash type is part of a RSS configuration structure, it
> is silently ignored instead of triggering an error. This may lead
> applications to assume that such types are accepted, while they are in fact
> not part of the resulting flow rules.
> 
> Fixes: 078b8b452e6b ("net/mlx4: add RSS flow rule action support")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Adrien Mazarguil <adrien.mazarg...@6wind.com>
> Cc: Shahaf Shuler <shah...@mellanox.com>

Acked-by: Nelio Laranjeiro <nelio.laranje...@6wind.com>

> ---
>  drivers/net/mlx4/mlx4_flow.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c
> index 2b4bf7094..67fd568bc 100644
> --- a/drivers/net/mlx4/mlx4_flow.c
> +++ b/drivers/net/mlx4/mlx4_flow.c
> @@ -706,6 +706,7 @@ mlx4_flow_prepare(struct priv *priv,
>                       const struct rte_flow_action_queue *queue;
>                       const struct rte_flow_action_rss *rss;
>                       const struct rte_eth_rss_conf *rss_conf;
> +                     uint64_t fields;
>                       unsigned int i;
>  
>               case RTE_FLOW_ACTION_TYPE_VOID:
> @@ -780,10 +781,15 @@ mlx4_flow_prepare(struct priv *priv,
>                                       " of the context size";
>                               goto exit_action_not_supported;
>                       }
> +                     rte_errno = 0;
> +                     fields = mlx4_conv_rss_hf(priv, rss_conf->rss_hf);
> +                     if (fields == (uint64_t)-1 && rte_errno) {
> +                             msg = "unsupported RSS hash type requested";
> +                             goto exit_action_not_supported;
> +                     }
>                       flow->rss = mlx4_rss_get
> -                             (priv,
> -                              mlx4_conv_rss_hf(priv, rss_conf->rss_hf),
> -                              rss_conf->rss_key, rss->num, rss->queue);
> +                             (priv, fields, rss_conf->rss_key, rss->num,
> +                              rss->queue);
>                       if (!flow->rss) {
>                               msg = "either invalid parameters or not enough"
>                                       " resources for additional multi-queue"
> -- 
> 2.11.0

-- 
Nélio Laranjeiro
6WIND

Reply via email to