drivers/net: build Intel NIC PMDs with meson
[dpdk.git] / drivers / net / mlx5 / mlx5_rss.c
index ad6d9ab..9e12b51 100644 (file)
 #endif
 
 #include <rte_malloc.h>
-#include <rte_ethdev.h>
+#include <rte_ethdev_driver.h>
 
 #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);