lkml.org 
[lkml]   [2024]   [Apr]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 409/437] infiniband/qib: convert to read/write iterators
    Date
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    ---
    drivers/infiniband/hw/qib/qib_debugfs.c | 2 +-
    drivers/infiniband/hw/qib/qib_diag.c | 18 ++--
    drivers/infiniband/hw/qib/qib_file_ops.c | 4 +-
    drivers/infiniband/hw/qib/qib_fs.c | 119 +++++++++++------------
    4 files changed, 68 insertions(+), 75 deletions(-)

    diff --git a/drivers/infiniband/hw/qib/qib_debugfs.c b/drivers/infiniband/hw/qib/qib_debugfs.c
    index caeb77d07a58..79144e7b42bd 100644
    --- a/drivers/infiniband/hw/qib/qib_debugfs.c
    +++ b/drivers/infiniband/hw/qib/qib_debugfs.c
    @@ -61,7 +61,7 @@ static int _##name##_open(struct inode *inode, struct file *s) \
    static const struct file_operations _##name##_file_ops = { \
    .owner = THIS_MODULE, \
    .open = _##name##_open, \
    - .read = seq_read, \
    + .read_iter = seq_read_iter, \
    .llseek = seq_lseek, \
    .release = seq_release \
    };
    diff --git a/drivers/infiniband/hw/qib/qib_diag.c b/drivers/infiniband/hw/qib/qib_diag.c
    index 11da796dd1b7..898937c2aead 100644
    --- a/drivers/infiniband/hw/qib/qib_diag.c
    +++ b/drivers/infiniband/hw/qib/qib_diag.c
    @@ -130,15 +130,13 @@ static void return_client(struct qib_diag_client *dc)

    static int qib_diag_open(struct inode *in, struct file *fp);
    static int qib_diag_release(struct inode *in, struct file *fp);
    -static ssize_t qib_diag_read(struct file *fp, char __user *data,
    - size_t count, loff_t *off);
    -static ssize_t qib_diag_write(struct file *fp, const char __user *data,
    - size_t count, loff_t *off);
    +static ssize_t qib_diag_read_iter(struct kiocb *iocb, struct iov_iter *to);
    +static ssize_t qib_diag_write_iter(struct kiocb *iocb, struct iov_iter *from);

    static const struct file_operations diag_file_ops = {
    .owner = THIS_MODULE,
    - .write = qib_diag_write,
    - .read = qib_diag_read,
    + .write_iter = qib_diag_write_iter,
    + .read_iter = qib_diag_read_iter,
    .open = qib_diag_open,
    .release = qib_diag_release,
    .llseek = default_llseek,
    @@ -148,12 +146,11 @@ static atomic_t diagpkt_count = ATOMIC_INIT(0);
    static struct cdev *diagpkt_cdev;
    static struct device *diagpkt_device;

    -static ssize_t qib_diagpkt_write(struct file *fp, const char __user *data,
    - size_t count, loff_t *off);
    +static ssize_t qib_diagpkt_write_iter(struct kiocb *iocb, struct iov_iter *from);

    static const struct file_operations diagpkt_file_ops = {
    .owner = THIS_MODULE,
    - .write = qib_diagpkt_write,
    + .write_iter = qib_diagpkt_write_iter,
    .llseek = noop_llseek,
    };

    @@ -672,6 +669,7 @@ static ssize_t qib_diagpkt_write(struct file *fp,
    vfree(tmpbuf);
    return ret;
    }
    +FOPS_WRITE_ITER_HELPER(qib_diagpkt_write);

    static int qib_diag_release(struct inode *in, struct file *fp)
    {
    @@ -829,6 +827,7 @@ static ssize_t qib_diag_read(struct file *fp, char __user *data,
    bail:
    return ret;
    }
    +FOPS_READ_ITER_HELPER(qib_diag_read);

    static ssize_t qib_diag_write(struct file *fp, const char __user *data,
    size_t count, loff_t *off)
    @@ -904,3 +903,4 @@ static ssize_t qib_diag_write(struct file *fp, const char __user *data,
    bail:
    return ret;
    }
    +FOPS_WRITE_ITER_HELPER(qib_diag_write);
    diff --git a/drivers/infiniband/hw/qib/qib_file_ops.c b/drivers/infiniband/hw/qib/qib_file_ops.c
    index 29e4c59aa23b..5bfecbbe2173 100644
    --- a/drivers/infiniband/hw/qib/qib_file_ops.c
    +++ b/drivers/infiniband/hw/qib/qib_file_ops.c
    @@ -68,7 +68,6 @@ static int qib_mmapf(struct file *, struct vm_area_struct *);
    */
    static const struct file_operations qib_file_ops = {
    .owner = THIS_MODULE,
    - .write = qib_write,
    .write_iter = qib_write_iter,
    .open = qib_open,
    .release = qib_close,
    @@ -2244,6 +2243,9 @@ static ssize_t qib_write_iter(struct kiocb *iocb, struct iov_iter *from)
    struct qib_ctxtdata *rcd = ctxt_fp(iocb->ki_filp);
    struct qib_user_sdma_queue *pq = fp->pq;

    + if (!(iocb->ki_flags & IOCB_VECTORED))
    + vfs_write_iter(iocb, from, qib_write);
    +
    if (!user_backed_iter(from) || !from->nr_segs || !pq)
    return -EINVAL;

    diff --git a/drivers/infiniband/hw/qib/qib_fs.c b/drivers/infiniband/hw/qib/qib_fs.c
    index 455e966eeff3..87817e706e05 100644
    --- a/drivers/infiniband/hw/qib/qib_fs.c
    +++ b/drivers/infiniband/hw/qib/qib_fs.c
    @@ -100,12 +100,11 @@ static int create_file(const char *name, umode_t mode,
    return error;
    }

    -static ssize_t driver_stats_read(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t driver_stats_read(struct kiocb *iocb, struct iov_iter *to)
    {
    qib_stats.sps_ints = qib_sps_ints();
    - return simple_read_from_buffer(buf, count, ppos, &qib_stats,
    - sizeof(qib_stats));
    + return simple_copy_to_iter(&qib_stats, &iocb->ki_pos, sizeof(qib_stats),
    + to);
    }

    /*
    @@ -128,45 +127,42 @@ static const char qib_statnames[] =
    "EgrHdrFull\n"
    ;

    -static ssize_t driver_names_read(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t driver_names_read(struct kiocb *iocb, struct iov_iter *to)
    {
    - return simple_read_from_buffer(buf, count, ppos, qib_statnames,
    - sizeof(qib_statnames) - 1); /* no null */
    + return simple_copy_to_iter(qib_statnames, &iocb->ki_pos,
    + sizeof(qib_statnames) - 1, to); /* no null */
    }

    static const struct file_operations driver_ops[] = {
    - { .read = driver_stats_read, .llseek = generic_file_llseek, },
    - { .read = driver_names_read, .llseek = generic_file_llseek, },
    + { .read_iter = driver_stats_read, .llseek = generic_file_llseek, },
    + { .read_iter = driver_names_read, .llseek = generic_file_llseek, },
    };

    /* read the per-device counters */
    -static ssize_t dev_counters_read(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t dev_counters_read(struct kiocb *iocb, struct iov_iter *to)
    {
    u64 *counters;
    size_t avail;
    - struct qib_devdata *dd = private2dd(file);
    + struct qib_devdata *dd = private2dd(iocb->ki_filp);

    - avail = dd->f_read_cntrs(dd, *ppos, NULL, &counters);
    - return simple_read_from_buffer(buf, count, ppos, counters, avail);
    + avail = dd->f_read_cntrs(dd, iocb->ki_pos, NULL, &counters);
    + return simple_copy_to_iter(counters, &iocb->ki_pos, avail, to);
    }

    /* read the per-device counters */
    -static ssize_t dev_names_read(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t dev_names_read(struct kiocb *iocb, struct iov_iter *to)
    {
    char *names;
    size_t avail;
    - struct qib_devdata *dd = private2dd(file);
    + struct qib_devdata *dd = private2dd(iocb->ki_filp);

    - avail = dd->f_read_cntrs(dd, *ppos, &names, NULL);
    - return simple_read_from_buffer(buf, count, ppos, names, avail);
    + avail = dd->f_read_cntrs(dd, iocb->ki_pos, &names, NULL);
    + return simple_copy_to_iter(names, &iocb->ki_pos, avail, to);
    }

    static const struct file_operations cntr_ops[] = {
    - { .read = dev_counters_read, .llseek = generic_file_llseek, },
    - { .read = dev_names_read, .llseek = generic_file_llseek, },
    + { .read_iter = dev_counters_read, .llseek = generic_file_llseek, },
    + { .read_iter = dev_names_read, .llseek = generic_file_llseek, },
    };

    /*
    @@ -175,54 +171,50 @@ static const struct file_operations cntr_ops[] = {
    */

    /* read the per-port names (same for each port) */
    -static ssize_t portnames_read(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t portnames_read(struct kiocb *iocb, struct iov_iter *to)
    {
    char *names;
    size_t avail;
    - struct qib_devdata *dd = private2dd(file);
    + struct qib_devdata *dd = private2dd(iocb->ki_filp);

    - avail = dd->f_read_portcntrs(dd, *ppos, 0, &names, NULL);
    - return simple_read_from_buffer(buf, count, ppos, names, avail);
    + avail = dd->f_read_portcntrs(dd, iocb->ki_pos, 0, &names, NULL);
    + return simple_copy_to_iter(names, &iocb->ki_pos, avail, to);
    }

    /* read the per-port counters for port 1 (pidx 0) */
    -static ssize_t portcntrs_1_read(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t portcntrs_1_read(struct kiocb *iocb, struct iov_iter *to)
    {
    u64 *counters;
    size_t avail;
    - struct qib_devdata *dd = private2dd(file);
    + struct qib_devdata *dd = private2dd(iocb->ki_filp);

    - avail = dd->f_read_portcntrs(dd, *ppos, 0, NULL, &counters);
    - return simple_read_from_buffer(buf, count, ppos, counters, avail);
    + avail = dd->f_read_portcntrs(dd, iocb->ki_pos, 0, NULL, &counters);
    + return simple_copy_to_iter(counters, &iocb->ki_pos, avail, to);
    }

    /* read the per-port counters for port 2 (pidx 1) */
    -static ssize_t portcntrs_2_read(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t portcntrs_2_read(struct kiocb *iocb, struct iov_iter *to)
    {
    u64 *counters;
    size_t avail;
    - struct qib_devdata *dd = private2dd(file);
    + struct qib_devdata *dd = private2dd(iocb->ki_filp);

    - avail = dd->f_read_portcntrs(dd, *ppos, 1, NULL, &counters);
    - return simple_read_from_buffer(buf, count, ppos, counters, avail);
    + avail = dd->f_read_portcntrs(dd, iocb->ki_pos, 1, NULL, &counters);
    + return simple_copy_to_iter(counters, &iocb->ki_pos, avail, to);
    }

    static const struct file_operations portcntr_ops[] = {
    - { .read = portnames_read, .llseek = generic_file_llseek, },
    - { .read = portcntrs_1_read, .llseek = generic_file_llseek, },
    - { .read = portcntrs_2_read, .llseek = generic_file_llseek, },
    + { .read_iter = portnames_read, .llseek = generic_file_llseek, },
    + { .read_iter = portcntrs_1_read, .llseek = generic_file_llseek, },
    + { .read_iter = portcntrs_2_read, .llseek = generic_file_llseek, },
    };

    /*
    * read the per-port QSFP data for port 1 (pidx 0)
    */
    -static ssize_t qsfp_1_read(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t qsfp_1_read(struct kiocb *iocb, struct iov_iter *to)
    {
    - struct qib_devdata *dd = private2dd(file);
    + struct qib_devdata *dd = private2dd(iocb->ki_filp);
    char *tmp;
    int ret;

    @@ -232,7 +224,7 @@ static ssize_t qsfp_1_read(struct file *file, char __user *buf,

    ret = qib_qsfp_dump(dd->pport, tmp, PAGE_SIZE);
    if (ret > 0)
    - ret = simple_read_from_buffer(buf, count, ppos, tmp, ret);
    + ret = simple_copy_to_iter(tmp, &iocb->ki_pos, ret, to);
    kfree(tmp);
    return ret;
    }
    @@ -240,10 +232,9 @@ static ssize_t qsfp_1_read(struct file *file, char __user *buf,
    /*
    * read the per-port QSFP data for port 2 (pidx 1)
    */
    -static ssize_t qsfp_2_read(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t qsfp_2_read(struct kiocb *iocb, struct iov_iter *to)
    {
    - struct qib_devdata *dd = private2dd(file);
    + struct qib_devdata *dd = private2dd(iocb->ki_filp);
    char *tmp;
    int ret;

    @@ -256,25 +247,25 @@ static ssize_t qsfp_2_read(struct file *file, char __user *buf,

    ret = qib_qsfp_dump(dd->pport + 1, tmp, PAGE_SIZE);
    if (ret > 0)
    - ret = simple_read_from_buffer(buf, count, ppos, tmp, ret);
    + ret = simple_copy_to_iter(tmp, &iocb->ki_pos, ret, to);
    kfree(tmp);
    return ret;
    }

    static const struct file_operations qsfp_ops[] = {
    - { .read = qsfp_1_read, .llseek = generic_file_llseek, },
    - { .read = qsfp_2_read, .llseek = generic_file_llseek, },
    + { .read_iter = qsfp_1_read, .llseek = generic_file_llseek, },
    + { .read_iter = qsfp_2_read, .llseek = generic_file_llseek, },
    };

    -static ssize_t flash_read(struct file *file, char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t flash_read(struct kiocb *iocb, struct iov_iter *to)
    {
    + size_t count = iov_iter_count(to);
    struct qib_devdata *dd;
    ssize_t ret;
    loff_t pos;
    char *tmp;

    - pos = *ppos;
    + pos = iocb->ki_pos;

    if (pos < 0) {
    ret = -EINVAL;
    @@ -295,19 +286,19 @@ static ssize_t flash_read(struct file *file, char __user *buf,
    goto bail;
    }

    - dd = private2dd(file);
    + dd = private2dd(iocb->ki_filp);
    if (qib_eeprom_read(dd, pos, tmp, count)) {
    qib_dev_err(dd, "failed to read from flash\n");
    ret = -ENXIO;
    goto bail_tmp;
    }

    - if (copy_to_user(buf, tmp, count)) {
    + if (!copy_to_iter_full(tmp, count, to)) {
    ret = -EFAULT;
    goto bail_tmp;
    }

    - *ppos = pos + count;
    + iocb->ki_pos = pos + count;
    ret = count;

    bail_tmp:
    @@ -317,31 +308,31 @@ static ssize_t flash_read(struct file *file, char __user *buf,
    return ret;
    }

    -static ssize_t flash_write(struct file *file, const char __user *buf,
    - size_t count, loff_t *ppos)
    +static ssize_t flash_write(struct kiocb *iocb, struct iov_iter *from)
    {
    + size_t count = iov_iter_count(from);
    struct qib_devdata *dd;
    ssize_t ret;
    loff_t pos;
    char *tmp;

    - pos = *ppos;
    + pos = iocb->ki_pos;

    if (pos != 0 || count != sizeof(struct qib_flash))
    return -EINVAL;

    - tmp = memdup_user(buf, count);
    + tmp = iterdup(from, count);
    if (IS_ERR(tmp))
    return PTR_ERR(tmp);

    - dd = private2dd(file);
    + dd = private2dd(iocb->ki_filp);
    if (qib_eeprom_write(dd, pos, tmp, count)) {
    ret = -ENXIO;
    qib_dev_err(dd, "failed to write to flash\n");
    goto bail_tmp;
    }

    - *ppos = pos + count;
    + iocb->ki_pos = pos + count;
    ret = count;

    bail_tmp:
    @@ -350,8 +341,8 @@ static ssize_t flash_write(struct file *file, const char __user *buf,
    }

    static const struct file_operations flash_ops = {
    - .read = flash_read,
    - .write = flash_write,
    + .read_iter = flash_read,
    + .write_iter = flash_write,
    .llseek = default_llseek,
    };

    --
    2.43.0

    \
     
     \ /
      Last update: 2024-05-27 16:36    [W:4.074 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site