]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/base/core.c
[PATCH] fix klist semantics for lists which have elements removed on traversal
[mirror_ubuntu-artful-kernel.git] / drivers / base / core.c
index c8a33df007612b1e417744a262ba3fe1026114dd..6ab73f5c799aa486b3cc6f8050b82f962c02ff89 100644 (file)
@@ -191,6 +191,20 @@ void device_remove_file(struct device * dev, struct device_attribute * attr)
        }
 }
 
+static void klist_children_get(struct klist_node *n)
+{
+       struct device *dev = container_of(n, struct device, knode_parent);
+
+       get_device(dev);
+}
+
+static void klist_children_put(struct klist_node *n)
+{
+       struct device *dev = container_of(n, struct device, knode_parent);
+
+       put_device(dev);
+}
+
 
 /**
  *     device_initialize - init device structure.
@@ -207,7 +221,8 @@ void device_initialize(struct device *dev)
 {
        kobj_set_kset_s(dev, devices_subsys);
        kobject_init(&dev->kobj);
-       klist_init(&dev->klist_children);
+       klist_init(&dev->klist_children, klist_children_get,
+                  klist_children_put);
        INIT_LIST_HEAD(&dev->dma_pools);
        init_MUTEX(&dev->sem);
 }