dpdk: set dmamap iova address value according to eal_iova_mode 64/12764/2
authorSachin Saxena <sachin.saxena@nxp.com>
Mon, 28 May 2018 09:24:47 +0000 (14:54 +0530)
committerDamjan Marion <dmarion.lists@gmail.com>
Mon, 28 May 2018 12:02:30 +0000 (12:02 +0000)
 - Fix the issue where eal iova mode is Virtual Address (RTE_IOVA_VA) but
   setting DMA iova address to Physical address value always.

Change-Id: Ib1e9c1596d95885c7eff11723338121627203e61
Signed-off-by: Sachin Saxena <sachin.saxena@nxp.com>
src/plugins/dpdk/buffer.c

index 11d8cd7..59015ff 100644 (file)
@@ -541,7 +541,10 @@ dpdk_pool_create (vlib_main_t * vm, u8 * pool_name, u32 elt_size,
        {
          dm.vaddr = pointer_to_uword (pr->mem) + (i << pr->log2_page_size);
          dm.size = 1 << pr->log2_page_size;
-         dm.iova = pr->page_table[i];
+         if (rte_eal_iova_mode() == RTE_IOVA_PA)
+                 dm.iova = pr->page_table[i];
+         else
+                 dm.iova = dm.vaddr;
          if ((rv = ioctl (dbm->vfio_container_fd, VFIO_IOMMU_MAP_DMA, &dm)))
            break;
        }