PCI: remove global list of PCI devices
authorGreg Kroah-Hartman <gregkh@suse.de>
Thu, 14 Feb 2008 22:56:56 +0000 (14:56 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 21 Apr 2008 04:47:02 +0000 (21:47 -0700)
This patch finally removes the global list of PCI devices.  We are
relying entirely on the list held in the driver core now, and do not
need a separate "shadow" list as no one uses it.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/pci/bus.c
drivers/pci/probe.c
drivers/pci/remove.c
include/linux/pci.h

index e1c079a..529d9d7 100644 (file)
@@ -85,10 +85,6 @@ int pci_bus_add_device(struct pci_dev *dev)
                return retval;
 
        dev->is_added = 1;
-       down_write(&pci_bus_sem);
-       list_add_tail(&dev->global_list, &pci_devices);
-       up_write(&pci_bus_sem);
-
        pci_proc_attach_device(dev);
        pci_create_sysfs_dev_files(dev);
        return 0;
index 7217f42..504f19b 100644 (file)
@@ -20,8 +20,6 @@
 LIST_HEAD(pci_root_buses);
 EXPORT_SYMBOL(pci_root_buses);
 
-LIST_HEAD(pci_devices);
-
 
 static int find_anything(struct device *dev, void *data)
 {
@@ -860,7 +858,6 @@ struct pci_dev *alloc_pci_dev(void)
        if (!dev)
                return NULL;
 
-       INIT_LIST_HEAD(&dev->global_list);
        INIT_LIST_HEAD(&dev->bus_list);
 
        pci_msi_init_pci_dev(dev);
@@ -957,7 +954,6 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
         * Add the device to our list of discovered devices
         * and the bus list for fixup functions, etc.
         */
-       INIT_LIST_HEAD(&dev->global_list);
        down_write(&pci_bus_sem);
        list_add_tail(&dev->bus_list, &bus->devices);
        up_write(&pci_bus_sem);
@@ -1186,7 +1182,7 @@ static void __init pci_insertion_sort_klist(struct pci_dev *a, struct list_head
        list_move_tail(&a->dev.knode_bus.n_node, list);
 }
 
-static void __init pci_sort_breadthfirst_klist(void)
+void __init pci_sort_breadthfirst(void)
 {
        LIST_HEAD(sorted_devices);
        struct list_head *pos, *tmp;
@@ -1207,36 +1203,3 @@ static void __init pci_sort_breadthfirst_klist(void)
        list_splice(&sorted_devices, &device_klist->k_list);
        spin_unlock(&device_klist->k_lock);
 }
-
-static void __init pci_insertion_sort_devices(struct pci_dev *a, struct list_head *list)
-{
-       struct pci_dev *b;
-
-       list_for_each_entry(b, list, global_list) {
-               if (pci_sort_bf_cmp(a, b) <= 0) {
-                       list_move_tail(&a->global_list, &b->global_list);
-                       return;
-               }
-       }
-       list_move_tail(&a->global_list, list);
-}
-
-static void __init pci_sort_breadthfirst_devices(void)
-{
-       LIST_HEAD(sorted_devices);
-       struct pci_dev *dev, *tmp;
-
-       down_write(&pci_bus_sem);
-       list_for_each_entry_safe(dev, tmp, &pci_devices, global_list) {
-               pci_insertion_sort_devices(dev, &sorted_devices);
-       }
-       list_splice(&sorted_devices, &pci_devices);
-       up_write(&pci_bus_sem);
-}
-
-void __init pci_sort_breadthfirst(void)
-{
-       pci_sort_breadthfirst_devices();
-       pci_sort_breadthfirst_klist();
-}
-
index d3c77cb..b682483 100644 (file)
@@ -23,10 +23,6 @@ static void pci_stop_dev(struct pci_dev *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;
-               up_write(&pci_bus_sem);
        }
 }
 
index 5e6d0f4..3b8a4e1 100644 (file)
@@ -132,7 +132,6 @@ struct pci_cap_saved_state {
  * The pci_dev structure is used to describe PCI devices.
  */
 struct pci_dev {
-       struct list_head global_list;   /* node in list of all PCI devices */
        struct list_head bus_list;      /* node in per-bus list */
        struct pci_bus  *bus;           /* bus this device is on */
        struct pci_bus  *subordinate;   /* bus this device bridges to */
@@ -206,7 +205,6 @@ struct pci_dev {
 
 extern struct pci_dev *alloc_pci_dev(void);
 
-#define pci_dev_g(n) list_entry(n, struct pci_dev, global_list)
 #define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list)
 #define        to_pci_dev(n) container_of(n, struct pci_dev, dev)
 #define for_each_pci_dev(d) while ((d = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, d)) != NULL)
@@ -450,7 +448,6 @@ extern struct bus_type pci_bus_type;
 /* Do NOT directly access these two variables, unless you are arch specific pci
  * code, or pci core code. */
 extern struct list_head pci_root_buses;        /* list of all known PCI buses */
-extern struct list_head pci_devices;   /* list of all devices */
 /* Some device drivers need know if pci is initiated */
 extern int no_pci_devices(void);