struct pci_dev *dev;
 
        list_for_each_entry(dev, &bus->devices, bus_list) {
-               /*
-                * Skip already-present devices (which are on the
-                * global device list.)
-                */
-               if (list_empty(&dev->global_list)) {
+               /* Skip already-added devices */
+               if (!dev->is_added) {
                        int i;
 
                        /* Fill device archdata and setup iommu table */
 
        if (retval)
                return retval;
 
+       dev->is_added = 1;
        down_write(&pci_bus_sem);
        list_add_tail(&dev->global_list, &pci_devices);
        up_write(&pci_bus_sem);
        int retval;
 
        list_for_each_entry(dev, &bus->devices, bus_list) {
-               /*
-                * Skip already-present devices (which are on the
-                * global device list.)
-                */
-               if (!list_empty(&dev->global_list))
+               /* Skip already-added devices */
+               if (dev->is_added)
                        continue;
                retval = pci_bus_add_device(dev);
                if (retval)
        }
 
        list_for_each_entry(dev, &bus->devices, bus_list) {
-
-               BUG_ON(list_empty(&dev->global_list));
+               BUG_ON(!dev->is_added);
 
                /*
                 * If there is an unattached subordinate bus, attach
 
  *
  * Scan a PCI slot on the specified PCI bus for devices, adding
  * discovered devices to the @bus->devices list.  New devices
- * will have an empty dev->global_list head.
+ * will not have is_added set.
  */
 int pci_scan_slot(struct pci_bus *bus, int devfn)
 {
 
 
 static void pci_stop_dev(struct pci_dev *dev)
 {
-       if (!dev->global_list.next)
-               return;
-
-       if (!list_empty(&dev->global_list)) {
+       if (dev->is_added) {
                pci_proc_detach_device(dev);
                pci_remove_sysfs_dev_files(dev);
                device_unregister(&dev->dev);
+               dev->is_added = 0;
                down_write(&pci_bus_sem);
                list_del(&dev->global_list);
                dev->global_list.next = dev->global_list.prev = NULL;
 
        unsigned int    transparent:1;  /* Transparent PCI bridge */
        unsigned int    multifunction:1;/* Part of multi-function device */
        /* keep track of device state */
+       unsigned int    is_added:1;
        unsigned int    is_busmaster:1; /* device is busmaster */
        unsigned int    no_msi:1;       /* device may not use msi */
        unsigned int    no_d1d2:1;   /* only allow d0 or d3 */