public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [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