From f823dde0f49d476b8ffd185ae98b86a6b55758fe Mon Sep 17 00:00:00 2001 From: Daniel Krebs Date: Tue, 15 May 2018 17:52:03 +0200 Subject: [PATCH] card: don't try to create a VFIO mapping if IOMMU is disabled In this case, VFIO cannot create DMA mappings. --- fpga/lib/card.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/fpga/lib/card.cpp b/fpga/lib/card.cpp index de32310f5..9df391438 100644 --- a/fpga/lib/card.cpp +++ b/fpga/lib/card.cpp @@ -165,6 +165,11 @@ PCIeCard::lookupIp(const Vlnv& vlnv) const bool PCIeCard::mapMemoryBlock(const MemoryBlock& block) { + if(not vfioContainer->isIommuEnabled()) { + logger->warn("VFIO mapping not supported without IOMMU"); + return false; + } + auto& mm = MemoryManager::get(); const auto& addrSpaceId = block.getAddrSpaceId(); @@ -175,7 +180,6 @@ PCIeCard::mapMemoryBlock(const MemoryBlock& block) logger->debug("Create VFIO mapping for {}", addrSpaceId); } - auto translationFromProcess = mm.getTranslationFromProcess(addrSpaceId); uintptr_t processBaseAddr = translationFromProcess.getLocalAddr(0); uintptr_t iovaAddr = vfioContainer->memoryMap(processBaseAddr, @@ -188,10 +192,8 @@ PCIeCard::mapMemoryBlock(const MemoryBlock& block) return false; } - - mm.createMapping(iovaAddr, 0, block.getSize(), - "vfio", + "VFIO-D2H", this->addrSpaceIdDeviceToHost, addrSpaceId);