From f5b0762b1a85cc3599be1d59c92cc802d85f49e6 Mon Sep 17 00:00:00 2001 From: Niklas Eiling Date: Wed, 4 Jan 2023 11:04:48 +0100 Subject: [PATCH] make memory manager destroy IP objects and improve DMA logging Signed-off-by: Niklas Eiling --- fpga/common | 2 +- fpga/lib/card.cpp | 3 +++ fpga/lib/ips/dma.cpp | 10 ++++------ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/fpga/common b/fpga/common index 51e32a4b9..31b9f1dcf 160000 --- a/fpga/common +++ b/fpga/common @@ -1 +1 @@ -Subproject commit 51e32a4b9164b176da5ba3843b645ad6b49b3ec2 +Subproject commit 31b9f1dcf034b1747b66ac9d107d244108ede71f diff --git a/fpga/lib/card.cpp b/fpga/lib/card.cpp index 4c7053540..45d64b51e 100644 --- a/fpga/lib/card.cpp +++ b/fpga/lib/card.cpp @@ -167,6 +167,9 @@ std::list> PCIeCardFactory::make(json_t *json, std::sh PCIeCard::~PCIeCard() { + // Ensure IP destructors are called before memory is unmapped + ips.clear(); + auto &mm = MemoryManager::get(); // Unmap all memory blocks diff --git a/fpga/lib/ips/dma.cpp b/fpga/lib/ips/dma.cpp index 4b2cb4ad6..3904e173c 100644 --- a/fpga/lib/ips/dma.cpp +++ b/fpga/lib/ips/dma.cpp @@ -191,16 +191,14 @@ bool Dma::reset() int timeout = 500; while (timeout > 0) { - if (XAxiDma_ResetIsDone(&xDma)) + if (XAxiDma_ResetIsDone(&xDma)) { + logger->info("DMA has been reset."); return true; + } timeout--; } - if (timeout == 0) { - logger->error("DMA reset timed out"); - } else { - logger->info("DMA has been reset."); - } + logger->error("DMA reset timed out"); return false; }