lkml.org 
[lkml]   [2005]   [Nov]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 01/22] Small fixes to driver core
    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/

    \
     
     \ /
      Last update: 2005-11-24 00:54    [W:0.028 / U:1.176 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site