lkml.org 
[lkml]   [2015]   [Sep]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/2] regmap: debugfs: improve regmap_reg_ranges_read_file()
    Date
    * A page is a bit much for two integers and a bit of punctuation. 64
    bytes should suffice.

    * Calling strlen() on entry no less than three times is silly,
    especially when snprintf() has returned that value (which was just
    thrown away).

    * Transferring entry to the output buffer using snprintf is silly,
    when we know the length. Use memcpy instead.

    * Making the newline part of entry, we can avoid having to account for
    it separately in multiple places.

    Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
    ---
    drivers/base/regmap/regmap-debugfs.c | 19 +++++++++----------
    1 file changed, 9 insertions(+), 10 deletions(-)

    diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
    index 9fb3f6fc26b0..01110c0b8be0 100644
    --- a/drivers/base/regmap/regmap-debugfs.c
    +++ b/drivers/base/regmap/regmap-debugfs.c
    @@ -333,6 +333,8 @@ static ssize_t regmap_reg_ranges_read_file(struct file *file,
    char *buf;
    char *entry;
    int ret;
    + unsigned entry_len;
    + const unsigned entry_size = 64;

    if (*ppos < 0 || !count)
    return -EINVAL;
    @@ -341,7 +343,7 @@ static ssize_t regmap_reg_ranges_read_file(struct file *file,
    if (!buf)
    return -ENOMEM;

    - entry = kmalloc(PAGE_SIZE, GFP_KERNEL);
    + entry = kmalloc(entry_size, GFP_KERNEL);
    if (!entry) {
    kfree(buf);
    return -ENOMEM;
    @@ -360,18 +362,15 @@ static ssize_t regmap_reg_ranges_read_file(struct file *file,
    p = 0;
    mutex_lock(&map->cache_lock);
    list_for_each_entry(c, &map->debugfs_off_cache, list) {
    - snprintf(entry, PAGE_SIZE, "%x-%x",
    - c->base_reg, c->max_reg);
    + entry_len = snprintf(entry, entry_size, "%x-%x\n",
    + c->base_reg, c->max_reg);
    if (p >= *ppos) {
    - if (buf_pos + 1 + strlen(entry) > count)
    + if (buf_pos + entry_len > count)
    break;
    - snprintf(buf + buf_pos, count - buf_pos,
    - "%s", entry);
    - buf_pos += strlen(entry);
    - buf[buf_pos] = '\n';
    - buf_pos++;
    + memcpy(buf + buf_pos, entry, entry_len);
    + buf_pos += entry_len;
    }
    - p += strlen(entry) + 1;
    + p += entry_len;
    }
    mutex_unlock(&map->cache_lock);

    --
    2.1.3


    \
     
     \ /
      Last update: 2015-09-29 00:41    [W:3.006 / U:0.824 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site