From acaa1af30a8c56b6893771d5087c84f030028139 Mon Sep 17 00:00:00 2001 From: Evrard-Nil Daillet Date: Fri, 22 Aug 2025 10:26:10 +0200 Subject: [PATCH 1/2] Fix setup_ppcie to prepare gpus and switches. Also fixed incorrect if condition. --- guest-tools/run_td | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/guest-tools/run_td b/guest-tools/run_td index 1b4316b..8927eb1 100755 --- a/guest-tools/run_td +++ b/guest-tools/run_td @@ -82,7 +82,7 @@ def add_gpus(cmd, gpus): index = index + 1 def pci_devices(vendor, product) -> list[str]: - output = subprocess.check_output(["lspci", "-d", f"{vendor}:{product}"], stderr=subprocess.STDOUT) + output = subprocess.check_output(["lspci", "-D", "-d", f"{vendor}:{product}"], stderr=subprocess.STDOUT) devices = [] for line in output.splitlines(): address = line.decode().strip().split(" ")[0] @@ -100,7 +100,8 @@ def setup_ppcie(cmd): print("PPCIe mode requires 4 NVSwitches") exit(1) - # prepare_gpus(gpus) + all_devices = gpus + nvswitches + prepare_gpus(all_devices) cmd.extend([ "-object", "iommufd,id=iommufd0", @@ -138,13 +139,13 @@ def setup_ppcie(cmd): "-fw_cfg", "name=opt/ovmf/X-PciMmio64Mb8,string=262144", "-device", "pcie-root-port,port=24,chassis=9,id=pci.9,bus=pcie.0,multifunction=on,addr=0x4", - "-device", f"vfio-pci,host=0000:{nvswitches[0]},bus=pci.9,addr=0x0,iommufd=iommufd0", + "-device", f"vfio-pci,host={nvswitches[0]},bus=pci.9,addr=0x0,iommufd=iommufd0", "-device", "pcie-root-port,port=25,chassis=10,id=pci.10,bus=pcie.0,addr=0x4.0x1", - "-device", f"vfio-pci,host=0000:{nvswitches[1]},bus=pci.10,addr=0x0,iommufd=iommufd0", + "-device", f"vfio-pci,host={nvswitches[1]},bus=pci.10,addr=0x0,iommufd=iommufd0", "-device", "pcie-root-port,port=26,chassis=11,id=pci.11,bus=pcie.0,addr=0x4.0x2", - "-device", f"vfio-pci,host=0000:{nvswitches[2]},bus=pci.11,addr=0x0,iommufd=iommufd0", + "-device", f"vfio-pci,host={nvswitches[2]},bus=pci.11,addr=0x0,iommufd=iommufd0", "-device", "pcie-root-port,port=27,chassis=12,id=pci.12,bus=pcie.0,addr=0x4.0x3", - "-device", f"vfio-pci,host=0000:{nvswitches[3]},bus=pci.12,addr=0x0,iommufd=iommufd0", + "-device", f"vfio-pci,host={nvswitches[3]},bus=pci.12,addr=0x0,iommufd=iommufd0", ]) def do_run(img_path, gpus): @@ -187,7 +188,7 @@ def do_run(img_path, gpus): add_vsock(qemu_cmds) - if args.gpus and len(args.gpus) == 8: + if args.gpus and len(gpus) == 8: setup_ppcie(qemu_cmds) else: add_gpus(qemu_cmds, gpus) From 3fdd0ef12a7a1fb9fbebf85eb4570d34ef629444 Mon Sep 17 00:00:00 2001 From: Evrard-Nil Daillet Date: Mon, 20 Oct 2025 11:15:55 -0700 Subject: [PATCH 2/2] Enhance GPU argument handling in run_td: support 'all' to detect available GPUs --- guest-tools/run_td | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/guest-tools/run_td b/guest-tools/run_td index 8927eb1..29d2e10 100755 --- a/guest-tools/run_td +++ b/guest-tools/run_td @@ -206,12 +206,24 @@ def run_td(args): return if args.image: td_img=args.image - do_run(td_img, args.gpus.split(',') if args.gpus else []) + + # Handle GPU arguments + gpus = [] + if args.gpus: + if args.gpus.lower() == 'all': + # Detect all available GPUs (NVIDIA H100) + gpus = pci_devices("10de", "2335") + if gpus: + print(f"Detected {len(gpus)} GPU(s): {gpus}") + else: + gpus = args.gpus.split(',') + + do_run(td_img, gpus) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("--image", type=str, help="Guest image") - parser.add_argument("--gpus", type=str, help="GPUs to pass-through") + parser.add_argument("--gpus", type=str, help="GPUs to pass-through (comma-separated list of PCI addresses or 'all' to pass all GPUs)") parser.add_argument("--clean", action='store_true', help="Clean the current VM") parser.add_argument("--foreground", action='store_true', help="Run in foreground") args = parser.parse_args()