diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-04-28 11:30:53 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2016-05-16 22:11:50 -0400 |
commit | cfbcf468454ab4b20f0b4b62da51920b99fdb19e (patch) | |
tree | 08b7caa605bd1ef1babb8f58cb0771bc20e518c4 /arch/metag | |
parent | a831100aeefbe6d9f3e47a3e2712f82c042f1f5c (diff) |
perf core: Pass max stack as a perf_callchain_entry context
This makes perf_callchain_{user,kernel}() receive the max stack
as context for the perf_callchain_entry, instead of accessing
the global sysctl_perf_event_max_stack.
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Milian Wolff <milian.wolff@kdab.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Vince Weaver <vincent.weaver@maine.edu>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: Zefan Li <lizefan@huawei.com>
Link: http://lkml.kernel.org/n/tip-kolmn1yo40p7jhswxwrc7rrd@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'arch/metag')
-rw-r--r-- | arch/metag/kernel/perf_callchain.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/metag/kernel/perf_callchain.c b/arch/metag/kernel/perf_callchain.c index 252abc12a5a3..b3261a98b15b 100644 --- a/arch/metag/kernel/perf_callchain.c +++ b/arch/metag/kernel/perf_callchain.c | |||
@@ -29,7 +29,7 @@ static bool is_valid_call(unsigned long calladdr) | |||
29 | 29 | ||
30 | static struct metag_frame __user * | 30 | static struct metag_frame __user * |
31 | user_backtrace(struct metag_frame __user *user_frame, | 31 | user_backtrace(struct metag_frame __user *user_frame, |
32 | struct perf_callchain_entry *entry) | 32 | struct perf_callchain_entry_ctx *entry) |
33 | { | 33 | { |
34 | struct metag_frame frame; | 34 | struct metag_frame frame; |
35 | unsigned long calladdr; | 35 | unsigned long calladdr; |
@@ -56,7 +56,7 @@ user_backtrace(struct metag_frame __user *user_frame, | |||
56 | } | 56 | } |
57 | 57 | ||
58 | void | 58 | void |
59 | perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) | 59 | perf_callchain_user(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs) |
60 | { | 60 | { |
61 | unsigned long sp = regs->ctx.AX[0].U0; | 61 | unsigned long sp = regs->ctx.AX[0].U0; |
62 | struct metag_frame __user *frame; | 62 | struct metag_frame __user *frame; |
@@ -65,7 +65,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs) | |||
65 | 65 | ||
66 | --frame; | 66 | --frame; |
67 | 67 | ||
68 | while ((entry->nr < sysctl_perf_event_max_stack) && frame) | 68 | while ((entry->entry->nr < entry->max_stack) && frame) |
69 | frame = user_backtrace(frame, entry); | 69 | frame = user_backtrace(frame, entry); |
70 | } | 70 | } |
71 | 71 | ||
@@ -78,13 +78,13 @@ static int | |||
78 | callchain_trace(struct stackframe *fr, | 78 | callchain_trace(struct stackframe *fr, |
79 | void *data) | 79 | void *data) |
80 | { | 80 | { |
81 | struct perf_callchain_entry *entry = data; | 81 | struct perf_callchain_entry_ctx *entry = data; |
82 | perf_callchain_store(entry, fr->pc); | 82 | perf_callchain_store(entry, fr->pc); |
83 | return 0; | 83 | return 0; |
84 | } | 84 | } |
85 | 85 | ||
86 | void | 86 | void |
87 | perf_callchain_kernel(struct perf_callchain_entry *entry, struct pt_regs *regs) | 87 | perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *regs) |
88 | { | 88 | { |
89 | struct stackframe fr; | 89 | struct stackframe fr; |
90 | 90 | ||