coh901318: don't open-code simple_read_from_buffer()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 16 Jul 2013 13:58:45 +0000 (17:58 +0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 4 Sep 2013 02:52:46 +0000 (22:52 -0400)
... and BTW, failing copy_to_user() means EFAULT, not EINVAL

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/dma/coh901318.c

index 9bfaddd57ef1ab80c301a7d38b8c40e898e047c1..31011d2a26fcfa0510b64c1114c1f87c05762ec3 100644 (file)
@@ -1339,15 +1339,14 @@ static int coh901318_debugfs_read(struct file *file, char __user *buf,
 {
        u64 started_channels = debugfs_dma_base->pm.started_channels;
        int pool_count = debugfs_dma_base->pool.debugfs_pool_counter;
-       int i;
-       int ret = 0;
        char *dev_buf;
        char *tmp;
-       int dev_size;
+       int ret;
+       int i;
 
        dev_buf = kmalloc(4*1024, GFP_KERNEL);
        if (dev_buf == NULL)
-               goto err_kmalloc;
+               return -ENOMEM;
        tmp = dev_buf;
 
        tmp += sprintf(tmp, "DMA -- enabled dma channels\n");
@@ -1357,26 +1356,11 @@ static int coh901318_debugfs_read(struct file *file, char __user *buf,
                        tmp += sprintf(tmp, "channel %d\n", i);
 
        tmp += sprintf(tmp, "Pool alloc nbr %d\n", pool_count);
-       dev_size = tmp  - dev_buf;
-
-       /* No more to read if offset != 0 */
-       if (*f_pos > dev_size)
-               goto out;
 
-       if (count > dev_size - *f_pos)
-               count = dev_size - *f_pos;
-
-       if (copy_to_user(buf, dev_buf + *f_pos, count))
-               ret = -EINVAL;
-       ret = count;
-       *f_pos += count;
-
- out:
+       ret = simple_read_from_buffer(buf, count, f_pos, dev_buf, 
+                                       tmp - dev_buf);
        kfree(dev_buf);
        return ret;
-
- err_kmalloc:
-       return 0;
 }
 
 static const struct file_operations coh901318_debugfs_status_operations = {