Skip to content

Commit bfeda41

Browse files
osandovIngo Molnar
authored andcommitted
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 <[email protected]> Signed-off-by: Omar Sandoval <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Thomas Gleixner <[email protected]> Cc: [email protected] Fixes: 4bcc595 ("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 <[email protected]>
1 parent 926af62 commit bfeda41

File tree

1 file changed

+4
-8
lines changed

1 file changed

+4
-8
lines changed

kernel/stacktrace.c

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,24 @@ void print_stack_trace(struct stack_trace *trace, int spaces)
1818
if (WARN_ON(!trace->entries))
1919
return;
2020

21-
for (i = 0; i < trace->nr_entries; i++) {
22-
printk("%*c", 1 + spaces, ' ');
23-
print_ip_sym(trace->entries[i]);
24-
}
21+
for (i = 0; i < trace->nr_entries; i++)
22+
printk("%*c%pS\n", 1 + spaces, ' ', (void *)trace->entries[i]);
2523
}
2624
EXPORT_SYMBOL_GPL(print_stack_trace);
2725

2826
int snprint_stack_trace(char *buf, size_t size,
2927
struct stack_trace *trace, int spaces)
3028
{
3129
int i;
32-
unsigned long ip;
3330
int generated;
3431
int total = 0;
3532

3633
if (WARN_ON(!trace->entries))
3734
return 0;
3835

3936
for (i = 0; i < trace->nr_entries; i++) {
40-
ip = trace->entries[i];
41-
generated = snprintf(buf, size, "%*c[<%p>] %pS\n",
42-
1 + spaces, ' ', (void *) ip, (void *) ip);
37+
generated = snprintf(buf, size, "%*c%pS\n", 1 + spaces, ' ',
38+
(void *)trace->entries[i]);
4339

4440
total += generated;
4541

0 commit comments

Comments
 (0)