net/mlx5: fix un-supported RSS hash fields use
MLX5 NIC does not support all hash fields, this patch limit by refusing
impossible RSS combination to avoid errors.
Fixes: 2f97422e77
("mlx5: support RSS hash update and get")
Cc: stable@dpdk.org
Signed-off-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
Acked-by: Yongseok Koh <yskoh@mellanox.com>
This commit is contained in:
parent
d1eded3a8e
commit
b365799b3c
@ -34,6 +34,8 @@
|
||||
#ifndef RTE_PMD_MLX5_DEFS_H_
|
||||
#define RTE_PMD_MLX5_DEFS_H_
|
||||
|
||||
#include <rte_ethdev.h>
|
||||
|
||||
#include "mlx5_autoconf.h"
|
||||
|
||||
/* Reported driver name. */
|
||||
@ -105,4 +107,7 @@
|
||||
/* Number of packets vectorized Rx can simultaneously process in a loop. */
|
||||
#define MLX5_VPMD_DESCS_PER_LOOP 4
|
||||
|
||||
/* Supported RSS */
|
||||
#define MLX5_RSS_HF_MASK (~(ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP))
|
||||
|
||||
#endif /* RTE_PMD_MLX5_DEFS_H_ */
|
||||
|
@ -50,6 +50,7 @@
|
||||
#include <rte_malloc.h>
|
||||
|
||||
#include "mlx5.h"
|
||||
#include "mlx5_defs.h"
|
||||
#include "mlx5_prm.h"
|
||||
|
||||
/* Define minimal priority for control plane flows. */
|
||||
@ -568,9 +569,15 @@ priv_flow_convert_rss_conf(struct priv *priv,
|
||||
struct mlx5_flow_parse *parser,
|
||||
const struct rte_eth_rss_conf *rss_conf)
|
||||
{
|
||||
const struct rte_eth_rss_conf *rss =
|
||||
rss_conf ? rss_conf : &priv->rss_conf;
|
||||
const struct rte_eth_rss_conf *rss;
|
||||
|
||||
if (rss_conf) {
|
||||
if (rss_conf->rss_hf & MLX5_RSS_HF_MASK)
|
||||
return EINVAL;
|
||||
rss = rss_conf;
|
||||
} else {
|
||||
rss = &priv->rss_conf;
|
||||
}
|
||||
if (rss->rss_key_len > 40)
|
||||
return EINVAL;
|
||||
parser->rss_conf.rss_key_len = rss->rss_key_len;
|
||||
|
@ -51,6 +51,7 @@
|
||||
#include <rte_ethdev.h>
|
||||
|
||||
#include "mlx5.h"
|
||||
#include "mlx5_defs.h"
|
||||
#include "mlx5_rxtx.h"
|
||||
|
||||
/**
|
||||
@ -72,6 +73,10 @@ mlx5_rss_hash_update(struct rte_eth_dev *dev,
|
||||
int ret = 0;
|
||||
|
||||
priv_lock(priv);
|
||||
if (rss_conf->rss_hf & MLX5_RSS_HF_MASK) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (rss_conf->rss_key && rss_conf->rss_key_len) {
|
||||
priv->rss_conf.rss_key = rte_realloc(priv->rss_conf.rss_key,
|
||||
rss_conf->rss_key_len, 0);
|
||||
|
Loading…
Reference in New Issue
Block a user