perf tools: tool->finished_round() doesn't need perf_session
authorArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 3 Mar 2015 15:37:54 +0000 (12:37 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 12 Mar 2015 15:39:49 +0000 (12:39 -0300)
It is all about flushing the ordered queue or piping it thru, no need
for a perf_session pointer.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Ahern <dsahern@gmail.com>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/n/tip-g47fx3ys0t9271cp0dcabjc7@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-inject.c
tools/perf/builtin-kvm.c
tools/perf/util/session.c
tools/perf/util/tool.h

index 2563f07ec0e5741d3663d3bb72f9e125af1ab031..ea46df25368c0f032cff400baa0ceea944723f03 100644 (file)
@@ -53,6 +53,13 @@ static int perf_event__repipe_synth(struct perf_tool *tool,
        return 0;
 }
 
+static int perf_event__repipe_oe_synth(struct perf_tool *tool,
+                                      union perf_event *event,
+                                      struct ordered_events *oe __maybe_unused)
+{
+       return perf_event__repipe_synth(tool, event);
+}
+
 static int perf_event__repipe_op2_synth(struct perf_tool *tool,
                                        union perf_event *event,
                                        struct perf_session *session
@@ -406,7 +413,7 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused)
                        .unthrottle     = perf_event__repipe,
                        .attr           = perf_event__repipe_attr,
                        .tracing_data   = perf_event__repipe_op2_synth,
-                       .finished_round = perf_event__repipe_op2_synth,
+                       .finished_round = perf_event__repipe_oe_synth,
                        .build_id       = perf_event__repipe_op2_synth,
                        .id_index       = perf_event__repipe_op2_synth,
                },
index 802b8f53fa9aae616f8ea780745d62f1c28be749..643722f400753f4f77fa86c90c67b2ccbb234450 100644 (file)
@@ -18,6 +18,7 @@
 #include "util/stat.h"
 #include "util/top.h"
 #include "util/data.h"
+#include "util/ordered-events.h"
 
 #include <sys/prctl.h>
 #ifdef HAVE_TIMERFD_SUPPORT
@@ -783,8 +784,10 @@ static int perf_kvm__mmap_read(struct perf_kvm_stat *kvm)
 
        /* flush queue after each round in which we processed events */
        if (ntotal) {
-               kvm->session->ordered_events.next_flush = flush_time;
-               err = kvm->tool.finished_round(&kvm->tool, NULL, kvm->session);
+               struct ordered_events *oe = &kvm->session->ordered_events;
+
+               oe->next_flush = flush_time;
+               err = ordered_events__flush(oe, OE_FLUSH__ROUND);
                if (err) {
                        if (kvm->lost_events)
                                pr_info("\nLost events: %" PRIu64 "\n\n",
index e2f318a3f17ae0420fe04c862ec6d48c58e87141..703a370ae5b6dd4ff9b2c986e504857168025c24 100644 (file)
@@ -225,10 +225,17 @@ static int process_event_stub(struct perf_tool *tool __maybe_unused,
        return 0;
 }
 
+static int process_build_id_stub(struct perf_tool *tool __maybe_unused,
+                                union perf_event *event __maybe_unused,
+                                struct perf_session *session __maybe_unused)
+{
+       dump_printf(": unhandled!\n");
+       return 0;
+}
+
 static int process_finished_round_stub(struct perf_tool *tool __maybe_unused,
                                       union perf_event *event __maybe_unused,
-                                      struct perf_session *perf_session
-                                      __maybe_unused)
+                                      struct ordered_events *oe __maybe_unused)
 {
        dump_printf(": unhandled!\n");
        return 0;
@@ -236,7 +243,7 @@ static int process_finished_round_stub(struct perf_tool *tool __maybe_unused,
 
 static int process_finished_round(struct perf_tool *tool,
                                  union perf_event *event,
-                                 struct perf_session *session);
+                                 struct ordered_events *oe);
 
 static int process_id_index_stub(struct perf_tool *tool __maybe_unused,
                                 union perf_event *event __maybe_unused,
@@ -274,7 +281,7 @@ void perf_tool__fill_defaults(struct perf_tool *tool)
        if (tool->tracing_data == NULL)
                tool->tracing_data = process_event_synth_tracing_data_stub;
        if (tool->build_id == NULL)
-               tool->build_id = process_finished_round_stub;
+               tool->build_id = process_build_id_stub;
        if (tool->finished_round == NULL) {
                if (tool->ordered_events)
                        tool->finished_round = process_finished_round;
@@ -526,10 +533,8 @@ static perf_event__swap_op perf_event__swap_ops[] = {
  */
 static int process_finished_round(struct perf_tool *tool __maybe_unused,
                                  union perf_event *event __maybe_unused,
-                                 struct perf_session *session)
+                                 struct ordered_events *oe)
 {
-       struct ordered_events *oe = &session->ordered_events;
-
        return ordered_events__flush(oe, OE_FLUSH__ROUND);
 }
 
@@ -961,7 +966,8 @@ static s64 perf_session__process_user_event(struct perf_session *session,
                                            union perf_event *event,
                                            u64 file_offset)
 {
-       struct perf_tool *tool = session->ordered_events.tool;
+       struct ordered_events *oe = &session->ordered_events;
+       struct perf_tool *tool = oe->tool;
        int fd = perf_data_file__fd(session->file);
        int err;
 
@@ -989,7 +995,7 @@ static s64 perf_session__process_user_event(struct perf_session *session,
        case PERF_RECORD_HEADER_BUILD_ID:
                return tool->build_id(tool, event, session);
        case PERF_RECORD_FINISHED_ROUND:
-               return tool->finished_round(tool, event, session);
+               return tool->finished_round(tool, event, oe);
        case PERF_RECORD_ID_INDEX:
                return tool->id_index(tool, event, session);
        default:
index bb2708bbfaca9565b48657608ff4d9a0e831e3d6..51d9e56c0f841d89f730f00e72e984a867b9f4fc 100644 (file)
@@ -10,6 +10,7 @@ struct perf_evsel;
 struct perf_sample;
 struct perf_tool;
 struct machine;
+struct ordered_events;
 
 typedef int (*event_sample)(struct perf_tool *tool, union perf_event *event,
                            struct perf_sample *sample,
@@ -25,6 +26,9 @@ typedef int (*event_attr_op)(struct perf_tool *tool,
 typedef int (*event_op2)(struct perf_tool *tool, union perf_event *event,
                         struct perf_session *session);
 
+typedef int (*event_oe)(struct perf_tool *tool, union perf_event *event,
+                       struct ordered_events *oe);
+
 struct perf_tool {
        event_sample    sample,
                        read;
@@ -38,8 +42,8 @@ struct perf_tool {
                        unthrottle;
        event_attr_op   attr;
        event_op2       tracing_data;
-       event_op2       finished_round,
-                       build_id,
+       event_oe        finished_round;
+       event_op2       build_id,
                        id_index;
        bool            ordered_events;
        bool            ordering_requires_timestamps;