Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1312131

[PATCH 2/6] perf core: Set event's default overflow_handler

From Wang Nan <wangnan0@huawei.com>
Newsgroups linux.kernel
Subject [PATCH 2/6] perf core: Set event's default overflow_handler
Date 2016-01-19 12:20 +0100
Message-ID <qSCun-6ZJ-23@gated-at.bofh.it> (permalink)
References <qSgNb-rq-19@gated-at.bofh.it> <qSCum-6ZJ-9@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Set a default event->overflow_handler in perf_event_alloc() so don't
need checking event->overflow_handler in __perf_event_overflow().
Following commits can give a different default overflow_handler.

No extra performance introduced into hot path because in the original
code we still need reading this handler from memory. A conditional branch
is avoided so actually we remove some instructions.

Initial idea comes from Peter at [1].

[1] http://lkml.kernel.org/r/20130708121557.GA17211@twins.programming.kicks-ass.net

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: He Kuang <hekuang@huawei.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
---
 kernel/events/core.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/kernel/events/core.c b/kernel/events/core.c
index 9e9c84da..f79c4be 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -6402,10 +6402,7 @@ static int __perf_event_overflow(struct perf_event *event,
 		irq_work_queue(&event->pending);
 	}
 
-	if (event->overflow_handler)
-		event->overflow_handler(event, data, regs);
-	else
-		perf_event_output(event, data, regs);
+	event->overflow_handler(event, data, regs);
 
 	if (*perf_event_fasync(event) && event->pending_kill) {
 		event->pending_wakeup = 1;
@@ -7874,8 +7871,13 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
 		context = parent_event->overflow_handler_context;
 	}
 
-	event->overflow_handler	= overflow_handler;
-	event->overflow_handler_context = context;
+	if (overflow_handler) {
+		event->overflow_handler	= overflow_handler;
+		event->overflow_handler_context = context;
+	} else {
+		event->overflow_handler = perf_event_output;
+		event->overflow_handler_context = NULL;
+	}
 
 	perf_event__state_init(event);
 
-- 
1.8.3.4

Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH] perf core: Introduce new ioctl options to pause and resume ring buffer Wang Nan <wangnan0@huawei.com> - 2016-01-18 13:00 +0100
  Re: [PATCH] perf core: Introduce new ioctl options to pause and  resume ring buffer Peter Zijlstra <peterz@infradead.org> - 2016-01-18 13:10 +0100
    Re: [PATCH] perf core: Introduce new ioctl options to pause and resume  ring buffer "Wangnan (F)" <wangnan0@huawei.com> - 2016-01-19 04:00 +0100
    [PATCH 0/6] perf core: Read from overwrite ring buffer Wang Nan <wangnan0@huawei.com> - 2016-01-19 12:20 +0100
      [PATCH 1/6] perf core: Introduce new ioctl options to pause and resume ring buffer Wang Nan <wangnan0@huawei.com> - 2016-01-19 12:20 +0100
      [PATCH 6/6] perf/core: Put size of a sample at the end of it by PERF_SAMPLE_TAILSIZE Wang Nan <wangnan0@huawei.com> - 2016-01-19 12:20 +0100
      [PATCH 2/6] perf core: Set event's default overflow_handler Wang Nan <wangnan0@huawei.com> - 2016-01-19 12:20 +0100
      [PATCH 5/6] perf core: Reduce perf event output overhead by setting overwrite handler Wang Nan <wangnan0@huawei.com> - 2016-01-19 12:20 +0100
      [PATCH 4/6] perf core: Add backwork attribute to perf event Wang Nan <wangnan0@huawei.com> - 2016-01-19 12:20 +0100
      [PATCH 3/6] perf core: Prepare writing into ring buffer from end Wang Nan <wangnan0@huawei.com> - 2016-01-19 12:30 +0100
      Re: [PATCH 0/6] perf core: Read from overwrite ring buffer Namhyung Kim <namhyung@kernel.org> - 2016-01-19 15:10 +0100
        Re: [PATCH 0/6] perf core: Read from overwrite ring buffer pi3orama <pi3orama@163.com> - 2016-01-19 15:20 +0100
      Re: [PATCH 0/6] perf core: Read from overwrite ring buffer Alexei Starovoitov <alexei.starovoitov@gmail.com> - 2016-01-19 18:50 +0100
        Re: [PATCH 0/6] perf core: Read from overwrite ring buffer "Wangnan (F)" <wangnan0@huawei.com> - 2016-01-20 02:40 +0100
          Re: [PATCH 0/6] perf core: Read from overwrite ring buffer Alexei Starovoitov <alexei.starovoitov@gmail.com> - 2016-01-20 03:30 +0100
            Re: [PATCH 0/6] perf core: Read from overwrite ring buffer "Wangnan (F)" <wangnan0@huawei.com> - 2016-01-21 08:00 +0100
              Re: [PATCH 0/6] perf core: Read from overwrite ring buffer "Wangnan (F)" <wangnan0@huawei.com> - 2016-01-22 03:30 +0100
                Re: [PATCH 0/6] perf core: Read from overwrite ring buffer Alexei Starovoitov <alexei.starovoitov@gmail.com> - 2016-01-22 04:30 +0100
                Re: [PATCH 0/6] perf core: Read from overwrite ring buffer "Wangnan (F)" <wangnan0@huawei.com> - 2016-01-22 05:50 +0100

csiph-web