lkml.org 
[lkml]   [2007]   [Jul]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 5/5] use mutex instead of semaphore in the FTDI ELAN driver
    The FTDI ELAN driver uses a semaphore as mutex. Use the mutex API
    instead of the (binary) semaphore.

    Signed-off-by: Matthias Kaehlcke <matthias.kaehlcke@gmail.com>

    --

    diff --git a/drivers/usb/misc/ftdi-elan.c b/drivers/usb/misc/ftdi-elan.c
    index e0f122e..7cc6883 100644
    --- a/drivers/usb/misc/ftdi-elan.c
    +++ b/drivers/usb/misc/ftdi-elan.c
    @@ -44,6 +44,7 @@
    #include <linux/slab.h>
    #include <linux/module.h>
    #include <linux/kref.h>
    +#include <linux/mutex.h>
    #include <asm/uaccess.h>
    #include <linux/usb.h>
    #include <linux/workqueue.h>
    @@ -64,7 +65,7 @@ static struct workqueue_struct *respond_queue;
    * ftdi_module_lock exists to protect access to global variables
    *
    */
    -static struct semaphore ftdi_module_lock;
    +static struct mutex ftdi_module_lock;
    static int ftdi_instances = 0;
    static struct list_head ftdi_static_list;
    /*
    @@ -199,10 +200,10 @@ static void ftdi_elan_delete(struct kref *kref)
    dev_warn(&ftdi->udev->dev, "FREEING ftdi=%p\n", ftdi);
    usb_put_dev(ftdi->udev);
    ftdi->disconnected += 1;
    - down(&ftdi_module_lock);
    + mutex_lock(&ftdi_module_lock);
    list_del_init(&ftdi->ftdi_list);
    ftdi_instances -= 1;
    - up(&ftdi_module_lock);
    + mutex_unlock(&ftdi_module_lock);
    kfree(ftdi->bulk_in_buffer);
    ftdi->bulk_in_buffer = NULL;
    }
    @@ -2780,10 +2781,10 @@ static int ftdi_elan_probe(struct usb_interface *interface,
    return -ENOMEM;
    }
    memset(ftdi, 0x00, sizeof(struct usb_ftdi));
    - down(&ftdi_module_lock);
    + mutex_lock(&ftdi_module_lock);
    list_add_tail(&ftdi->ftdi_list, &ftdi_static_list);
    ftdi->sequence_num = ++ftdi_instances;
    - up(&ftdi_module_lock);
    + mutex_unlock(&ftdi_module_lock);
    ftdi_elan_init_kref(ftdi);
    init_MUTEX(&ftdi->sw_lock);
    ftdi->udev = usb_get_dev(interface_to_usbdev(interface));
    @@ -2909,7 +2910,7 @@ static int __init ftdi_elan_init(void)
    int result;
    printk(KERN_INFO "driver %s built at %s on %s\n", ftdi_elan_driver.name,
    __TIME__, __DATE__);
    - init_MUTEX(&ftdi_module_lock);
    + mutex_init(&ftdi_module_lock);
    INIT_LIST_HEAD(&ftdi_static_list);
    status_queue = create_singlethread_workqueue("ftdi-status-control");
    if (!status_queue)
    --
    Matthias Kaehlcke
    Linux Application Developer
    Barcelona

    If liberty means anything at all, it means the
    right to tell people what they do not want to hear
    (George Orwell)
    .''`.
    using free software / Debian GNU/Linux | http://debian.org : :' :
    `. `'`
    gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-
    -
    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: 2007-07-13 21:31    [W:0.023 / U:118.032 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site