From d43caed90364ac266f42b7ca6a199203f93813db Mon Sep 17 00:00:00 2001
From: Pascal Bauer <pascal.bauer@rwth-aachen.de>
Date: Fri, 23 Aug 2024 20:41:31 +0200
Subject: [PATCH] implement iommu_group

Signed-off-by: Pascal Bauer <pascal.bauer@rwth-aachen.de>
---
 common/include/villas/kernel/devices/pci_device.hpp | 3 +--
 common/lib/kernel/devices/pci_device.cpp            | 6 +++---
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/common/include/villas/kernel/devices/pci_device.hpp b/common/include/villas/kernel/devices/pci_device.hpp
index 2b6185152..836670dd6 100644
--- a/common/include/villas/kernel/devices/pci_device.hpp
+++ b/common/include/villas/kernel/devices/pci_device.hpp
@@ -72,12 +72,11 @@ public:
 
   // Implement device interface
   std::optional<std::unique_ptr<Driver>> driver() const override;
+  std::optional<int> iommu_group() const override;
 
   // Bind a new LKM to the PCI device
   bool attachDriver(const std::string &driver) const;
 
-  // Return the IOMMU group of this PCI device or -1 if the device is not in a group
-  int getIommuGroup() const;
 
   std::list<Region> getRegions() const;
 
diff --git a/common/lib/kernel/devices/pci_device.cpp b/common/lib/kernel/devices/pci_device.cpp
index 7a218b1a2..1612e5d99 100644
--- a/common/lib/kernel/devices/pci_device.cpp
+++ b/common/lib/kernel/devices/pci_device.cpp
@@ -425,7 +425,7 @@ void PciDevice::writeBar(uint32_t addr, unsigned barNum) {
   file.write(reinterpret_cast<char *>(&addr), sizeof(addr));
 }
 
-int PciDevice::getIommuGroup() const {
+std::optional<int> PciDevice::iommu_group() const {
   int ret;
   char *group;
 
@@ -439,11 +439,11 @@ int PciDevice::getIommuGroup() const {
 
   ret = readlink(sysfs, link, sizeof(link));
   if (ret < 0)
-    return -1;
+    return std::nullopt;
 
   group = basename(link);
 
-  return atoi(group);
+  return std::make_optional(atoi(group));
 }
 
 std::fstream PciDevice::openSysFs(const std::string &subPath,