net/mlx5: use memseg walk instead of iteration
authorAnatoly Burakov <anatoly.burakov@intel.com>
Wed, 11 Apr 2018 12:30:03 +0000 (13:30 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 11 Apr 2018 17:48:12 +0000 (19:48 +0200)
Reduce dependency on internal details of EAL memory subsystem, and
simplify code.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Tested-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>
Tested-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Tested-by: Gowrishankar Muthukrishnan <gowrishankar.m@linux.vnet.ibm.com>
drivers/net/mlx5/Makefile
drivers/net/mlx5/mlx5.c

index e0eeea1..6c506a4 100644 (file)
@@ -65,6 +65,9 @@ CFLAGS += -Wno-error=cast-qual
 EXPORT_MAP := rte_pmd_mlx5_version.map
 LIBABIVER := 1
 
+# memseg walk is not part of stable API
+CFLAGS += -DALLOW_EXPERIMENTAL_API
+
 # DEBUG which is usually provided on the command-line may enable
 # CONFIG_RTE_LIBRTE_MLX5_DEBUG.
 ifeq ($(DEBUG),1)
index 99b6223..00c2c86 100644 (file)
@@ -477,6 +477,19 @@ static struct rte_pci_driver mlx5_driver;
  */
 static void *uar_base;
 
+static int
+find_lower_va_bound(const struct rte_memseg *ms, void *arg)
+{
+       void **addr = arg;
+
+       if (*addr == NULL)
+               *addr = ms->addr;
+       else
+               *addr = RTE_MIN(*addr, ms->addr);
+
+       return 0;
+}
+
 /**
  * Reserve UAR address space for primary process.
  *
@@ -491,21 +504,14 @@ mlx5_uar_init_primary(struct rte_eth_dev *dev)
 {
        struct priv *priv = dev->data->dev_private;
        void *addr = (void *)0;
-       int i;
-       const struct rte_mem_config *mcfg;
 
        if (uar_base) { /* UAR address space mapped. */
                priv->uar_base = uar_base;
                return 0;
        }
        /* find out lower bound of hugepage segments */
-       mcfg = rte_eal_get_configuration()->mem_config;
-       for (i = 0; i < RTE_MAX_MEMSEG && mcfg->memseg[i].addr; i++) {
-               if (addr)
-                       addr = RTE_MIN(addr, mcfg->memseg[i].addr);
-               else
-                       addr = mcfg->memseg[i].addr;
-       }
+       rte_memseg_walk(find_lower_va_bound, &addr);
+
        /* keep distance to hugepages to minimize potential conflicts. */
        addr = RTE_PTR_SUB(addr, MLX5_UAR_OFFSET + MLX5_UAR_SIZE);
        /* anonymous mmap, no real memory consumption. */