aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/pci/bus.c4
-rw-r--r--drivers/pci/probe.c39
-rw-r--r--drivers/pci/remove.c4
-rw-r--r--include/linux/pci.h3
4 files changed, 1 insertions, 49 deletions
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
index e1c079aa0e82..529d9d7727b0 100644
--- a/drivers/pci/bus.c
+++ b/drivers/pci/bus.c
@@ -85,10 +85,6 @@ int pci_bus_add_device(struct pci_dev *dev)
85 return retval; 85 return retval;
86 86
87 dev->is_added = 1; 87 dev->is_added = 1;
88 down_write(&pci_bus_sem);
89 list_add_tail(&dev->global_list, &pci_devices);
90 up_write(&pci_bus_sem);
91
92 pci_proc_attach_device(dev); 88 pci_proc_attach_device(dev);
93 pci_create_sysfs_dev_files(dev); 89 pci_create_sysfs_dev_files(dev);
94 return 0; 90 return 0;
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 7217f4283ce8..504f19b2af45 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -20,8 +20,6 @@
20LIST_HEAD(pci_root_buses); 20LIST_HEAD(pci_root_buses);
21EXPORT_SYMBOL(pci_root_buses); 21EXPORT_SYMBOL(pci_root_buses);
22 22
23LIST_HEAD(pci_devices);
24
25 23
26static int find_anything(struct device *dev, void *data) 24static int find_anything(struct device *dev, void *data)
27{ 25{
@@ -860,7 +858,6 @@ struct pci_dev *alloc_pci_dev(void)
860 if (!dev) 858 if (!dev)
861 return NULL; 859 return NULL;
862 860
863 INIT_LIST_HEAD(&dev->global_list);
864 INIT_LIST_HEAD(&dev->bus_list); 861 INIT_LIST_HEAD(&dev->bus_list);
865 862
866 pci_msi_init_pci_dev(dev); 863 pci_msi_init_pci_dev(dev);
@@ -957,7 +954,6 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus)
957 * Add the device to our list of discovered devices 954 * Add the device to our list of discovered devices
958 * and the bus list for fixup functions, etc. 955 * and the bus list for fixup functions, etc.
959 */ 956 */
960 INIT_LIST_HEAD(&dev->global_list);
961 down_write(&pci_bus_sem); 957 down_write(&pci_bus_sem);
962 list_add_tail(&dev->bus_list, &bus->devices); 958 list_add_tail(&dev->bus_list, &bus->devices);
963 up_write(&pci_bus_sem); 959 up_write(&pci_bus_sem);
@@ -1186,7 +1182,7 @@ static void __init pci_insertion_sort_klist(struct pci_dev *a, struct list_head
1186 list_move_tail(&a->dev.knode_bus.n_node, list); 1182 list_move_tail(&a->dev.knode_bus.n_node, list);
1187} 1183}
1188 1184
1189static void __init pci_sort_breadthfirst_klist(void) 1185void __init pci_sort_breadthfirst(void)
1190{ 1186{
1191 LIST_HEAD(sorted_devices); 1187 LIST_HEAD(sorted_devices);
1192 struct list_head *pos, *tmp; 1188 struct list_head *pos, *tmp;
@@ -1207,36 +1203,3 @@ static void __init pci_sort_breadthfirst_klist(void)
1207 list_splice(&sorted_devices, &device_klist->k_list); 1203 list_splice(&sorted_devices, &device_klist->k_list);
1208 spin_unlock(&device_klist->k_lock); 1204 spin_unlock(&device_klist->k_lock);
1209} 1205}
1210
1211static void __init pci_insertion_sort_devices(struct pci_dev *a, struct list_head *list)
1212{
1213 struct pci_dev *b;
1214
1215 list_for_each_entry(b, list, global_list) {
1216 if (pci_sort_bf_cmp(a, b) <= 0) {
1217 list_move_tail(&a->global_list, &b->global_list);
1218 return;
1219 }
1220 }
1221 list_move_tail(&a->global_list, list);
1222}
1223
1224static void __init pci_sort_breadthfirst_devices(void)
1225{
1226 LIST_HEAD(sorted_devices);
1227 struct pci_dev *dev, *tmp;
1228
1229 down_write(&pci_bus_sem);
1230 list_for_each_entry_safe(dev, tmp, &pci_devices, global_list) {
1231 pci_insertion_sort_devices(dev, &sorted_devices);
1232 }
1233 list_splice(&sorted_devices, &pci_devices);
1234 up_write(&pci_bus_sem);
1235}
1236
1237void __init pci_sort_breadthfirst(void)
1238{
1239 pci_sort_breadthfirst_devices();
1240 pci_sort_breadthfirst_klist();
1241}
1242
diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c
index d3c77cbe3279..b6824833343f 100644
--- a/drivers/pci/remove.c
+++ b/drivers/pci/remove.c
@@ -23,10 +23,6 @@ static void pci_stop_dev(struct pci_dev *dev)
23 pci_remove_sysfs_dev_files(dev); 23 pci_remove_sysfs_dev_files(dev);
24 device_unregister(&dev->dev); 24 device_unregister(&dev->dev);
25 dev->is_added = 0; 25 dev->is_added = 0;
26 down_write(&pci_bus_sem);
27 list_del(&dev->global_list);
28 dev->global_list.next = dev->global_list.prev = NULL;
29 up_write(&pci_bus_sem);
30 } 26 }
31} 27}
32 28
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 5e6d0f413fb9..3b8a4e17052f 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -132,7 +132,6 @@ struct pci_cap_saved_state {
132 * The pci_dev structure is used to describe PCI devices. 132 * The pci_dev structure is used to describe PCI devices.
133 */ 133 */
134struct pci_dev { 134struct pci_dev {
135 struct list_head global_list; /* node in list of all PCI devices */
136 struct list_head bus_list; /* node in per-bus list */ 135 struct list_head bus_list; /* node in per-bus list */
137 struct pci_bus *bus; /* bus this device is on */ 136 struct pci_bus *bus; /* bus this device is on */
138 struct pci_bus *subordinate; /* bus this device bridges to */ 137 struct pci_bus *subordinate; /* bus this device bridges to */
@@ -206,7 +205,6 @@ struct pci_dev {
206 205
207extern struct pci_dev *alloc_pci_dev(void); 206extern struct pci_dev *alloc_pci_dev(void);
208 207
209#define pci_dev_g(n) list_entry(n, struct pci_dev, global_list)
210#define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list) 208#define pci_dev_b(n) list_entry(n, struct pci_dev, bus_list)
211#define to_pci_dev(n) container_of(n, struct pci_dev, dev) 209#define to_pci_dev(n) container_of(n, struct pci_dev, dev)
212#define for_each_pci_dev(d) while ((d = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, d)) != NULL) 210#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;
450/* Do NOT directly access these two variables, unless you are arch specific pci 448/* Do NOT directly access these two variables, unless you are arch specific pci
451 * code, or pci core code. */ 449 * code, or pci core code. */
452extern struct list_head pci_root_buses; /* list of all known PCI buses */ 450extern struct list_head pci_root_buses; /* list of all known PCI buses */
453extern struct list_head pci_devices; /* list of all devices */
454/* Some device drivers need know if pci is initiated */ 451/* Some device drivers need know if pci is initiated */
455extern int no_pci_devices(void); 452extern int no_pci_devices(void);
456 453