aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2005-11-17 15:50:35 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2005-11-17 15:50:35 -0800
commita660c1509ae85d386ab886c2627c8bc05933e0f3 (patch)
treea3e76f3f4e58e3d0a0fc5d3d137e522fe3a35feb /driver
parent9472c47f6199ce19729ce72ea447d5c78f3a961a (diff)
downloadpatches-a660c1509ae85d386ab886c2627c8bc05933e0f3.tar.gz
pci usb and driver core fixes
Diffstat (limited to 'driver')
-rw-r--r--driver/small-fixups-to-driver-core.patch114
1 files changed, 114 insertions, 0 deletions
diff --git a/driver/small-fixups-to-driver-core.patch b/driver/small-fixups-to-driver-core.patch
new file mode 100644
index 0000000000000..e618742b2bfde
--- /dev/null
+++ b/driver/small-fixups-to-driver-core.patch
@@ -0,0 +1,114 @@
+From stern@rowland.harvard.edu Thu Nov 17 11:50:20 2005
+Date: Thu, 17 Nov 2005 15:04:42 -0500 (EST)
+From: Alan Stern <stern@rowland.harvard.edu>
+To: Greg KH <greg@kroah.com>
+cc: Patrick Mochel <mochel@digitalimplant.org>
+Subject: [PATCH] Small fixups to driver core
+Message-ID: <Pine.LNX.4.44L0.0511171444400.4452-100000@iolanthe.rowland.org>
+
+
+This patch (as603) makes a few small fixes to the driver core:
+
+Change spin_lock_irq for a klist lock to spin_lock;
+
+Fix reference count leaks;
+
+Minor spelling and formatting changes.
+
+Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
+Acked-by Patrick Mochel <mochel@digitalimplant.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ drivers/base/bus.c | 21 +++++++++------------
+ drivers/base/dd.c | 8 +++-----
+ 2 files changed, 12 insertions(+), 17 deletions(-)
+
+--- gregkh-2.6.orig/drivers/base/bus.c
++++ gregkh-2.6/drivers/base/bus.c
+@@ -133,7 +133,7 @@ static struct kobj_type ktype_bus = {
+ decl_subsys(bus, &ktype_bus, NULL);
+
+
+-/* Manually detach a device from it's associated driver. */
++/* Manually detach a device from its associated driver. */
+ static int driver_helper(struct device *dev, void *data)
+ {
+ const char *name = data;
+@@ -151,14 +151,13 @@ static ssize_t driver_unbind(struct devi
+ int err = -ENODEV;
+
+ dev = bus_find_device(bus, NULL, (void *)buf, driver_helper);
+- if ((dev) &&
+- (dev->driver == drv)) {
++ if (dev && dev->driver == drv) {
+ device_release_driver(dev);
+ err = count;
+ }
+- if (err)
+- return err;
+- return count;
++ put_device(dev);
++ put_bus(bus);
++ return err;
+ }
+ static DRIVER_ATTR(unbind, S_IWUSR, NULL, driver_unbind);
+
+@@ -175,16 +174,14 @@ static ssize_t driver_bind(struct device
+ int err = -ENODEV;
+
+ dev = bus_find_device(bus, NULL, (void *)buf, driver_helper);
+- if ((dev) &&
+- (dev->driver == NULL)) {
++ if (dev && dev->driver == NULL) {
+ down(&dev->sem);
+ err = driver_probe_device(drv, dev);
+ up(&dev->sem);
+- put_device(dev);
+ }
+- if (err)
+- return err;
+- return count;
++ put_device(dev);
++ put_bus(bus);
++ return err;
+ }
+ static DRIVER_ATTR(bind, S_IWUSR, NULL, driver_bind);
+
+--- gregkh-2.6.orig/drivers/base/dd.c
++++ gregkh-2.6/drivers/base/dd.c
+@@ -62,7 +62,6 @@ void device_bind_driver(struct device *
+ * because we don't know the format of the ID structures, nor what
+ * is to be considered a match and what is not.
+ *
+- *
+ * This function returns 1 if a match is found, an error if one
+ * occurs (that is not -ENODEV or -ENXIO), and 0 otherwise.
+ *
+@@ -158,7 +157,6 @@ static int __driver_attach(struct device
+ driver_probe_device(drv, dev);
+ up(&dev->sem);
+
+-
+ return 0;
+ }
+
+@@ -225,15 +223,15 @@ void driver_detach(struct device_driver
+ struct device * dev;
+
+ for (;;) {
+- spin_lock_irq(&drv->klist_devices.k_lock);
++ spin_lock(&drv->klist_devices.k_lock);
+ if (list_empty(&drv->klist_devices.k_list)) {
+- spin_unlock_irq(&drv->klist_devices.k_lock);
++ spin_unlock(&drv->klist_devices.k_lock);
+ break;
+ }
+ dev = list_entry(drv->klist_devices.k_list.prev,
+ struct device, knode_driver.n_node);
+ get_device(dev);
+- spin_unlock_irq(&drv->klist_devices.k_lock);
++ spin_unlock(&drv->klist_devices.k_lock);
+
+ down(&dev->sem);
+ if (dev->driver == drv)