Messages in this thread |  | | Date | Mon, 11 Mar 2024 07:55:22 +0300 | | From | Alexey Dobriyan <> | | Subject | Re: [PATCH] sysfs: make sysfs_emit() return ssize_t |
| |
On Sun, Mar 10, 2024 at 07:21:32PM +0000, David Laight wrote: > From: Alexey Dobriyan > > Sent: 08 March 2024 06:26 > > > > On Thu, Mar 07, 2024 at 10:04:41PM +0000, Greg Kroah-Hartman wrote: > > > On Mon, Feb 05, 2024 at 01:11:36PM +0300, Alexey Dobriyan wrote: > > > > sysfs_emit() is most often found in functions returning ssize_t > > > > not int: > > > > > > > > static ssize_t oops_count_show(...) > > > > { > > > > return sysfs_emit(page, ...); > > > > } > > > > > > > > This pattern results in sign-extension instruction between > > > > sysfs_emit() return value (int) and caller return value (which is > > > > ssize_t). > > > > > > Is that a problem? > > > > Small problem, but, yes. > > > > If sysfs_emit() returns "int", then every user compiles to > > > > call sysfs_emit > > movsx rax, eax > > ret > > > > Given than sysfs_emit() is the official way to print in sysfs, > > there are lots of users and there will be more users in the future > > as it grows. > > > > This trailing "movsx" instruction is duplicated every time. > > Actually you are missing a tail call... > But no one will notice the extra execution time, it will > be masked by the cost of the formatting. > So it is a small amount of I-cache. > > In reality the best fix is not to use ssize_t for something > where the domain of the value is much smaller. > In this case it is probably unsigned as well.
It is much harder to switch read hooks from returning ssize_t to int. Kernel snprintf() too.
sysfs_emit() change will be mostly seamless, but function pointers generate warnings.
|  |