X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Finput%2Fserio%2Fserio_raw.c;h=47e08de18d07adab295db158fa237b2cc5f83383;hb=987b0145d94eecf292d8b301228356f44611ab7c;hp=5a2703b536dc0948bcb8c1b530c6cbff80eb4482;hpb=f7ed79d23a47594e7834d66a8f14449796d4f3e6;p=linux-2.6.git diff --git a/drivers/input/serio/serio_raw.c b/drivers/input/serio/serio_raw.c index 5a2703b53..47e08de18 100644 --- a/drivers/input/serio/serio_raw.c +++ b/drivers/input/serio/serio_raw.c @@ -19,7 +19,6 @@ #include #include #include -#include #define DRIVER_DESC "Raw serio driver" @@ -47,7 +46,7 @@ struct serio_raw_list { struct list_head node; }; -static DEFINE_MUTEX(serio_raw_mutex); +static DECLARE_MUTEX(serio_raw_sem); static LIST_HEAD(serio_raw_list); static unsigned int serio_raw_no; @@ -82,7 +81,7 @@ static int serio_raw_open(struct inode *inode, struct file *file) struct serio_raw_list *list; int retval = 0; - retval = mutex_lock_interruptible(&serio_raw_mutex); + retval = down_interruptible(&serio_raw_sem); if (retval) return retval; @@ -96,11 +95,12 @@ static int serio_raw_open(struct inode *inode, struct file *file) goto out; } - if (!(list = kzalloc(sizeof(struct serio_raw_list), GFP_KERNEL))) { + if (!(list = kmalloc(sizeof(struct serio_raw_list), GFP_KERNEL))) { retval = -ENOMEM; goto out; } + memset(list, 0, sizeof(struct serio_raw_list)); list->serio_raw = serio_raw; file->private_data = list; @@ -108,7 +108,7 @@ static int serio_raw_open(struct inode *inode, struct file *file) list_add_tail(&list->node, &serio_raw->list); out: - mutex_unlock(&serio_raw_mutex); + up(&serio_raw_sem); return retval; } @@ -130,12 +130,12 @@ static int serio_raw_release(struct inode *inode, struct file *file) struct serio_raw_list *list = file->private_data; struct serio_raw *serio_raw = list->serio_raw; - mutex_lock(&serio_raw_mutex); + down(&serio_raw_sem); serio_raw_fasync(-1, file, 0); serio_raw_cleanup(serio_raw); - mutex_unlock(&serio_raw_mutex); + up(&serio_raw_sem); return 0; } @@ -194,7 +194,7 @@ static ssize_t serio_raw_write(struct file *file, const char __user *buffer, siz int retval; unsigned char c; - retval = mutex_lock_interruptible(&serio_raw_mutex); + retval = down_interruptible(&serio_raw_sem); if (retval) return retval; @@ -219,7 +219,7 @@ static ssize_t serio_raw_write(struct file *file, const char __user *buffer, siz }; out: - mutex_unlock(&serio_raw_mutex); + up(&serio_raw_sem); return written; } @@ -275,13 +275,14 @@ static int serio_raw_connect(struct serio *serio, struct serio_driver *drv) struct serio_raw *serio_raw; int err; - if (!(serio_raw = kzalloc(sizeof(struct serio_raw), GFP_KERNEL))) { + if (!(serio_raw = kmalloc(sizeof(struct serio_raw), GFP_KERNEL))) { printk(KERN_ERR "serio_raw.c: can't allocate memory for a device\n"); return -ENOMEM; } - mutex_lock(&serio_raw_mutex); + down(&serio_raw_sem); + memset(serio_raw, 0, sizeof(struct serio_raw)); snprintf(serio_raw->name, sizeof(serio_raw->name), "serio_raw%d", serio_raw_no++); serio_raw->refcnt = 1; serio_raw->serio = serio; @@ -324,7 +325,7 @@ out_free: serio_set_drvdata(serio, NULL); kfree(serio_raw); out: - mutex_unlock(&serio_raw_mutex); + up(&serio_raw_sem); return err; } @@ -349,7 +350,7 @@ static void serio_raw_disconnect(struct serio *serio) { struct serio_raw *serio_raw; - mutex_lock(&serio_raw_mutex); + down(&serio_raw_sem); serio_raw = serio_get_drvdata(serio); @@ -360,7 +361,7 @@ static void serio_raw_disconnect(struct serio *serio) if (!serio_raw_cleanup(serio_raw)) wake_up_interruptible(&serio_raw->wait); - mutex_unlock(&serio_raw_mutex); + up(&serio_raw_sem); } static struct serio_device_id serio_raw_serio_ids[] = {