bus/fslmc: use virt2memseg instead of iteration
authorAnatoly Burakov <anatoly.burakov@intel.com>
Wed, 11 Apr 2018 12:30:16 +0000 (13:30 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 11 Apr 2018 17:54:56 +0000 (19:54 +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/bus/fslmc/portal/dpaa2_hw_pvt.h

index d38fc49..45fd41e 100644 (file)
@@ -270,20 +270,14 @@ static phys_addr_t dpaa2_mem_vtop(uint64_t vaddr) __attribute__((unused));
 static phys_addr_t dpaa2_mem_vtop(uint64_t vaddr)
 {
        const struct rte_memseg *memseg;
-       int i;
 
        if (dpaa2_virt_mode)
                return vaddr;
 
-       memseg = rte_eal_get_physmem_layout();
-
-       for (i = 0; i < RTE_MAX_MEMSEG && memseg[i].addr_64 != 0; i++) {
-               if (vaddr >= memseg[i].addr_64 &&
-                   vaddr < memseg[i].addr_64 + memseg[i].len)
-                       return memseg[i].iova
-                               + (vaddr - memseg[i].addr_64);
-       }
-       return (size_t)(NULL);
+       memseg = rte_mem_virt2memseg((void *)(uintptr_t)vaddr);
+       if (memseg)
+               return memseg->phys_addr + RTE_PTR_DIFF(vaddr, memseg->addr);
+       return (size_t)NULL;
 }
 
 /**