aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-06-22 21:43:48 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2006-06-22 21:43:48 -0700
commit2564d8d16f5c2825e28f756e2cf66d390a18dac4 (patch)
tree90f9a63dca6c6b37d856d246ceed8e25a73858a6 /driver
parent320f0d3bea6a54d9eb42a31e2df2d4cb325404fb (diff)
downloadpatches-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.patch63
-rw-r--r--driver/put_device-might_sleep.patch2
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)
{