[PATCH v2 2/2] dts: avoid dpdk resources conflict
Patrick Robb
probb at iol.unh.edu
Mon Mar 23 21:20:53 CET 2026
When starting and stopping DPDK applications in rapid succession,
there may be a resource conflicts on ports, memory, VFIO, etc.
Even after we send "quit" to the testpmd CLI, some resource
cleanup will happen asynchronously in the background. To avoid a
resource conflict upon starting a subsequent DPDK application,
add a very brief sleep after quitting DPDK applications.
Fixes: bfad0948df75 ("dts: rework interactive shells")
Signed-off-by: Patrick Robb <probb at iol.unh.edu>
Tested-by: Patrick Robb <probb at iol.unh.edu>
---
dts/api/testpmd/__init__.py | 2 +-
dts/framework/remote_session/dpdk_shell.py | 12 +++++++++++-
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/dts/api/testpmd/__init__.py b/dts/api/testpmd/__init__.py
index 703cae487e..e9187440bb 100644
--- a/dts/api/testpmd/__init__.py
+++ b/dts/api/testpmd/__init__.py
@@ -1174,7 +1174,7 @@ def clear_port_stats_all(self, verify: bool = True) -> None:
@only_active
def close(self) -> None:
- """Overrides :meth:`~.interactive_shell.close`."""
+ """Overrides :meth:`~.dpdk_shell.close`."""
self.stop()
self.send_command("quit", "Bye...")
return super().close()
diff --git a/dts/framework/remote_session/dpdk_shell.py b/dts/framework/remote_session/dpdk_shell.py
index 51b97d4ff6..f926c3fa4d 100644
--- a/dts/framework/remote_session/dpdk_shell.py
+++ b/dts/framework/remote_session/dpdk_shell.py
@@ -6,13 +6,14 @@
Provides a base class to create interactive shells based on DPDK.
"""
+import time
from abc import ABC, abstractmethod
from pathlib import PurePath
from framework.context import get_ctx
from framework.params.eal import EalParams
from framework.remote_session.interactive_shell import (
- InteractiveShell,
+ InteractiveShell, only_active,
)
from framework.testbed_model.cpu import LogicalCoreList
@@ -84,3 +85,12 @@ def _make_real_path(self) -> PurePath:
Adds the remote DPDK build directory to the path.
"""
return get_ctx().dpdk_build.remote_dpdk_build_dir.joinpath(self.path)
+
+ @only_active
+ def close(self) -> None:
+ """Overrides :meth:`~.interactive_shell.close`."""
+ # Allow time for VFIO and hardware resources to be released by the kernel after the
+ # DPDK process exits. Without this delay, sequential testpmd instances may have EAL
+ # errors when trying to acquire the same devices.
+ time.sleep(1)
+ return super().close()
--
2.49.0
More information about the dev
mailing list