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 <artsiom.koltun@intel.com>
Change-Id: I0840d0a2367d3382c6723ee4cdb6d768128c8032
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14651
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: <sebastian.brzezinka@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
spdk 2022-09-23 09:31:19 +02:00 committed by Tomasz Zawadzki
parent 9a028f88ac
commit 01471e63bc

View File

@ -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: