diff options
author | Andy Walls <awalls@md.metrocast.net> | 2011-01-27 02:34:13 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-03-22 19:23:55 -0300 |
commit | 8152b760effbff11cb4eef6292ae3b47719ee792 (patch) | |
tree | 8cb13e50cafaa6503e8860cfa4f20fe80ce3701d /drivers | |
parent | 915e54733de4a36742ab78b4768750ce72662f85 (diff) | |
download | kernel_samsung_smdk4412-8152b760effbff11cb4eef6292ae3b47719ee792.zip kernel_samsung_smdk4412-8152b760effbff11cb4eef6292ae3b47719ee792.tar.gz kernel_samsung_smdk4412-8152b760effbff11cb4eef6292ae3b47719ee792.tar.bz2 |
[media] lirc_zilog: Remove unneeded rx->buf_lock
Remove the rx->buf_lock that protected the rx->buf lirc_buffer. The
underlying operations on the objects within the lirc_buffer are already
protected by spinlocks, or the objects are constant (e.g. chunk_size).
Signed-off-by: Andy Walls <awalls@md.metrocast.net>
Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/lirc/lirc_zilog.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/drivers/staging/lirc/lirc_zilog.c b/drivers/staging/lirc/lirc_zilog.c index 695c3df..a62b94b 100644 --- a/drivers/staging/lirc/lirc_zilog.c +++ b/drivers/staging/lirc/lirc_zilog.c @@ -67,9 +67,8 @@ struct IR_rx { /* RX device */ struct i2c_client *c; - /* RX device buffer & lock */ + /* RX device buffer */ struct lirc_buffer buf; - struct mutex buf_lock; /* RX polling thread data */ struct task_struct *task; @@ -718,18 +717,15 @@ static ssize_t read(struct file *filep, char *outbuf, size_t n, loff_t *ppos) struct IR *ir = filep->private_data; struct IR_rx *rx = ir->rx; int ret = 0, written = 0; + unsigned int m; DECLARE_WAITQUEUE(wait, current); dprintk("read called\n"); if (rx == NULL) return -ENODEV; - if (mutex_lock_interruptible(&rx->buf_lock)) - return -ERESTARTSYS; - if (n % rx->buf.chunk_size) { dprintk("read result = -EINVAL\n"); - mutex_unlock(&rx->buf_lock); return -EINVAL; } @@ -767,19 +763,19 @@ static ssize_t read(struct file *filep, char *outbuf, size_t n, loff_t *ppos) set_current_state(TASK_INTERRUPTIBLE); } else { unsigned char buf[rx->buf.chunk_size]; - lirc_buffer_read(&rx->buf, buf); - ret = copy_to_user((void *)outbuf+written, buf, - rx->buf.chunk_size); - written += rx->buf.chunk_size; + m = lirc_buffer_read(&rx->buf, buf); + if (m == rx->buf.chunk_size) { + ret = copy_to_user((void *)outbuf+written, buf, + rx->buf.chunk_size); + written += rx->buf.chunk_size; + } } } remove_wait_queue(&rx->buf.wait_poll, &wait); set_current_state(TASK_RUNNING); - mutex_unlock(&rx->buf_lock); - dprintk("read result = %s (%d)\n", - ret ? "-EFAULT" : "OK", ret); + dprintk("read result = %d (%s)\n", ret, ret ? "Error" : "OK"); return ret ? ret : written; } @@ -1327,7 +1323,6 @@ static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id) if (ret) goto out_free_xx; - mutex_init(&ir->rx->buf_lock); ir->rx->c = client; ir->rx->hdpvr_data_fmt = (id->driver_data & ID_FLAG_HDPVR) ? true : false; |