tracing/trace_stack: Fix stack trace on ppc64
PATCH 1/1 tracing/trace_stack: Fix stack trace on ppc64
save_stack_trace() stores the instruction pointer, not the function descriptor. On ppc64 the trace stack code currently dereferences the instruction pointer and shows 8 bytes of instructions in our backtraces:
# cat /sys/kernel/debug/tracing/stack_trace
Depth Size Location (26 entries)
----- ---- --------
0) 5424 112 0x6000000048000004
1) 5312 160 0x60000000ebad01b0
2) 5152 160 0x2c23000041c20030
3) 4992 240 0x600000007c781b79
4) 4752 160 0xe84100284800000c
5) 4592 192 0x600000002fa30000
6) 4400 256 0x7f1800347b7407e0
7) 4144 208 0xe89f0108f87f0070
8) 3936 272 0xe84100282fa30000Since we aren't dealing with function descriptors, use %pS instead of %pF to fix it:
# cat /sys/kernel/debug/tracing/stack_trace
Depth Size Location (26 entries)
----- ---- --------
0) 5424 112 ftrace_call+0x4/0x8
1) 5312 160 .current_io_context+0x28/0x74
2) 5152 160 .get_io_context+0x48/0xa0
3) 4992 240 .cfq_set_request+0x94/0x4c4
4) 4752 160 .elv_set_request+0x60/0x84
5) 4592 192 .get_request+0x2d4/0x468
6) 4400 256 .get_request_wait+0x7c/0x258
7) 4144 208 .__make_request+0x49c/0x610
8) 3936 272 .generic_make_request+0x390/0x434---
kernel/trace/trace_stack.c +1 -1
@@ -249,7 +249,7 @@ static int trace_lookup_stack(struct seq {unsigned long addr = stack_dump_trace[i]; -return seq_printf (m,"%pF\n" , (void *)addr); +return seq_printf (m,"%pS\n" , (void *)addr); }static void print_disabled (struct seq_file *m)
Commit-ID: 151772dbfad4dbe81721e40f9b3d588ea77bb7aa Gitweb: http://git.kernel.org/tip/151772dbfad4dbe81721e40f9b3d588ea77bb7aa Author: Anton Blanchard <[email protected]> AuthorDate: Wed, 25 Aug 2010 11:32:38 +1000 Committer: Ingo Molnar <[email protected]> CommitDate: Wed, 25 Aug 2010 13:08:48 +0200
tracing/trace_stack: Fix stack trace on ppc64
save_stack_trace() stores the instruction pointer, not the function descriptor. On ppc64 the trace stack code currently dereferences the instruction pointer and shows 8 bytes of instructions in our backtraces:
# cat /sys/kernel/debug/tracing/stack_trace
Depth Size Location (26 entries)
----- ---- --------
0) 5424 112 0x6000000048000004
1) 5312 160 0x60000000ebad01b0
2) 5152 160 0x2c23000041c20030
3) 4992 240 0x600000007c781b79
4) 4752 160 0xe84100284800000c
5) 4592 192 0x600000002fa30000
6) 4400 256 0x7f1800347b7407e0
7) 4144 208 0xe89f0108f87f0070
8) 3936 272 0xe84100282fa30000Since we aren't dealing with function descriptors, use %pS instead of %pF to fix it:
# cat /sys/kernel/debug/tracing/stack_trace
Depth Size Location (26 entries)
----- ---- --------
0) 5424 112 ftrace_call+0x4/0x8
1) 5312 160 .current_io_context+0x28/0x74
2) 5152 160 .get_io_context+0x48/0xa0
3) 4992 240 .cfq_set_request+0x94/0x4c4
4) 4752 160 .elv_set_request+0x60/0x84
5) 4592 192 .get_request+0x2d4/0x468
6) 4400 256 .get_request_wait+0x7c/0x258
7) 4144 208 .__make_request+0x49c/0x610
8) 3936 272 .generic_make_request+0x390/0x434LKML-Reference: <20100825013238.GE28360@kryten>
--- kernel/trace/trace_stack.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
kernel/trace/trace_stack.c +1 -1
@@ -249,7 +249,7 @@ static int trace_lookup_stack(struct seq_file *m, long i) {unsigned long addr = stack_dump_trace[i]; -return seq_printf (m,"%pF\n" , (void *)addr); +return seq_printf (m,"%pS\n" , (void *)addr); }static void print_disabled (struct seq_file *m)
Steven Rostedt
maintainerQuoted 33 lines · Anton Blanchard
save_stack_trace()stores the instruction pointer, not the function descriptor. On ppc64 the trace stack code currently dereferences the instruction pointer and shows 8 bytes of instructions in our backtraces:# cat /sys/kernel/debug/tracing/stack_trace Depth Size Location (26 entries) ----- ---- -------- 0) 5424 112 0x6000000048000004 1) 5312 160 0x60000000ebad01b0 2) 5152 160 0x2c23000041c20030 3) 4992 240 0x600000007c781b79 4) 4752 160 0xe84100284800000c 5) 4592 192 0x600000002fa30000 6) 4400 256 0x7f1800347b7407e0 7) 4144 208 0xe89f0108f87f0070 8) 3936 272 0xe84100282fa30000Since we aren't dealing with function descriptors, use %pS instead of %pF to fix it:
# cat /sys/kernel/debug/tracing/stack_trace Depth Size Location (26 entries) ----- ---- -------- 0) 5424 112 ftrace_call+0x4/0x8 1) 5312 160 .current_io_context+0x28/0x74 2) 5152 160 .get_io_context+0x48/0xa0 3) 4992 240 .cfq_set_request+0x94/0x4c4 4) 4752 160 .elv_set_request+0x60/0x84 5) 4592 192 .get_request+0x2d4/0x468 6) 4400 256 .get_request_wait+0x7c/0x258 7) 4144 208 .__make_request+0x49c/0x610 8) 3936 272 .generic_make_request+0x390/0x434
Quoted 1 line
Signed-off-by Anton Blanchard <[email protected]>
Thanks, I'll test this to make sure it doesn't break x86, and then push it into a stable/-rc patch queue.
-- Steve
Quoted 15 lines
---
Index:
powerpc.git/kernel/trace/trace_stack.c
===================================================================kernel/trace/trace_stack.c +1
-1@@ -249,7 +249,7 @@ static int trace_lookup_stack(struct seq {unsigned long addr = stack_dump_trace[i]; -return seq_printf (m,"%pF\n" , (void *)addr); +return seq_printf (m,"%pS\n" , (void *)addr); }static void print_disabled (struct seq_file *m)
Quoted 34 lines · Steven Rostedt
Quoted 33 lines · Anton Blanchard
save_stack_trace()stores the instruction pointer, not the function descriptor. On ppc64 the trace stack code currently dereferences the instruction pointer and shows 8 bytes of instructions in our backtraces:# cat /sys/kernel/debug/tracing/stack_trace Depth Size Location (26 entries) ----- ---- -------- 0) 5424 112 0x6000000048000004 1) 5312 160 0x60000000ebad01b0 2) 5152 160 0x2c23000041c20030 3) 4992 240 0x600000007c781b79 4) 4752 160 0xe84100284800000c 5) 4592 192 0x600000002fa30000 6) 4400 256 0x7f1800347b7407e0 7) 4144 208 0xe89f0108f87f0070 8) 3936 272 0xe84100282fa30000Since we aren't dealing with function descriptors, use %pS instead of %pF to fix it:
# cat /sys/kernel/debug/tracing/stack_trace Depth Size Location (26 entries) ----- ---- -------- 0) 5424 112 ftrace_call+0x4/0x8 1) 5312 160 .current_io_context+0x28/0x74 2) 5152 160 .get_io_context+0x48/0xa0 3) 4992 240 .cfq_set_request+0x94/0x4c4 4) 4752 160 .elv_set_request+0x60/0x84 5) 4592 192 .get_request+0x2d4/0x468 6) 4400 256 .get_request_wait+0x7c/0x258 7) 4144 208 .__make_request+0x49c/0x610 8) 3936 272 .generic_make_request+0x390/0x434
Quoted 6 lines
Quoted 1 line
Signed-off-by Anton Blanchard <[email protected]>Thanks, I'll test this to make sure it doesn't break x86, and then push it into a stable/-rc patch queue.
-- Steve
Ingo has applied it already in perf/urgent.
Thanks.
Steven Rostedt
maintainerQuoted 37 lines · Frederic Weisbecker
Quoted 36 lines · Steven Rostedt
Quoted 34 lines · Anton Blanchard
save_stack_trace()stores the instruction pointer, not the function descriptor. On ppc64 the trace stack code currently dereferences the instruction pointer and shows 8 bytes of instructions in our backtraces:# cat /sys/kernel/debug/tracing/stack_trace Depth Size Location (26 entries) ----- ---- -------- 0) 5424 112 0x6000000048000004 1) 5312 160 0x60000000ebad01b0 2) 5152 160 0x2c23000041c20030 3) 4992 240 0x600000007c781b79 4) 4752 160 0xe84100284800000c 5) 4592 192 0x600000002fa30000 6) 4400 256 0x7f1800347b7407e0 7) 4144 208 0xe89f0108f87f0070 8) 3936 272 0xe84100282fa30000Since we aren't dealing with function descriptors, use %pS instead of %pF to fix it:
# cat /sys/kernel/debug/tracing/stack_trace Depth Size Location (26 entries) ----- ---- -------- 0) 5424 112 ftrace_call+0x4/0x8 1) 5312 160 .current_io_context+0x28/0x74 2) 5152 160 .get_io_context+0x48/0xa0 3) 4992 240 .cfq_set_request+0x94/0x4c4 4) 4752 160 .elv_set_request+0x60/0x84 5) 4592 192 .get_request+0x2d4/0x468 6) 4400 256 .get_request_wait+0x7c/0x258 7) 4144 208 .__make_request+0x49c/0x610 8) 3936 272 .generic_make_request+0x390/0x434Signed-off-by Anton Blanchard <[email protected]>
Quoted 7 lines
Quoted 4 lines
Thanks, I'll test this to make sure it doesn't break x86, and then push it into a stable/-rc patch queue.
-- Steve
Ingo has applied it already in perf/urgent.
Hmm, I never saw the tip-bot reply :-(
I guess it only sends to the Cc tags.
-- Steve
Quoted 7 lines · Steven Rostedt
Hmm, I never saw the tip-bot reply :-(
I guess it only sends to the Cc tags.
-- Steve
We were in the commit Cc tags but somehow they didn't make it in the email tags.
Here is the tip-bot email:
---
Commit-ID: 151772dbfad4dbe81721e40f9b3d588ea77bb7aa Gitweb: http://git.kernel.org/tip/151772dbfad4dbe81721e40f9b3d588ea77bb7aa Author: Anton Blanchard <[email protected]> AuthorDate: Wed, 25 Aug 2010 11:32:38 +1000 Committer: Ingo Molnar <[email protected]> CommitDate: Wed, 25 Aug 2010 13:08:48 +0200
tracing/trace_stack: Fix stack trace on ppc64
save_stack_trace() stores the instruction pointer, not the function descriptor. On ppc64 the trace stack code currently dereferences the instruction pointer and shows 8 bytes of instructions in our backtraces:
# cat /sys/kernel/debug/tracing/stack_trace
Depth Size Location (26 entries)
----- ---- --------
0) 5424 112 0x6000000048000004
1) 5312 160 0x60000000ebad01b0
2) 5152 160 0x2c23000041c20030
3) 4992 240 0x600000007c781b79
4) 4752 160 0xe84100284800000c
5) 4592 192 0x600000002fa30000
6) 4400 256 0x7f1800347b7407e0
7) 4144 208 0xe89f0108f87f0070
8) 3936 272 0xe84100282fa30000Since we aren't dealing with function descriptors, use %pS instead of %pF to fix it:
# cat /sys/kernel/debug/tracing/stack_trace
Depth Size Location (26 entries)
----- ---- --------
0) 5424 112 ftrace_call+0x4/0x8
1) 5312 160 .current_io_context+0x28/0x74
2) 5152 160 .get_io_context+0x48/0xa0
3) 4992 240 .cfq_set_request+0x94/0x4c4
4) 4752 160 .elv_set_request+0x60/0x84
5) 4592 192 .get_request+0x2d4/0x468
6) 4400 256 .get_request_wait+0x7c/0x258
7) 4144 208 .__make_request+0x49c/0x610
8) 3936 272 .generic_make_request+0x390/0x434LKML-Reference: <20100825013238.GE28360@kryten>
--- kernel/trace/trace_stack.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
kernel/trace/trace_stack.c +1 -1
@@ -249,7 +249,7 @@ static int trace_lookup_stack(struct seq_file *m, long i) {unsigned long addr = stack_dump_trace[i]; -return seq_printf (m,"%pF\n" , (void *)addr); +return seq_printf (m,"%pS\n" , (void *)addr); }static void print_disabled (struct seq_file *m)
--
To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 5 lines · Frederic Weisbecker
Quoted 4 lines · Steven Rostedt
Hmm, I never saw the tip-bot reply :-(
I guess it only sends to the Cc tags.
Quoted 7 lines
Quoted 3 lines
-- Steve
We were in the commit Cc tags but somehow they didn't make it in the email tags.
indeed - i forwarded this to hpa.
Ingo