diff options
author | Christophe Leroy <christophe.leroy@c-s.fr> | 2017-12-18 11:08:33 +0100 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2017-12-20 10:34:01 +0100 |
commit | 7a94b88cb7087aa3184161bedccfea25e5502c62 (patch) | |
tree | 834dd94fd037c9b6edb3ba890e38df1af6cb77e1 /drivers/gpio/gpiolib-sysfs.c | |
parent | gpio: sysfs: correct error handling on 'value' attribute read. (diff) | |
download | linux-7a94b88cb7087aa3184161bedccfea25e5502c62.tar.xz linux-7a94b88cb7087aa3184161bedccfea25e5502c62.zip |
gpio: sysfs: don't use sprintf() for 'value' attribute
A bench with 'perf record' shows that most of time spent in value_show()
is spent in sprintf()
--42.41%--sysfs_kf_read
|
|--39.73%--dev_attr_show
| |
| |--38.23%--value_show
| | |
| | |--29.22%--sprintf
| | |
| | |--2.94%--gpiod_get_value_cansleep
| | |
value_show() only returns "0\n" or "1\n", therefore the use of
sprintf() can be avoided
With this patch we get the following result with 'perf record'
--13.89%--sysfs_kf_read
|
|--10.72%--dev_attr_show
| |
| |--9.44%--value_show
| | |
| | |--4.61%--gpiod_get_value_cansleep
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to '')
-rw-r--r-- | drivers/gpio/gpiolib-sysfs.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/gpio/gpiolib-sysfs.c b/drivers/gpio/gpiolib-sysfs.c index ef34b8f56bd1..ad7173df72eb 100644 --- a/drivers/gpio/gpiolib-sysfs.c +++ b/drivers/gpio/gpiolib-sysfs.c @@ -110,7 +110,9 @@ static ssize_t value_show(struct device *dev, if (status < 0) goto err; - status = sprintf(buf, "%d\n", status); + buf[0] = '0' + status; + buf[1] = '\n'; + status = 2; err: mutex_unlock(&data->mutex); |