* [PATCH] stacktrace: fix spaces and annoying extra newlines
@ 2017-02-07 22:44 Omar Sandoval
2017-02-07 23:23 ` Linus Torvalds
0 siblings, 1 reply; 4+ messages in thread
From: Omar Sandoval @ 2017-02-07 22:44 UTC (permalink / raw)
To: linux-kernel
Cc: kernel-team, Ingo Molnar, Peter Zijlstra, Thomas Gleixner,
Linus Torvalds
From: Omar Sandoval <osandov@fb.com>
Since KERN_CONT became meaningful again, lockdep stack traces have
looked like this:
[ 5.561122] -> #1 (B){+.+...}:
[ 5.561528]
[ 5.561532] [<ffffffff810d8873>] lock_acquire+0xc3/0x210
[ 5.562178]
[ 5.562181] [<ffffffff816f6414>] mutex_lock_nested+0x74/0x6d0
[ 5.562861]
[ 5.562880] [<ffffffffa01aa3c3>] init_btrfs_fs+0x21/0x196 [btrfs]
[ 5.563717]
[ 5.563721] [<ffffffff81000472>] do_one_initcall+0x52/0x1b0
[ 5.564554]
[ 5.564559] [<ffffffff811a3af6>] do_init_module+0x5f/0x209
[ 5.565357]
[ 5.565361] [<ffffffff81122f4d>] load_module+0x218d/0x2b80
[ 5.566020]
[ 5.566021] [<ffffffff81123beb>] SyS_finit_module+0xeb/0x120
[ 5.566694]
[ 5.566696] [<ffffffff816fd241>] entry_SYSCALL_64_fastpath+0x1f/0xc2
That's happening because each printk() call now gets printed on its own
line, and we do a separate call to print the spaces before the symbol.
This is what it should look like:
[ 6.650322] -> #1 (B){+.+...}:
[ 6.651053] [<ffffffff810d8873>] lock_acquire+0xc3/0x210
[ 6.652000] [<ffffffff816f6414>] mutex_lock_nested+0x74/0x6d0
[ 6.652664] [<ffffffffa01b43c3>] init_btrfs_fs+0x21/0x196 [btrfs]
[ 6.653288] [<ffffffff81000472>] do_one_initcall+0x52/0x1b0
[ 6.653858] [<ffffffff811a3ae6>] do_init_module+0x5f/0x209
[ 6.654426] [<ffffffff81122f3d>] load_module+0x218d/0x2b80
[ 6.654992] [<ffffffff81123bdb>] SyS_finit_module+0xeb/0x120
[ 6.655591] [<ffffffff816fd241>] entry_SYSCALL_64_fastpath+0x1f/0xc2
Fix it by doing the printk() directly instead of using the
print_ip_sym() helper.
Fixes: 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing continuation lines")
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Omar Sandoval <osandov@fb.com>
---
Patch is based on v4.10-rc7. That print_ip_sym() helper isn't all that
complicated and it probably causes more problems than it solves with
KERN_CONT and all. I'm not entirely sure who should take this, but it's
somewhat lockdep related, so it can probably go through tip for 4.11?
kernel/stacktrace.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/kernel/stacktrace.c b/kernel/stacktrace.c
index b6e4c16377c7..625573af2a3c 100644
--- a/kernel/stacktrace.c
+++ b/kernel/stacktrace.c
@@ -14,13 +14,14 @@
void print_stack_trace(struct stack_trace *trace, int spaces)
{
int i;
+ void *ip;
if (WARN_ON(!trace->entries))
return;
for (i = 0; i < trace->nr_entries; i++) {
- printk("%*c", 1 + spaces, ' ');
- print_ip_sym(trace->entries[i]);
+ ip = (void *)trace->entries[i];
+ printk("%*c[<%p>] %pS\n", 1 + spaces, ' ', ip, ip);
}
}
EXPORT_SYMBOL_GPL(print_stack_trace);
--
2.11.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH] stacktrace: fix spaces and annoying extra newlines 2017-02-07 22:44 [PATCH] stacktrace: fix spaces and annoying extra newlines Omar Sandoval @ 2017-02-07 23:23 ` Linus Torvalds 2017-02-07 23:33 ` [PATCH v2] stacktrace: fix address, newline ugliness Omar Sandoval 0 siblings, 1 reply; 4+ messages in thread From: Linus Torvalds @ 2017-02-07 23:23 UTC (permalink / raw) To: Omar Sandoval Cc: Linux Kernel Mailing List, kernel-team, Ingo Molnar, Peter Zijlstra, Thomas Gleixner Hmm. Looks ok, except I think we migth want to go even further: On Tue, Feb 7, 2017 at 2:44 PM, Omar Sandoval <osandov@osandov.com> wrote: > > Since KERN_CONT became meaningful again, lockdep stack traces have > looked like this: [ removed really ugly trace ] > This is what it should look like: > > [ 6.650322] -> #1 (B){+.+...}: > [ 6.651053] [<ffffffff810d8873>] lock_acquire+0xc3/0x210 > [ 6.652000] [<ffffffff816f6414>] mutex_lock_nested+0x74/0x6d0 > [ 6.652664] [<ffffffffa01b43c3>] init_btrfs_fs+0x21/0x196 [btrfs] > [ 6.653288] [<ffffffff81000472>] do_one_initcall+0x52/0x1b0 > [ 6.653858] [<ffffffff811a3ae6>] do_init_module+0x5f/0x209 > [ 6.654426] [<ffffffff81122f3d>] load_module+0x218d/0x2b80 > [ 6.654992] [<ffffffff81123bdb>] SyS_finit_module+0xeb/0x120 > [ 6.655591] [<ffffffff816fd241>] entry_SYSCALL_64_fastpath+0x1f/0xc2 That's still pretty ugly. Actually, let's just remove those hex numbers too, which buy you nothing at all. > - printk("%*c", 1 + spaces, ' '); > - print_ip_sym(trace->entries[i]); > + ip = (void *)trace->entries[i]; > + printk("%*c[<%p>] %pS\n", 1 + spaces, ' ', ip, ip); So how does it look if we make that just be printk("%*c%pS\n", 1 + spaces, ' ', (void *)trace->entries[i]); which also avoids the extra variable because the thing is only used once anyway. We've removed the hex numbers from other printouts, and they really are completely useless with modules and kernel randomized addresses. Would you mind testing such a thing and re-submitting? Linus ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2] stacktrace: fix address, newline ugliness 2017-02-07 23:23 ` Linus Torvalds @ 2017-02-07 23:33 ` Omar Sandoval 2017-02-08 7:25 ` [tip:locking/urgent] stacktrace, lockdep: Fix " tip-bot for Omar Sandoval 0 siblings, 1 reply; 4+ messages in thread From: Omar Sandoval @ 2017-02-07 23:33 UTC (permalink / raw) To: Linus Torvalds, linux-kernel Cc: kernel-team, Ingo Molnar, Peter Zijlstra, Thomas Gleixner From: Omar Sandoval <osandov@fb.com> Since KERN_CONT became meaningful again, lockdep stack traces have had annoying extra newlines, like this: [ 5.561122] -> #1 (B){+.+...}: [ 5.561528] [ 5.561532] [<ffffffff810d8873>] lock_acquire+0xc3/0x210 [ 5.562178] [ 5.562181] [<ffffffff816f6414>] mutex_lock_nested+0x74/0x6d0 [ 5.562861] [ 5.562880] [<ffffffffa01aa3c3>] init_btrfs_fs+0x21/0x196 [btrfs] [ 5.563717] [ 5.563721] [<ffffffff81000472>] do_one_initcall+0x52/0x1b0 [ 5.564554] [ 5.564559] [<ffffffff811a3af6>] do_init_module+0x5f/0x209 [ 5.565357] [ 5.565361] [<ffffffff81122f4d>] load_module+0x218d/0x2b80 [ 5.566020] [ 5.566021] [<ffffffff81123beb>] SyS_finit_module+0xeb/0x120 [ 5.566694] [ 5.566696] [<ffffffff816fd241>] entry_SYSCALL_64_fastpath+0x1f/0xc2 That's happening because each printk() call now gets printed on its own line, and we do a separate call to print the spaces before the symbol. Fix it by doing the printk() directly instead of using the print_ip_sym() helper. Additionally, the symbol address isn't very helpful, so let's get rid of that, too. The final result looks like this: [ 5.194518] -> #1 (B){+.+...}: [ 5.195002] lock_acquire+0xc3/0x210 [ 5.195439] mutex_lock_nested+0x74/0x6d0 [ 5.195976] init_btrfs_fs+0x21/0x196 [btrfs] [ 5.196491] do_one_initcall+0x52/0x1b0 [ 5.196939] do_init_module+0x5f/0x209 [ 5.197355] load_module+0x218d/0x2b80 [ 5.197792] SyS_finit_module+0xeb/0x120 [ 5.198251] entry_SYSCALL_64_fastpath+0x1f/0xc2 Fixes: 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing continuation lines") Cc: Ingo Molnar <mingo@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Omar Sandoval <osandov@fb.com> --- kernel/stacktrace.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/kernel/stacktrace.c b/kernel/stacktrace.c index b6e4c16377c7..9c15a9124e83 100644 --- a/kernel/stacktrace.c +++ b/kernel/stacktrace.c @@ -18,10 +18,8 @@ void print_stack_trace(struct stack_trace *trace, int spaces) if (WARN_ON(!trace->entries)) return; - for (i = 0; i < trace->nr_entries; i++) { - printk("%*c", 1 + spaces, ' '); - print_ip_sym(trace->entries[i]); - } + for (i = 0; i < trace->nr_entries; i++) + printk("%*c%pS\n", 1 + spaces, ' ', (void *)trace->entries[i]); } EXPORT_SYMBOL_GPL(print_stack_trace); @@ -29,7 +27,6 @@ int snprint_stack_trace(char *buf, size_t size, struct stack_trace *trace, int spaces) { int i; - unsigned long ip; int generated; int total = 0; @@ -37,9 +34,8 @@ int snprint_stack_trace(char *buf, size_t size, return 0; for (i = 0; i < trace->nr_entries; i++) { - ip = trace->entries[i]; - generated = snprintf(buf, size, "%*c[<%p>] %pS\n", - 1 + spaces, ' ', (void *) ip, (void *) ip); + generated = snprintf(buf, size, "%*c%pS\n", 1 + spaces, ' ', + (void *)trace->entries[i]); total += generated; -- 2.11.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [tip:locking/urgent] stacktrace, lockdep: Fix address, newline ugliness 2017-02-07 23:33 ` [PATCH v2] stacktrace: fix address, newline ugliness Omar Sandoval @ 2017-02-08 7:25 ` tip-bot for Omar Sandoval 0 siblings, 0 replies; 4+ messages in thread From: tip-bot for Omar Sandoval @ 2017-02-08 7:25 UTC (permalink / raw) To: linux-tip-commits Cc: peterz, hpa, tglx, torvalds, mingo, linux-kernel, osandov Commit-ID: bfeda41d06d85ad9d52f2413cfc2b77be5022f75 Gitweb: http://git.kernel.org/tip/bfeda41d06d85ad9d52f2413cfc2b77be5022f75 Author: Omar Sandoval <osandov@fb.com> AuthorDate: Tue, 7 Feb 2017 15:33:20 -0800 Committer: Ingo Molnar <mingo@kernel.org> CommitDate: Wed, 8 Feb 2017 08:21:31 +0100 stacktrace, lockdep: Fix address, newline ugliness Since KERN_CONT became meaningful again, lockdep stack traces have had annoying extra newlines, like this: [ 5.561122] -> #1 (B){+.+...}: [ 5.561528] [ 5.561532] [<ffffffff810d8873>] lock_acquire+0xc3/0x210 [ 5.562178] [ 5.562181] [<ffffffff816f6414>] mutex_lock_nested+0x74/0x6d0 [ 5.562861] [ 5.562880] [<ffffffffa01aa3c3>] init_btrfs_fs+0x21/0x196 [btrfs] [ 5.563717] [ 5.563721] [<ffffffff81000472>] do_one_initcall+0x52/0x1b0 [ 5.564554] [ 5.564559] [<ffffffff811a3af6>] do_init_module+0x5f/0x209 [ 5.565357] [ 5.565361] [<ffffffff81122f4d>] load_module+0x218d/0x2b80 [ 5.566020] [ 5.566021] [<ffffffff81123beb>] SyS_finit_module+0xeb/0x120 [ 5.566694] [ 5.566696] [<ffffffff816fd241>] entry_SYSCALL_64_fastpath+0x1f/0xc2 That's happening because each printk() call now gets printed on its own line, and we do a separate call to print the spaces before the symbol. Fix it by doing the printk() directly instead of using the print_ip_sym() helper. Additionally, the symbol address isn't very helpful, so let's get rid of that, too. The final result looks like this: [ 5.194518] -> #1 (B){+.+...}: [ 5.195002] lock_acquire+0xc3/0x210 [ 5.195439] mutex_lock_nested+0x74/0x6d0 [ 5.196491] do_one_initcall+0x52/0x1b0 [ 5.196939] do_init_module+0x5f/0x209 [ 5.197355] load_module+0x218d/0x2b80 [ 5.197792] SyS_finit_module+0xeb/0x120 [ 5.198251] entry_SYSCALL_64_fastpath+0x1f/0xc2 Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Omar Sandoval <osandov@fb.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: kernel-team@fb.com Fixes: 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing continuation lines") Link: http://lkml.kernel.org/r/43b4e114724b2bdb0308fa86cb33aa07d3d67fad.1486510315.git.osandov@fb.com Signed-off-by: Ingo Molnar <mingo@kernel.org> --- kernel/stacktrace.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/kernel/stacktrace.c b/kernel/stacktrace.c index b6e4c16..9c15a91 100644 --- a/kernel/stacktrace.c +++ b/kernel/stacktrace.c @@ -18,10 +18,8 @@ void print_stack_trace(struct stack_trace *trace, int spaces) if (WARN_ON(!trace->entries)) return; - for (i = 0; i < trace->nr_entries; i++) { - printk("%*c", 1 + spaces, ' '); - print_ip_sym(trace->entries[i]); - } + for (i = 0; i < trace->nr_entries; i++) + printk("%*c%pS\n", 1 + spaces, ' ', (void *)trace->entries[i]); } EXPORT_SYMBOL_GPL(print_stack_trace); @@ -29,7 +27,6 @@ int snprint_stack_trace(char *buf, size_t size, struct stack_trace *trace, int spaces) { int i; - unsigned long ip; int generated; int total = 0; @@ -37,9 +34,8 @@ int snprint_stack_trace(char *buf, size_t size, return 0; for (i = 0; i < trace->nr_entries; i++) { - ip = trace->entries[i]; - generated = snprintf(buf, size, "%*c[<%p>] %pS\n", - 1 + spaces, ' ', (void *) ip, (void *) ip); + generated = snprintf(buf, size, "%*c%pS\n", 1 + spaces, ' ', + (void *)trace->entries[i]); total += generated; ^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2017-02-08 7:25 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-02-07 22:44 [PATCH] stacktrace: fix spaces and annoying extra newlines Omar Sandoval 2017-02-07 23:23 ` Linus Torvalds 2017-02-07 23:33 ` [PATCH v2] stacktrace: fix address, newline ugliness Omar Sandoval 2017-02-08 7:25 ` [tip:locking/urgent] stacktrace, lockdep: Fix " tip-bot for Omar Sandoval
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox