[PATCH v1 5/5] dts: automate VFIO-PCI modprobe in node setup
Andrew Bailey
abailey at iol.unh.edu
Thu Jan 22 22:44:24 CET 2026
Currently, users must modprobe VFIO-PCI before running DTS when using a
non-mellanox NIC. This patch automates the process on test run start up.
In addition, if the SUT is expected to use a subset of a few QAT devices,
VFIO-PCI must be loaded in a separate manner. This patch adds this
distinction.
Signed-off-by: Andrew Bailey <abailey at iol.unh.edu>
---
dts/framework/testbed_model/linux_session.py | 24 ++++++++++++++++++++
dts/framework/testbed_model/node.py | 4 ++++
dts/framework/testbed_model/os_session.py | 4 ++++
3 files changed, 32 insertions(+)
diff --git a/dts/framework/testbed_model/linux_session.py b/dts/framework/testbed_model/linux_session.py
index 8d678c5b5d..1bc8bd54b9 100644
--- a/dts/framework/testbed_model/linux_session.py
+++ b/dts/framework/testbed_model/linux_session.py
@@ -224,6 +224,30 @@ def devbind_script_path(self) -> PurePath:
"""
raise InternalError("Accessed devbind script path before setup.")
+ def load_vfio(self, pf_port: Port) -> None:
+ """Overrides :meth:'~os_session.OSSession,load_vfio`."""
+ cmd_result = self.send_command(f"lspci -nn -s {pf_port.pci}")
+ device = re.search(r":([0-9a-fA-F]{4})\]", cmd_result.stdout)
+ if device and device.group(1) in ["37c8", "0435", "19e2"]:
+ self.send_command(
+ "modprobe -r vfio_iommu_type1; modprobe -r vfio_pci",
+ privileged=True,
+ )
+ self.send_command(
+ "modprobe -r vfio_virqfd; modprobe -r vfio",
+ privileged=True,
+ )
+ self.send_command(
+ "modprobe vfio-pci disable_denylist=1 enable_sriov=1", privileged=True
+ )
+ self.send_command(
+ "echo 1 | tee /sys/module/vfio/parameters/enable_unsafe_noiommu_mode",
+ privileged=True,
+ )
+ else:
+ self.send_command("modprobe vfio-pci")
+ self.refresh_lshw()
+
def create_crypto_vfs(self, pf_port: list[Port]) -> None:
"""Overrides :meth:`~os_session.OSSession.create_crypto_vfs`.
diff --git a/dts/framework/testbed_model/node.py b/dts/framework/testbed_model/node.py
index a4c1f8f22c..2f8d40e8f3 100644
--- a/dts/framework/testbed_model/node.py
+++ b/dts/framework/testbed_model/node.py
@@ -86,6 +86,10 @@ def __init__(self, node_config: NodeConfiguration) -> None:
self.cryptodevs = [
Port(self, cryptodev_config) for cryptodev_config in self.config.cryptodevs
]
+ if self.cryptodevs:
+ self.main_session.load_vfio(self.cryptodevs[0])
+ elif self.ports and self.ports[0].config.os_driver_for_dpdk == "vfio-pci":
+ self.main_session.load_vfio(self.ports[0])
self._logger.info(f"Created node: {self.name}")
def setup(self) -> None:
diff --git a/dts/framework/testbed_model/os_session.py b/dts/framework/testbed_model/os_session.py
index 2eeeea6967..4a4fc1f34a 100644
--- a/dts/framework/testbed_model/os_session.py
+++ b/dts/framework/testbed_model/os_session.py
@@ -615,6 +615,10 @@ def configure_port_mtu(self, mtu: int, port: Port) -> None:
port: Port to set `mtu` on.
"""
+ @abstractmethod
+ def load_vfio(self, pf_port: Port) -> None:
+ """Load the vfio module according to the device type of the given port."""
+
@abstractmethod
def create_crypto_vfs(self, pf_ports: list[Port]) -> None:
"""Creatues virtual functions for each port in 'pf_ports'.
--
2.50.1
More information about the dev
mailing list