From 7a94b88cb7087aa3184161bedccfea25e5502c62 Mon Sep 17 00:00:00 2001 From: Christophe Leroy Date: Mon, 18 Dec 2017 11:08:33 +0100 Subject: 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 Signed-off-by: Linus Walleij --- drivers/gpio/gpiolib-sysfs.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'drivers/gpio/gpiolib-sysfs.c') 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); -- cgit v1.2.3