提交 b249072e 编写于 作者: G Greg Kroah-Hartman

driver core: add way to get to bus device klist

This allows an easier way to get to the device klist associated with a
struct bus_type (you have three to choose from...)  This will make it
easier to move these fields to be dynamic in a future patch.

The only user of this is the PCI core which horribly abuses this
interface to rearrange the order of the pci devices.  This should be
done using the existing bus device walking functions, but that's left
for future patches.

Cc: Kay Sievers <kay.sievers@vrfy.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 0fed80f7
...@@ -941,6 +941,12 @@ struct kset *bus_get_kset(struct bus_type *bus) ...@@ -941,6 +941,12 @@ struct kset *bus_get_kset(struct bus_type *bus)
} }
EXPORT_SYMBOL_GPL(bus_get_kset); EXPORT_SYMBOL_GPL(bus_get_kset);
struct klist *bus_get_device_klist(struct bus_type *bus)
{
return &bus->klist_devices;
}
EXPORT_SYMBOL_GPL(bus_get_device_klist);
int __init buses_init(void) int __init buses_init(void)
{ {
bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL); bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL);
......
...@@ -1210,16 +1210,19 @@ static void __init pci_sort_breadthfirst_klist(void) ...@@ -1210,16 +1210,19 @@ static void __init pci_sort_breadthfirst_klist(void)
struct klist_node *n; struct klist_node *n;
struct device *dev; struct device *dev;
struct pci_dev *pdev; struct pci_dev *pdev;
struct klist *device_klist;
spin_lock(&pci_bus_type.klist_devices.k_lock); device_klist = bus_get_device_klist(&pci_bus_type);
list_for_each_safe(pos, tmp, &pci_bus_type.klist_devices.k_list) {
spin_lock(&device_klist->k_lock);
list_for_each_safe(pos, tmp, &device_klist->k_list) {
n = container_of(pos, struct klist_node, n_node); n = container_of(pos, struct klist_node, n_node);
dev = container_of(n, struct device, knode_bus); dev = container_of(n, struct device, knode_bus);
pdev = to_pci_dev(dev); pdev = to_pci_dev(dev);
pci_insertion_sort_klist(pdev, &sorted_devices); pci_insertion_sort_klist(pdev, &sorted_devices);
} }
list_splice(&sorted_devices, &pci_bus_type.klist_devices.k_list); list_splice(&sorted_devices, &device_klist->k_list);
spin_unlock(&pci_bus_type.klist_devices.k_lock); spin_unlock(&device_klist->k_lock);
} }
static void __init pci_insertion_sort_devices(struct pci_dev *a, struct list_head *list) static void __init pci_insertion_sort_devices(struct pci_dev *a, struct list_head *list)
......
...@@ -118,6 +118,7 @@ extern int bus_unregister_notifier(struct bus_type *bus, ...@@ -118,6 +118,7 @@ extern int bus_unregister_notifier(struct bus_type *bus,
unbound */ unbound */
extern struct kset *bus_get_kset(struct bus_type *bus); extern struct kset *bus_get_kset(struct bus_type *bus);
extern struct klist *bus_get_device_klist(struct bus_type *bus);
struct device_driver { struct device_driver {
const char * name; const char * name;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册