diff mbox series

[v2,3/3] test-runner: automatically find PCI passthrough config

Message ID 20220719185223.456197-3-prestwoj@gmail.com (mailing list archive)
State Accepted, archived
Headers show
Series [v2,1/3] test-runner: allow infinite process wait | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
prestwoj/iwd-ci-gitlint success GitLint

Commit Message

James Prestwood July 19, 2022, 6:52 p.m. UTC
When PCI adapters are properly configured they should exist in the
vfio-pci system tree. It is assumed any devices configured as such
are used for test-runner.

This removes the need for a hw.conf file to be supplied, but still
is required for USB adapters. Because of this the --hw option was
updated to allow no value, or a file path.
---
 tools/runner.py | 42 ++++++++++++++++++++++++++++++++----------
 1 file changed, 32 insertions(+), 10 deletions(-)
diff mbox series

Patch

diff --git a/tools/runner.py b/tools/runner.py
index f5667959..a96627de 100644
--- a/tools/runner.py
+++ b/tools/runner.py
@@ -116,6 +116,9 @@  class RunnerCoreArgParse(ArgumentParser):
 				help='Writes PASS/FAIL to results file')
 		self.add_argument('--hw', '-w',
 				type=str,
+				nargs='?',
+				const=True,
+				action='store',
 				help='Use physical adapters for tests (passthrough)')
 		self.add_argument('--testhome', help=SUPPRESS)
 		self.add_argument('--monitor-parent', help=SUPPRESS)
@@ -382,18 +385,18 @@  class QemuRunner(RunnerAbstract):
 		self._prepare_outfiles()
 
 		if args.hw:
-			hw_conf = ConfigParser()
-			hw_conf.read(args.hw)
+			if os.path.isfile(args.hw):
+				hw_conf = ConfigParser()
+				hw_conf.read(args.hw)
 
-			if hw_conf.has_section('USBAdapters'):
-				# The actual key name of the adapter
-				# doesn't matter since all we need is the
-				# bus/address. This gets named by the kernel
-				# anyways once in the VM.
-				usb_adapters = [v for v in hw_conf['USBAdapters'].values()]
+				if hw_conf.has_section('USBAdapters'):
+					# The actual key name of the adapter
+					# doesn't matter since all we need is the
+					# bus/address. This gets named by the kernel
+					# anyways once in the VM.
+					usb_adapters = [v for v in hw_conf['USBAdapters'].values()]
 
-			if hw_conf.has_section('PCIAdapters'):
-				pci_adapters = [v for v in hw_conf['PCIAdapters'].values()]
+			pci_adapters = self._find_pci_adapters()
 
 		kern_log = "ignore_loglevel" if "kernel" in args.verbose else "quiet"
 
@@ -473,6 +476,25 @@  class QemuRunner(RunnerAbstract):
 
 		self.cmdline = qemu_cmdline
 
+	def _find_pci_adapters(self):
+		adapters = []
+
+		try:
+			files = os.listdir('/sys/module/vfio_pci/drivers/pci:vfio-pci')
+		except:
+			return None
+
+		for bus_addr in files:
+			if not bus_addr.startswith('0000:'):
+				continue
+
+			adapters.append(bus_addr.replace('0000:', ''))
+
+		if len(adapters) == 0:
+			return None
+
+		return adapters
+
 	def prepare_environment(self):
 		mounts = [ MountInfo('debugfs', 'debugfs', '/sys/kernel/debug', '', 0) ]