X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx5%2Fmlx5_rss.c;h=9e12b51fee50e3f28e98d83385c302fb53c13b8f;hb=e940646b20fa;hp=ad6d9ab7014af5f025073ce217fd1808eed58936;hpb=29c1d8bb3e793468d99790e9f700d349b2b93075;p=dpdk.git diff --git a/drivers/net/mlx5/mlx5_rss.c b/drivers/net/mlx5/mlx5_rss.c index ad6d9ab701..9e12b51fee 100644 --- a/drivers/net/mlx5/mlx5_rss.c +++ b/drivers/net/mlx5/mlx5_rss.c @@ -48,9 +48,10 @@ #endif #include -#include +#include #include "mlx5.h" +#include "mlx5_defs.h" #include "mlx5_rxtx.h" /** @@ -72,14 +73,18 @@ mlx5_rss_hash_update(struct rte_eth_dev *dev, int ret = 0; priv_lock(priv); - if (rss_conf->rss_key_len) { + 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); if (!priv->rss_conf.rss_key) { ret = -ENOMEM; goto out; } - memcpy(&priv->rss_conf.rss_key, rss_conf->rss_key, + memcpy(priv->rss_conf.rss_key, rss_conf->rss_key, rss_conf->rss_key_len); priv->rss_conf.rss_key_len = rss_conf->rss_key_len; } @@ -105,22 +110,19 @@ mlx5_rss_hash_conf_get(struct rte_eth_dev *dev, struct rte_eth_rss_conf *rss_conf) { struct priv *priv = dev->data->dev_private; - int ret = 0; + if (!rss_conf) + return -EINVAL; priv_lock(priv); - if (!rss_conf->rss_key) { - ret = -ENOMEM; - goto out; + if (rss_conf->rss_key && + (rss_conf->rss_key_len >= priv->rss_conf.rss_key_len)) { + memcpy(rss_conf->rss_key, priv->rss_conf.rss_key, + priv->rss_conf.rss_key_len); } - if (rss_conf->rss_key_len < priv->rss_conf.rss_key_len) { - ret = -EINVAL; - goto out; - } - memcpy(rss_conf->rss_key, priv->rss_conf.rss_key, - priv->rss_conf.rss_key_len); -out: + rss_conf->rss_key_len = priv->rss_conf.rss_key_len; + rss_conf->rss_hf = priv->rss_conf.rss_hf; priv_unlock(priv); - return ret; + return 0; } /** @@ -277,7 +279,6 @@ mlx5_dev_rss_reta_update(struct rte_eth_dev *dev, int ret; struct priv *priv = dev->data->dev_private; - assert(!mlx5_is_secondary()); priv_lock(priv); ret = priv_dev_rss_reta_update(priv, reta_conf, reta_size); priv_unlock(priv);