From c80e5c083ddf15d6ad17970f5244807d1adbb795 Mon Sep 17 00:00:00 2001 From: Niklas Eiling Date: Mon, 30 Jan 2023 16:26:11 +0100 Subject: [PATCH] remove map and umapmemoryblock from PcieCard Signed-off-by: Niklas Eiling --- fpga/lib/pcie_card.cpp | 63 +----------------------------------------- 1 file changed, 1 insertion(+), 62 deletions(-) diff --git a/fpga/lib/pcie_card.cpp b/fpga/lib/pcie_card.cpp index c75cc38f6..07b256fa3 100644 --- a/fpga/lib/pcie_card.cpp +++ b/fpga/lib/pcie_card.cpp @@ -152,7 +152,7 @@ std::list> PCIeCardFactory::make(json_t *json, std::sh PCIeCard::~PCIeCard() { - + } std::shared_ptr PCIeCard::lookupIp(const std::string &name) const @@ -188,67 +188,6 @@ std::shared_ptr PCIeCard::lookupIp(const ip::IpIdentifier &id) const return nullptr; } -bool PCIeCard::unmapMemoryBlock(const MemoryBlock &block) -{ - if (memoryBlocksMapped.find(block.getAddrSpaceId()) == memoryBlocksMapped.end()) { - throw std::runtime_error("Block " + std::to_string(block.getAddrSpaceId()) + " is not mapped but was requested to be unmapped."); - } - - auto &mm = MemoryManager::get(); - - auto translation = mm.getTranslation(addrSpaceIdDeviceToHost, block.getAddrSpaceId()); - - const uintptr_t iova = translation.getLocalAddr(0); - const size_t size = translation.getSize(); - - logger->debug("Unmap block {} at IOVA {:#x} of size {:#x}", - block.getAddrSpaceId(), iova, size); - vfioContainer->memoryUnmap(iova, size); - - memoryBlocksMapped.erase(block.getAddrSpaceId()); - - return true; -} - -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(); - - if (memoryBlocksMapped.find(addrSpaceId) != memoryBlocksMapped.end()) - // Block already mapped - return true; - else - logger->debug("Create VFIO mapping for {}", addrSpaceId); - - auto translationFromProcess = mm.getTranslationFromProcess(addrSpaceId); - uintptr_t processBaseAddr = translationFromProcess.getLocalAddr(0); - uintptr_t iovaAddr = vfioContainer->memoryMap(processBaseAddr, - UINTPTR_MAX, - block.getSize()); - - if (iovaAddr == UINTPTR_MAX) { - logger->error("Cannot map memory at {:#x} of size {:#x}", - processBaseAddr, block.getSize()); - return false; - } - - mm.createMapping(iovaAddr, 0, block.getSize(), - "VFIO-D2H", - this->addrSpaceIdDeviceToHost, - addrSpaceId); - - // Remember that this block has already been mapped for later - memoryBlocksMapped.insert(addrSpaceId); - - return true; -} - bool PCIeCard::init() { logger = getLogger();