* [PATCH 1/2] proc: uninline name_to_int()
@ 2017-09-12 19:48 Alexey Dobriyan
2017-09-12 19:52 ` [PATCH 2/2] proc: use do-while in name_to_int() Alexey Dobriyan
0 siblings, 1 reply; 2+ messages in thread
From: Alexey Dobriyan @ 2017-09-12 19:48 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel
Save ~360 bytes.
add/remove: 1/0 grow/shrink: 0/4 up/down: 104/-463 (-359)
function old new delta
name_to_int - 104 +104
proc_pid_lookup 217 126 -91
proc_lookupfd_common 212 121 -91
proc_task_lookup 289 194 -95
__proc_create 588 402 -186
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---
fs/proc/Makefile | 1 +
fs/proc/internal.h | 23 +----------------------
fs/proc/util.c | 23 +++++++++++++++++++++++
3 files changed, 25 insertions(+), 22 deletions(-)
--- a/fs/proc/Makefile
+++ b/fs/proc/Makefile
@@ -20,6 +20,7 @@ proc-y += loadavg.o
proc-y += meminfo.o
proc-y += stat.o
proc-y += uptime.o
+proc-y += util.o
proc-y += version.o
proc-y += softirqs.o
proc-y += namespaces.o
--- a/fs/proc/internal.h
+++ b/fs/proc/internal.h
@@ -103,28 +103,7 @@ static inline struct task_struct *get_proc_task(struct inode *inode)
void task_dump_owner(struct task_struct *task, mode_t mode,
kuid_t *ruid, kgid_t *rgid);
-static inline unsigned name_to_int(const struct qstr *qstr)
-{
- const char *name = qstr->name;
- int len = qstr->len;
- unsigned n = 0;
-
- if (len > 1 && *name == '0')
- goto out;
- while (len-- > 0) {
- unsigned c = *name++ - '0';
- if (c > 9)
- goto out;
- if (n >= (~0U-9)/10)
- goto out;
- n *= 10;
- n += c;
- }
- return n;
-out:
- return ~0U;
-}
-
+unsigned name_to_int(const struct qstr *qstr);
/*
* Offset of the first process in the /proc root directory..
*/
--- /dev/null
+++ b/fs/proc/util.c
@@ -0,0 +1,23 @@
+#include <linux/dcache.h>
+
+unsigned name_to_int(const struct qstr *qstr)
+{
+ const char *name = qstr->name;
+ int len = qstr->len;
+ unsigned n = 0;
+
+ if (len > 1 && *name == '0')
+ goto out;
+ while (len-- > 0) {
+ unsigned c = *name++ - '0';
+ if (c > 9)
+ goto out;
+ if (n >= (~0U-9)/10)
+ goto out;
+ n *= 10;
+ n += c;
+ }
+ return n;
+out:
+ return ~0U;
+}
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH 2/2] proc: use do-while in name_to_int()
2017-09-12 19:48 [PATCH 1/2] proc: uninline name_to_int() Alexey Dobriyan
@ 2017-09-12 19:52 ` Alexey Dobriyan
0 siblings, 0 replies; 2+ messages in thread
From: Alexey Dobriyan @ 2017-09-12 19:52 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel
Gcc doesn't know that "len" is guaranteed to be >=1 by dcache and
generates standard while-loop prologue duplicating loop condition.
add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-27 (-27)
function old new delta
name_to_int 104 77 -27
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---
fs/proc/util.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/fs/proc/util.c
+++ b/fs/proc/util.c
@@ -8,7 +8,7 @@ unsigned name_to_int(const struct qstr *qstr)
if (len > 1 && *name == '0')
goto out;
- while (len-- > 0) {
+ do {
unsigned c = *name++ - '0';
if (c > 9)
goto out;
@@ -16,7 +16,7 @@ unsigned name_to_int(const struct qstr *qstr)
goto out;
n *= 10;
n += c;
- }
+ } while (--len > 0);
return n;
out:
return ~0U;
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-09-12 19:52 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-12 19:48 [PATCH 1/2] proc: uninline name_to_int() Alexey Dobriyan
2017-09-12 19:52 ` [PATCH 2/2] proc: use do-while in name_to_int() Alexey Dobriyan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.