Messages in this thread Patch in this message | | | From | Rasmus Villemoes <> | Subject | [PATCH 2/2] regmap: debugfs: improve regmap_reg_ranges_read_file() | Date | Tue, 29 Sep 2015 00:29:02 +0200 |
| |
* 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
| |