[PATCH] seq/proc: Modify seq_put_decimal_[u]ll to take a const char *, not char

2016-08-08 Thread Joe Perches
Allow some seq_puts removals by taking a string instead of a single char.

Signed-off-by: Joe Perches 
---

On top of Alexey's patch, this would also save a couple percent CPU

 fs/proc/array.c  | 178 ++-
 fs/proc/stat.c   |  49 +++--
 fs/seq_file.c|  57 +++
 include/linux/seq_file.h |   4 +-
 4 files changed, 153 insertions(+), 135 deletions(-)

diff --git a/fs/proc/array.c b/fs/proc/array.c
index 5e7d252..d25b446 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -188,33 +188,26 @@ static inline void task_state(struct seq_file *m, struct 
pid_namespace *ns,
 
seq_printf(m, "State:\t%s", get_task_state(p));
 
-   seq_puts(m, "\nTgid:\t");
-   seq_put_decimal_ull(m, 0, tgid);
-   seq_puts(m, "\nNgid:\t");
-   seq_put_decimal_ull(m, 0, ngid);
-   seq_puts(m, "\nPid:\t");
-   seq_put_decimal_ull(m, 0, pid_nr_ns(pid, ns));
-   seq_puts(m, "\nPPid:\t");
-   seq_put_decimal_ull(m, 0, ppid);
-   seq_puts(m, "\nTracerPid:\t");
-   seq_put_decimal_ull(m, 0, tpid);
-   seq_puts(m, "\nUid:");
-   seq_put_decimal_ull(m, '\t', from_kuid_munged(user_ns, cred->uid));
-   seq_put_decimal_ull(m, '\t', from_kuid_munged(user_ns, cred->euid));
-   seq_put_decimal_ull(m, '\t', from_kuid_munged(user_ns, cred->suid));
-   seq_put_decimal_ull(m, '\t', from_kuid_munged(user_ns, cred->fsuid));
-   seq_puts(m, "\nGid:");
-   seq_put_decimal_ull(m, '\t', from_kgid_munged(user_ns, cred->gid));
-   seq_put_decimal_ull(m, '\t', from_kgid_munged(user_ns, cred->egid));
-   seq_put_decimal_ull(m, '\t', from_kgid_munged(user_ns, cred->sgid));
-   seq_put_decimal_ull(m, '\t', from_kgid_munged(user_ns, cred->fsgid));
-   seq_puts(m, "\nFDSize:\t");
-   seq_put_decimal_ull(m, 0, max_fds);
+   seq_put_decimal_ull(m, "\nTgid:\t", tgid);
+   seq_put_decimal_ull(m, "\nNgid:\t", ngid);
+   seq_put_decimal_ull(m, "\nPid:\t", pid_nr_ns(pid, ns));
+   seq_put_decimal_ull(m, "\nPPid:\t", ppid);
+   seq_put_decimal_ull(m, "\nTracerPid:\t", tpid);
+   seq_put_decimal_ull(m, "\nUid:\t", from_kuid_munged(user_ns, 
cred->uid));
+   seq_put_decimal_ull(m, "\t", from_kuid_munged(user_ns, cred->euid));
+   seq_put_decimal_ull(m, "\t", from_kuid_munged(user_ns, cred->suid));
+   seq_put_decimal_ull(m, "\t", from_kuid_munged(user_ns, cred->fsuid));
+   seq_put_decimal_ull(m, "\nGid:\t", from_kgid_munged(user_ns, 
cred->gid));
+   seq_put_decimal_ull(m, "\t", from_kgid_munged(user_ns, cred->egid));
+   seq_put_decimal_ull(m, "\t", from_kgid_munged(user_ns, cred->sgid));
+   seq_put_decimal_ull(m, "\t", from_kgid_munged(user_ns, cred->fsgid));
+   seq_put_decimal_ull(m, "\nFDSize:\t", max_fds);
 
seq_puts(m, "\nGroups:\t");
group_info = cred->group_info;
for (g = 0; g < group_info->ngroups; g++)
-   seq_put_decimal_ull(m, g ? ' ' : 0, from_kgid_munged(user_ns, 
GROUP_AT(group_info, g)));
+   seq_put_decimal_ull(m, g ? " " : "",
+   from_kgid_munged(user_ns, 
GROUP_AT(group_info, g)));
put_cred(cred);
/* Trailing space shouldn't have been added in the first place. */
seq_putc(m, ' ');
@@ -222,16 +215,16 @@ static inline void task_state(struct seq_file *m, struct 
pid_namespace *ns,
 #ifdef CONFIG_PID_NS
seq_puts(m, "\nNStgid:");
for (g = ns->level; g <= pid->level; g++)
-   seq_put_decimal_ull(m, '\t', task_tgid_nr_ns(p, 
pid->numbers[g].ns));
+   seq_put_decimal_ull(m, "\t", task_tgid_nr_ns(p, 
pid->numbers[g].ns));
seq_puts(m, "\nNSpid:");
for (g = ns->level; g <= pid->level; g++)
-   seq_put_decimal_ull(m, '\t', task_pid_nr_ns(p, 
pid->numbers[g].ns));
+   seq_put_decimal_ull(m, "\t", task_pid_nr_ns(p, 
pid->numbers[g].ns));
seq_puts(m, "\nNSpgid:");
for (g = ns->level; g <= pid->level; g++)
-   seq_put_decimal_ull(m, '\t', task_pgrp_nr_ns(p, 
pid->numbers[g].ns));
+   seq_put_decimal_ull(m, "\t", task_pgrp_nr_ns(p, 
pid->numbers[g].ns));
seq_puts(m, "\nNSsid:");
for (g = ns->level; g <= pid->level; g++)
-   seq_put_decimal_ull(m, '\t', task_session_nr_ns(p, 
pid->numbers[g].ns));
+   seq_put_decimal_ull(m, "\t", task_session_nr_ns(p, 
pid->numbers[g].ns));
 #endif
seq_putc(m, '\n');
 }
@@ -300,11 +293,9 @@ static inline void task_sig(struct seq_file *m, struct 
task_struct *p)
unlock_task_sighand(p, );
}
 
-   seq_puts(m, "Threads:\t");
-   seq_put_decimal_ull(m, 0, num_threads);
-   seq_puts(m, "\nSigQ:\t");
-   seq_put_decimal_ull(m, 0, qsize);
-   seq_put_decimal_ull(m, '/', qlim);
+   seq_put_decimal_ull(m, "Threads:\t", num_threads);
+   seq_put_decimal_ull(m, "\nSigQ:\t", 

[PATCH] seq/proc: Modify seq_put_decimal_[u]ll to take a const char *, not char

2016-08-08 Thread Joe Perches
Allow some seq_puts removals by taking a string instead of a single char.

Signed-off-by: Joe Perches 
---

On top of Alexey's patch, this would also save a couple percent CPU

 fs/proc/array.c  | 178 ++-
 fs/proc/stat.c   |  49 +++--
 fs/seq_file.c|  57 +++
 include/linux/seq_file.h |   4 +-
 4 files changed, 153 insertions(+), 135 deletions(-)

diff --git a/fs/proc/array.c b/fs/proc/array.c
index 5e7d252..d25b446 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -188,33 +188,26 @@ static inline void task_state(struct seq_file *m, struct 
pid_namespace *ns,
 
seq_printf(m, "State:\t%s", get_task_state(p));
 
-   seq_puts(m, "\nTgid:\t");
-   seq_put_decimal_ull(m, 0, tgid);
-   seq_puts(m, "\nNgid:\t");
-   seq_put_decimal_ull(m, 0, ngid);
-   seq_puts(m, "\nPid:\t");
-   seq_put_decimal_ull(m, 0, pid_nr_ns(pid, ns));
-   seq_puts(m, "\nPPid:\t");
-   seq_put_decimal_ull(m, 0, ppid);
-   seq_puts(m, "\nTracerPid:\t");
-   seq_put_decimal_ull(m, 0, tpid);
-   seq_puts(m, "\nUid:");
-   seq_put_decimal_ull(m, '\t', from_kuid_munged(user_ns, cred->uid));
-   seq_put_decimal_ull(m, '\t', from_kuid_munged(user_ns, cred->euid));
-   seq_put_decimal_ull(m, '\t', from_kuid_munged(user_ns, cred->suid));
-   seq_put_decimal_ull(m, '\t', from_kuid_munged(user_ns, cred->fsuid));
-   seq_puts(m, "\nGid:");
-   seq_put_decimal_ull(m, '\t', from_kgid_munged(user_ns, cred->gid));
-   seq_put_decimal_ull(m, '\t', from_kgid_munged(user_ns, cred->egid));
-   seq_put_decimal_ull(m, '\t', from_kgid_munged(user_ns, cred->sgid));
-   seq_put_decimal_ull(m, '\t', from_kgid_munged(user_ns, cred->fsgid));
-   seq_puts(m, "\nFDSize:\t");
-   seq_put_decimal_ull(m, 0, max_fds);
+   seq_put_decimal_ull(m, "\nTgid:\t", tgid);
+   seq_put_decimal_ull(m, "\nNgid:\t", ngid);
+   seq_put_decimal_ull(m, "\nPid:\t", pid_nr_ns(pid, ns));
+   seq_put_decimal_ull(m, "\nPPid:\t", ppid);
+   seq_put_decimal_ull(m, "\nTracerPid:\t", tpid);
+   seq_put_decimal_ull(m, "\nUid:\t", from_kuid_munged(user_ns, 
cred->uid));
+   seq_put_decimal_ull(m, "\t", from_kuid_munged(user_ns, cred->euid));
+   seq_put_decimal_ull(m, "\t", from_kuid_munged(user_ns, cred->suid));
+   seq_put_decimal_ull(m, "\t", from_kuid_munged(user_ns, cred->fsuid));
+   seq_put_decimal_ull(m, "\nGid:\t", from_kgid_munged(user_ns, 
cred->gid));
+   seq_put_decimal_ull(m, "\t", from_kgid_munged(user_ns, cred->egid));
+   seq_put_decimal_ull(m, "\t", from_kgid_munged(user_ns, cred->sgid));
+   seq_put_decimal_ull(m, "\t", from_kgid_munged(user_ns, cred->fsgid));
+   seq_put_decimal_ull(m, "\nFDSize:\t", max_fds);
 
seq_puts(m, "\nGroups:\t");
group_info = cred->group_info;
for (g = 0; g < group_info->ngroups; g++)
-   seq_put_decimal_ull(m, g ? ' ' : 0, from_kgid_munged(user_ns, 
GROUP_AT(group_info, g)));
+   seq_put_decimal_ull(m, g ? " " : "",
+   from_kgid_munged(user_ns, 
GROUP_AT(group_info, g)));
put_cred(cred);
/* Trailing space shouldn't have been added in the first place. */
seq_putc(m, ' ');
@@ -222,16 +215,16 @@ static inline void task_state(struct seq_file *m, struct 
pid_namespace *ns,
 #ifdef CONFIG_PID_NS
seq_puts(m, "\nNStgid:");
for (g = ns->level; g <= pid->level; g++)
-   seq_put_decimal_ull(m, '\t', task_tgid_nr_ns(p, 
pid->numbers[g].ns));
+   seq_put_decimal_ull(m, "\t", task_tgid_nr_ns(p, 
pid->numbers[g].ns));
seq_puts(m, "\nNSpid:");
for (g = ns->level; g <= pid->level; g++)
-   seq_put_decimal_ull(m, '\t', task_pid_nr_ns(p, 
pid->numbers[g].ns));
+   seq_put_decimal_ull(m, "\t", task_pid_nr_ns(p, 
pid->numbers[g].ns));
seq_puts(m, "\nNSpgid:");
for (g = ns->level; g <= pid->level; g++)
-   seq_put_decimal_ull(m, '\t', task_pgrp_nr_ns(p, 
pid->numbers[g].ns));
+   seq_put_decimal_ull(m, "\t", task_pgrp_nr_ns(p, 
pid->numbers[g].ns));
seq_puts(m, "\nNSsid:");
for (g = ns->level; g <= pid->level; g++)
-   seq_put_decimal_ull(m, '\t', task_session_nr_ns(p, 
pid->numbers[g].ns));
+   seq_put_decimal_ull(m, "\t", task_session_nr_ns(p, 
pid->numbers[g].ns));
 #endif
seq_putc(m, '\n');
 }
@@ -300,11 +293,9 @@ static inline void task_sig(struct seq_file *m, struct 
task_struct *p)
unlock_task_sighand(p, );
}
 
-   seq_puts(m, "Threads:\t");
-   seq_put_decimal_ull(m, 0, num_threads);
-   seq_puts(m, "\nSigQ:\t");
-   seq_put_decimal_ull(m, 0, qsize);
-   seq_put_decimal_ull(m, '/', qlim);
+   seq_put_decimal_ull(m, "Threads:\t", num_threads);
+   seq_put_decimal_ull(m, "\nSigQ:\t", qsize);
+