summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/events/callchain.c15
-rw-r--r--kernel/events/core.c16
-rw-r--r--kernel/events/internal.h4
3 files changed, 16 insertions, 19 deletions
diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
index 1b2be63c8528..772a43fea825 100644
--- a/kernel/events/callchain.c
+++ b/kernel/events/callchain.c
@@ -179,21 +179,6 @@ put_callchain_entry(int rctx)
179} 179}
180 180
181struct perf_callchain_entry * 181struct perf_callchain_entry *
182perf_callchain(struct perf_event *event, struct pt_regs *regs)
183{
184 bool kernel = !event->attr.exclude_callchain_kernel;
185 bool user = !event->attr.exclude_callchain_user;
186 /* Disallow cross-task user callchains. */
187 bool crosstask = event->ctx->task && event->ctx->task != current;
188 const u32 max_stack = event->attr.sample_max_stack;
189
190 if (!kernel && !user)
191 return NULL;
192
193 return get_perf_callchain(regs, 0, kernel, user, max_stack, crosstask, true);
194}
195
196struct perf_callchain_entry *
197get_perf_callchain(struct pt_regs *regs, u32 init_nr, bool kernel, bool user, 182get_perf_callchain(struct pt_regs *regs, u32 init_nr, bool kernel, bool user,
198 u32 max_stack, bool crosstask, bool add_mark) 183 u32 max_stack, bool crosstask, bool add_mark)
199{ 184{
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 55fb648a32b0..5fc1ded4b450 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -5980,6 +5980,22 @@ static u64 perf_virt_to_phys(u64 virt)
5980 return phys_addr; 5980 return phys_addr;
5981} 5981}
5982 5982
5983static struct perf_callchain_entry *
5984perf_callchain(struct perf_event *event, struct pt_regs *regs)
5985{
5986 bool kernel = !event->attr.exclude_callchain_kernel;
5987 bool user = !event->attr.exclude_callchain_user;
5988 /* Disallow cross-task user callchains. */
5989 bool crosstask = event->ctx->task && event->ctx->task != current;
5990 const u32 max_stack = event->attr.sample_max_stack;
5991
5992 if (!kernel && !user)
5993 return NULL;
5994
5995 return get_perf_callchain(regs, 0, kernel, user,
5996 max_stack, crosstask, true);
5997}
5998
5983void perf_prepare_sample(struct perf_event_header *header, 5999void perf_prepare_sample(struct perf_event_header *header,
5984 struct perf_sample_data *data, 6000 struct perf_sample_data *data,
5985 struct perf_event *event, 6001 struct perf_event *event,
diff --git a/kernel/events/internal.h b/kernel/events/internal.h
index 09b1537ae06c..6dc725a7e7bc 100644
--- a/kernel/events/internal.h
+++ b/kernel/events/internal.h
@@ -201,10 +201,6 @@ arch_perf_out_copy_user(void *dst, const void *src, unsigned long n)
201 201
202DEFINE_OUTPUT_COPY(__output_copy_user, arch_perf_out_copy_user) 202DEFINE_OUTPUT_COPY(__output_copy_user, arch_perf_out_copy_user)
203 203
204/* Callchain handling */
205extern struct perf_callchain_entry *
206perf_callchain(struct perf_event *event, struct pt_regs *regs);
207
208static inline int get_recursion_context(int *recursion) 204static inline int get_recursion_context(int *recursion)
209{ 205{
210 int rctx; 206 int rctx;