net/mlx5: support descriptor LWM for Rx queue
[dpdk.git] / drivers / net / mlx5 / mlx5_rss.c
index 345ce3a..e2b478b 100644 (file)
@@ -7,24 +7,16 @@
 #include <stdint.h>
 #include <errno.h>
 #include <string.h>
-#include <assert.h>
-
-/* Verbs header. */
-/* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */
-#ifdef PEDANTIC
-#pragma GCC diagnostic ignored "-Wpedantic"
-#endif
-#include <infiniband/verbs.h>
-#ifdef PEDANTIC
-#pragma GCC diagnostic error "-Wpedantic"
-#endif
 
 #include <rte_malloc.h>
-#include <rte_ethdev_driver.h>
+#include <ethdev_driver.h>
+
+#include <mlx5_malloc.h>
 
 #include "mlx5_defs.h"
 #include "mlx5.h"
 #include "mlx5_rxtx.h"
+#include "mlx5_rx.h"
 
 /**
  * DPDK callback to update the RSS hash configuration.
@@ -58,8 +50,10 @@ mlx5_rss_hash_update(struct rte_eth_dev *dev,
                        rte_errno = EINVAL;
                        return -rte_errno;
                }
-               priv->rss_conf.rss_key = rte_realloc(priv->rss_conf.rss_key,
-                                                    rss_conf->rss_key_len, 0);
+               priv->rss_conf.rss_key = mlx5_realloc(priv->rss_conf.rss_key,
+                                                     MLX5_MEM_RTE,
+                                                     rss_conf->rss_key_len,
+                                                     0, SOCKET_ID_ANY);
                if (!priv->rss_conf.rss_key) {
                        rte_errno = ENOMEM;
                        return -rte_errno;
@@ -71,10 +65,12 @@ mlx5_rss_hash_update(struct rte_eth_dev *dev,
        priv->rss_conf.rss_hf = rss_conf->rss_hf;
        /* Enable the RSS hash in all Rx queues. */
        for (i = 0, idx = 0; idx != priv->rxqs_n; ++i) {
-               if (!(*priv->rxqs)[i])
+               struct mlx5_rxq_priv *rxq = mlx5_rxq_get(dev, i);
+
+               if (rxq == NULL || rxq->ctrl == NULL)
                        continue;
-               (*priv->rxqs)[i]->rss_hash = !!rss_conf->rss_hf &&
-                       !!(dev->data->dev_conf.rxmode.mq_mode & ETH_MQ_RX_RSS);
+               rxq->ctrl->rxq.rss_hash = !!rss_conf->rss_hf &&
+                       !!(dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS);
                ++idx;
        }
        return 0;
@@ -132,8 +128,9 @@ mlx5_rss_reta_index_resize(struct rte_eth_dev *dev, unsigned int reta_size)
        if (priv->reta_idx_n == reta_size)
                return 0;
 
-       mem = rte_realloc(priv->reta_idx,
-                         reta_size * sizeof((*priv->reta_idx)[0]), 0);
+       mem = mlx5_realloc(priv->reta_idx, MLX5_MEM_RTE,
+                          reta_size * sizeof((*priv->reta_idx)[0]), 0,
+                          SOCKET_ID_ANY);
        if (!mem) {
                rte_errno = ENOMEM;
                return -rte_errno;
@@ -175,8 +172,8 @@ mlx5_dev_rss_reta_query(struct rte_eth_dev *dev,
        }
        /* Fill each entry of the table even if its bit is not set. */
        for (idx = 0, i = 0; (i != reta_size); ++i) {
-               idx = i / RTE_RETA_GROUP_SIZE;
-               reta_conf[idx].reta[i % RTE_RETA_GROUP_SIZE] =
+               idx = i / RTE_ETH_RETA_GROUP_SIZE;
+               reta_conf[idx].reta[i % RTE_ETH_RETA_GROUP_SIZE] =
                        (*priv->reta_idx)[i];
        }
        return 0;
@@ -214,17 +211,13 @@ mlx5_dev_rss_reta_update(struct rte_eth_dev *dev,
        if (ret)
                return ret;
        for (idx = 0, i = 0; (i != reta_size); ++i) {
-               idx = i / RTE_RETA_GROUP_SIZE;
-               pos = i % RTE_RETA_GROUP_SIZE;
-               if (((reta_conf[idx].mask >> i) & 0x1) == 0)
+               idx = i / RTE_ETH_RETA_GROUP_SIZE;
+               pos = i % RTE_ETH_RETA_GROUP_SIZE;
+               if (((reta_conf[idx].mask >> pos) & 0x1) == 0)
                        continue;
-               assert(reta_conf[idx].reta[pos] < priv->rxqs_n);
+               MLX5_ASSERT(reta_conf[idx].reta[pos] < priv->rxqs_n);
                (*priv->reta_idx)[i] = reta_conf[idx].reta[pos];
        }
-       if (dev->data->dev_started) {
-               mlx5_dev_stop(dev);
-               priv->skip_default_rss_reta = 1;
-               return mlx5_dev_start(dev);
-       }
-       return 0;
+       priv->skip_default_rss_reta = 1;
+       return mlx5_traffic_restart(dev);
 }