From ebe62e145342dc283938df8dc79248d6ea05f2c0 Mon Sep 17 00:00:00 2001 From: Karol Latecki Date: Fri, 29 Nov 2019 09:58:57 +0100 Subject: [PATCH] Revert "env_dpdk: Detect DPDK's iova mode when programming the IOMMU" This reverts commit a68effe70977348e94a3c4a0f57293c873c6ff69. Reason: introduces assertion: vhost: rte_vhost_compat.c:103: vhost_session_mem_unregister: Assertion `false' failed. Reported in GH issue 1085. Change-Id: I00926844c1e00f19547f03487156f7b4238b446c Signed-off-by: Karol Latecki Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/476133 Reviewed-by: Tomasz Zawadzki Reviewed-by: Shuhei Matsumoto Tested-by: SPDK CI Jenkins --- lib/env_dpdk/memory.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/lib/env_dpdk/memory.c b/lib/env_dpdk/memory.c index ebdae6991..33e56fcc1 100644 --- a/lib/env_dpdk/memory.c +++ b/lib/env_dpdk/memory.c @@ -1013,8 +1013,13 @@ spdk_vtophys_notify(void *cb_ctx, struct spdk_mem_map *map, if (paddr == SPDK_VTOPHYS_ERROR) { /* This is not an address that DPDK is managing. */ #if SPDK_VFIO_ENABLED - if (spdk_iommu_is_enabled() && rte_eal_get_configuration()->iova_mode == RTE_IOVA_VA) { - /* We'll use the virtual address as the iova to match DPDK. */ + if (spdk_iommu_is_enabled()) { + /* We'll use the virtual address as the iova. DPDK + * currently uses physical addresses as the iovas (or counts + * up from 0 if it can't get physical addresses), so + * the range of user space virtual addresses and physical + * addresses will never overlap. + */ paddr = (uint64_t)vaddr; rc = vtophys_iommu_map_dma((uint64_t)vaddr, paddr, len); if (rc) { @@ -1066,16 +1071,6 @@ spdk_vtophys_notify(void *cb_ctx, struct spdk_mem_map *map, DEBUG_PRINT("invalid paddr 0x%" PRIx64 " - must be 2MB aligned\n", paddr); return -EINVAL; } -#if SPDK_VFIO_ENABLED - /* If the IOMMU is on, but DPDK is using iova-mode=pa, we want to register this memory - * with the IOMMU using the physical address to match. */ - if (spdk_iommu_is_enabled()) { - rc = vtophys_iommu_map_dma((uint64_t)vaddr, paddr, VALUE_2MB); - if (rc) { - return -EFAULT; - } - } -#endif rc = spdk_mem_map_set_translation(map, (uint64_t)vaddr, VALUE_2MB, paddr); if (rc != 0) {