diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-22 21:43:48 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-06-22 21:43:48 -0700 |
commit | 2564d8d16f5c2825e28f756e2cf66d390a18dac4 (patch) | |
tree | 90f9a63dca6c6b37d856d246ceed8e25a73858a6 /driver | |
parent | 320f0d3bea6a54d9eb42a31e2df2d4cb325404fb (diff) | |
download | patches-2564d8d16f5c2825e28f756e2cf66d390a18dac4.tar.gz |
bug fix for class devices locking
Diffstat (limited to 'driver')
-rw-r--r-- | driver/driver-core-fix-locking-issues-with-the-devices-that-are-attached-to-classes.patch | 63 | ||||
-rw-r--r-- | driver/put_device-might_sleep.patch | 2 |
2 files changed, 64 insertions, 1 deletions
diff --git a/driver/driver-core-fix-locking-issues-with-the-devices-that-are-attached-to-classes.patch b/driver/driver-core-fix-locking-issues-with-the-devices-that-are-attached-to-classes.patch new file mode 100644 index 0000000000000..8cacd6931c92c --- /dev/null +++ b/driver/driver-core-fix-locking-issues-with-the-devices-that-are-attached-to-classes.patch @@ -0,0 +1,63 @@ +From foo@baz Tue Apr 9 12:12:43 2002 +Date: Thu, 22 Jun 2006 17:17:32 -0700 +To: Greg KH <greg@kroah.com> +From: Greg Kroah-Hartman <gregkh@suse.de> +Subject: Driver core: fix locking issues with the devices that are attached to classes + +Doh, that was foolish... + +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/base/core.c | 19 +++++++++++-------- + 1 file changed, 11 insertions(+), 8 deletions(-) + +--- gregkh-2.6.orig/drivers/base/core.c ++++ gregkh-2.6/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 clas + 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, + } + up(&class->sem); + +- if (dev) { +- list_del_init(&dev->node); ++ if (dev) + device_unregister(dev); +- } + } + EXPORT_SYMBOL_GPL(device_destroy); diff --git a/driver/put_device-might_sleep.patch b/driver/put_device-might_sleep.patch index 695f2c1c9a496..49f8de2530633 100644 --- a/driver/put_device-might_sleep.patch +++ b/driver/put_device-might_sleep.patch @@ -12,7 +12,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- gregkh-2.6.orig/drivers/base/core.c +++ gregkh-2.6/drivers/base/core.c -@@ -420,6 +420,7 @@ struct device * get_device(struct device +@@ -427,6 +427,7 @@ struct device * get_device(struct device */ void put_device(struct device * dev) { |