diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2008-02-14 17:56:56 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-04-21 00:47:02 -0400 |
commit | 5ff580c10ec06fd296bd23d4570c1a95194094a0 (patch) | |
tree | fc00b4a107824519ae452c264674e5b8c2768d8e /drivers | |
parent | c71c68a04ba7672b9373ef04173114c211bb9f88 (diff) |
PCI: remove global list of PCI devices
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/pci/bus.c | 4 | ||||
-rw-r--r-- | drivers/pci/probe.c | 39 | ||||
-rw-r--r-- | drivers/pci/remove.c | 4 |
3 files changed, 1 insertions, 46 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 @@ | |||
20 | LIST_HEAD(pci_root_buses); | 20 | LIST_HEAD(pci_root_buses); |
21 | EXPORT_SYMBOL(pci_root_buses); | 21 | EXPORT_SYMBOL(pci_root_buses); |
22 | 22 | ||
23 | LIST_HEAD(pci_devices); | ||
24 | |||
25 | 23 | ||
26 | static int find_anything(struct device *dev, void *data) | 24 | static 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 | ||
1189 | static void __init pci_sort_breadthfirst_klist(void) | 1185 | void __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 | |||
1211 | static 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 | |||
1224 | static 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 | |||
1237 | void __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 | ||