From 48ff754d432305e46401fde4940019b8a66018eb Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 22 Jun 2006 17:17:32 -0700 Subject: [PATCH] --- yaml --- r: 28886 b: refs/heads/master c: 5d9fd169c9fbdaecdc430431e59bf94ff40b93d3 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/base/core.c | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 25572e62c814..21ac6ddc8015 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0517587e5896cef1d5f99d3b24f5f2ca15d952ad +refs/heads/master: 5d9fd169c9fbdaecdc430431e59bf94ff40b93d3 diff --git a/trunk/drivers/base/core.c b/trunk/drivers/base/core.c index d0f84ff78776..27c2176895de 100644 --- a/trunk/drivers/base/core.c +++ b/trunk/drivers/base/core.c @@ -356,6 +356,13 @@ int device_add(struct device *dev) if (parent) klist_add_tail(&dev->knode_parent, &parent->klist_children); + if (dev->class) { + /* tie the class to the device */ + down(&dev->class->sem); + list_add_tail(&dev->node, &dev->class->devices); + up(&dev->class->sem); + } + /* notify platform of device entry */ if (platform_notify) platform_notify(dev); @@ -455,6 +462,9 @@ void device_del(struct device * dev) sysfs_remove_link(&dev->kobj, "device"); sysfs_remove_link(&dev->parent->kobj, class_name); kfree(class_name); + down(&dev->class->sem); + list_del_init(&dev->node); + up(&dev->class->sem); } device_remove_file(dev, &dev->uevent_attr); @@ -601,11 +611,6 @@ struct device *device_create(struct class *class, struct device *parent, if (retval) goto error; - /* tie the class to the device */ - down(&class->sem); - list_add_tail(&dev->node, &class->devices); - up(&class->sem); - return dev; error: @@ -636,9 +641,7 @@ void device_destroy(struct class *class, dev_t devt) } up(&class->sem); - if (dev) { - list_del_init(&dev->node); + if (dev) device_unregister(dev); - } } EXPORT_SYMBOL_GPL(device_destroy);