diff options
Diffstat (limited to 'drivers/base/bus.c')
-rw-r--r-- | drivers/base/bus.c | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 17e96698410e..03204bfd17af 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c | |||
@@ -568,6 +568,36 @@ static void bus_remove_attrs(struct bus_type * bus) | |||
568 | } | 568 | } |
569 | } | 569 | } |
570 | 570 | ||
571 | static void klist_devices_get(struct klist_node *n) | ||
572 | { | ||
573 | struct device *dev = container_of(n, struct device, knode_bus); | ||
574 | |||
575 | get_device(dev); | ||
576 | } | ||
577 | |||
578 | static void klist_devices_put(struct klist_node *n) | ||
579 | { | ||
580 | struct device *dev = container_of(n, struct device, knode_bus); | ||
581 | |||
582 | put_device(dev); | ||
583 | } | ||
584 | |||
585 | static void klist_drivers_get(struct klist_node *n) | ||
586 | { | ||
587 | struct device_driver *drv = container_of(n, struct device_driver, | ||
588 | knode_bus); | ||
589 | |||
590 | get_driver(drv); | ||
591 | } | ||
592 | |||
593 | static void klist_drivers_put(struct klist_node *n) | ||
594 | { | ||
595 | struct device_driver *drv = container_of(n, struct device_driver, | ||
596 | knode_bus); | ||
597 | |||
598 | put_driver(drv); | ||
599 | } | ||
600 | |||
571 | /** | 601 | /** |
572 | * bus_register - register a bus with the system. | 602 | * bus_register - register a bus with the system. |
573 | * @bus: bus. | 603 | * @bus: bus. |
@@ -602,8 +632,8 @@ int bus_register(struct bus_type * bus) | |||
602 | if (retval) | 632 | if (retval) |
603 | goto bus_drivers_fail; | 633 | goto bus_drivers_fail; |
604 | 634 | ||
605 | klist_init(&bus->klist_devices); | 635 | klist_init(&bus->klist_devices, klist_devices_get, klist_devices_put); |
606 | klist_init(&bus->klist_drivers); | 636 | klist_init(&bus->klist_drivers, klist_drivers_get, klist_drivers_put); |
607 | bus_add_attrs(bus); | 637 | bus_add_attrs(bus); |
608 | 638 | ||
609 | pr_debug("bus type '%s' registered\n", bus->name); | 639 | pr_debug("bus type '%s' registered\n", bus->name); |