if (fn > 0)
                                dev->multifunction = 1;
                } else if (fn == 0) {
-                       /* function 0 is required */
-                       break;
+                       /*
+                        * Function 0 is required unless we are running on
+                        * a hypervisor that passes through individual PCI
+                        * functions.
+                        */
+                       if (!jailhouse_paravirt())
+                               break;
                }
                fn = next_fn(bus, dev, fn);
        } while (fn >= 0);
 {
        unsigned int used_buses, normal_bridges = 0, hotplug_bridges = 0;
        unsigned int start = bus->busn_res.start;
-       unsigned int devfn, fn, cmax, max = start;
+       unsigned int devfn, cmax, max = start;
        struct pci_dev *dev;
-       int nr_devs;
 
        dev_dbg(&bus->dev, "scanning bus\n");
 
        /* Go find them, Rover! */
-       for (devfn = 0; devfn < 256; devfn += 8) {
-               nr_devs = pci_scan_slot(bus, devfn);
-
-               /*
-                * The Jailhouse hypervisor may pass individual functions of a
-                * multi-function device to a guest without passing function 0.
-                * Look for them as well.
-                */
-               if (jailhouse_paravirt() && nr_devs == 0) {
-                       for (fn = 1; fn < 8; fn++) {
-                               dev = pci_scan_single_device(bus, devfn + fn);
-                               if (dev)
-                                       dev->multifunction = 1;
-                       }
-               }
-       }
+       for (devfn = 0; devfn < 256; devfn += 8)
+               pci_scan_slot(bus, devfn);
 
        /* Reserve buses for SR-IOV capability */
        used_buses = pci_iov_bus_range(bus);