From 01471e63bcea200cc7733baec9c6bda9cd2ed12d Mon Sep 17 00:00:00 2001 From: spdk Date: Fri, 23 Sep 2022 09:31:19 +0200 Subject: [PATCH] sma: fix multiple bus support for NVMe/vfio_user plugin In original code, device search was performed only on first attached bus. If device resided on second attached bus, it couldn't be found and properly deleted in qemu. This patch allows to traverse all attached buses to find required device. Signed-off-by: Artsiom Koltun Change-Id: I0840d0a2367d3382c6723ee4cdb6d768128c8032 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14651 Reviewed-by: Konrad Sztyber Reviewed-by: Reviewed-by: Tomasz Zawadzki Tested-by: SPDK CI Jenkins --- python/spdk/sma/device/nvmf_vfiouser.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/python/spdk/sma/device/nvmf_vfiouser.py b/python/spdk/sma/device/nvmf_vfiouser.py index a42d09e81..0aed08064 100644 --- a/python/spdk/sma/device/nvmf_vfiouser.py +++ b/python/spdk/sma/device/nvmf_vfiouser.py @@ -112,13 +112,17 @@ class NvmfVfioDeviceManager(DeviceManager): def _find_pcidev(self, qclient, name): def rsearch(devices, name): + found_dev = None for dev in devices: if dev['qdev_id'] == name: - return dev - if 'pci_bridge' in dev: - return rsearch(dev['pci_bridge']['devices'], name) - else: - pass + found_dev = dev + elif 'pci_bridge' in dev: + found_dev = rsearch(dev['pci_bridge']['devices'], name) + + if found_dev: + break + return found_dev + try: buses = qclient.query_pci()['return'] for bus in buses: