Commit 01471e63 authored by spdk's avatar spdk Committed by Tomasz Zawadzki
Browse files

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: default avatarArtsiom Koltun <artsiom.koltun@intel.com>
Change-Id: I0840d0a2367d3382c6723ee4cdb6d768128c8032
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14651


Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatar <sebastian.brzezinka@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 9a028f88
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -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: