]> git.proxmox.com Git - mirror_qemu.git/commitdiff
s390x/pci: refactor s390_pci_find_dev_by_idx
authorYi Min Zhao <zyimin@linux.vnet.ibm.com>
Fri, 3 Jun 2016 06:17:59 +0000 (14:17 +0800)
committerCornelia Huck <cornelia.huck@de.ibm.com>
Mon, 11 Jul 2016 07:48:05 +0000 (09:48 +0200)
s390_find_dev_by_idx() only indexes usable zpci devices. It implies
that the index value of each zpci device is dynamic and may change if
a new zpci device is plugged. So we have to use a constant index to
look up the device.

Signed-off-by: Yi Min Zhao <zyimin@linux.vnet.ibm.com>
Reviewed-by: Pierre Morel <pmorel@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
hw/s390x/s390-pci-bus.c

index 57d5d143184f2e1a11c7e82ab311b1030fba6e27..9e24268fd1776d967338c96640948b0fc9afce71 100644 (file)
@@ -223,28 +223,9 @@ static S390PCIBusDevice *s390_pci_find_dev_by_target(const char *target)
 
 S390PCIBusDevice *s390_pci_find_dev_by_idx(uint32_t idx)
 {
-    S390PCIBusDevice *pbdev;
-    int i;
-    int j = 0;
     S390pciState *s = s390_get_phb();
 
-    for (i = 0; i < PCI_SLOT_MAX; i++) {
-        pbdev = s->pbdev[i];
-        if (!pbdev) {
-            continue;
-        }
-
-        if (pbdev->state == ZPCI_FS_RESERVED) {
-            continue;
-        }
-
-        if (j == idx) {
-            return pbdev;
-        }
-        j++;
-    }
-
-    return NULL;
+    return s->pbdev[idx & FH_MASK_INDEX];
 }
 
 S390PCIBusDevice *s390_pci_find_dev_by_fh(uint32_t fh)