[patch 01/22] Small fixes to driver core

From: Greg Kroah-Hartman (gregkh_at_suse.de)
Date: 11/24/05

  • Next message: Benjamin LaHaise: "Re: [RFC] [PATCH 0/3] ioat: DMA engine support"
    Date:	Wed, 23 Nov 2005 15:43:50 -0800
    To: Linus Torvalds <torvalds@osdl.org>, Andrew Morton <akpm@osdl.org>
    
    

    From: Alan Stern <stern@rowland.harvard.edu>

    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(-)
    --- usb-2.6.orig/drivers/base/bus.c
    +++ usb-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);
     
    --- usb-2.6.orig/drivers/base/dd.c
    +++ usb-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)
    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at  http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at  http://www.tux.org/lkml/
    

  • Next message: Benjamin LaHaise: "Re: [RFC] [PATCH 0/3] ioat: DMA engine support"

    Relevant Pages