aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexei Starovoitov <ast@fb.com>2016-04-06 21:43:22 -0400
committerDavid S. Miller <davem@davemloft.net>2016-04-07 21:04:26 -0400
commitec5e099d6e941668d121ea9ca7057f4fa00830b0 (patch)
tree4ec273d88501a68ce23eb53649530161a7fa8440
parentb33b0a1bf69faff89693df49519fa7b459f5d807 (diff)
perf: optimize perf_fetch_caller_regs
avoid memset in perf_fetch_caller_regs, since it's the critical path of all tracepoints. It's called from perf_sw_event_sched, perf_event_task_sched_in and all of perf_trace_##call with this_cpu_ptr(&__perf_regs[..]) which are zero initialized by perpcu init logic and subsequent call to perf_arch_fetch_caller_regs initializes the same fields on all archs, so we can safely drop memset from all of the above cases and move it into perf_ftrace_function_call that calls it with stack allocated pt_regs. Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/linux/perf_event.h2
-rw-r--r--kernel/trace/trace_event_perf.c1
2 files changed, 1 insertions, 2 deletions
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index f291275ffd71..e89f7199c223 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -882,8 +882,6 @@ static inline void perf_arch_fetch_caller_regs(struct pt_regs *regs, unsigned lo
882 */ 882 */
883static inline void perf_fetch_caller_regs(struct pt_regs *regs) 883static inline void perf_fetch_caller_regs(struct pt_regs *regs)
884{ 884{
885 memset(regs, 0, sizeof(*regs));
886
887 perf_arch_fetch_caller_regs(regs, CALLER_ADDR0); 885 perf_arch_fetch_caller_regs(regs, CALLER_ADDR0);
888} 886}
889 887
diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c
index 00df25fd86ef..7a68afca8249 100644
--- a/kernel/trace/trace_event_perf.c
+++ b/kernel/trace/trace_event_perf.c
@@ -316,6 +316,7 @@ perf_ftrace_function_call(unsigned long ip, unsigned long parent_ip,
316 316
317 BUILD_BUG_ON(ENTRY_SIZE > PERF_MAX_TRACE_SIZE); 317 BUILD_BUG_ON(ENTRY_SIZE > PERF_MAX_TRACE_SIZE);
318 318
319 memset(&regs, 0, sizeof(regs));
319 perf_fetch_caller_regs(&regs); 320 perf_fetch_caller_regs(&regs);
320 321
321 entry = perf_trace_buf_prepare(ENTRY_SIZE, TRACE_FN, NULL, &rctx); 322 entry = perf_trace_buf_prepare(ENTRY_SIZE, TRACE_FN, NULL, &rctx);