OSDN Git Service

perf ordered_events: Shorten function signatures
authorArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 3 Mar 2015 14:58:45 +0000 (11:58 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 11 Mar 2015 13:17:09 +0000 (10:17 -0300)
By keeping pointers to machines, evlist and tool in ordered_events.

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-0c6huyaf59mqtm2ek9pmposl@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
19 files changed:
tools/perf/builtin-annotate.c
tools/perf/builtin-buildid-list.c
tools/perf/builtin-diff.c
tools/perf/builtin-inject.c
tools/perf/builtin-kmem.c
tools/perf/builtin-kvm.c
tools/perf/builtin-lock.c
tools/perf/builtin-mem.c
tools/perf/builtin-record.c
tools/perf/builtin-report.c
tools/perf/builtin-sched.c
tools/perf/builtin-script.c
tools/perf/builtin-timechart.c
tools/perf/builtin-trace.c
tools/perf/util/data-convert-bt.c
tools/perf/util/ordered-events.c
tools/perf/util/ordered-events.h
tools/perf/util/session.c
tools/perf/util/session.h

index 747f861..71bf745 100644 (file)
@@ -208,7 +208,7 @@ static int __cmd_annotate(struct perf_annotate *ann)
                        goto out;
        }
 
-       ret = perf_session__process_events(session, &ann->tool);
+       ret = perf_session__process_events(session);
        if (ret)
                goto out;
 
index ed3873b..feb420f 100644 (file)
@@ -74,7 +74,7 @@ static int perf_session__list_build_ids(bool force, bool with_hits)
         * the record stream. Buildids are stored as RECORD_HEADER_BUILD_ID
         */
        if (with_hits || perf_data_file__is_pipe(&file))
-               perf_session__process_events(session, &build_id__mark_dso_hit_ops);
+               perf_session__process_events(session);
 
        perf_session__fprintf_dsos_buildid(session, stdout, dso__skip_buildid, with_hits);
        perf_session__delete(session);
index 74aada5..f800fc9 100644 (file)
@@ -747,7 +747,7 @@ static int __cmd_diff(void)
                        goto out_delete;
                }
 
-               ret = perf_session__process_events(d->session, &tool);
+               ret = perf_session__process_events(d->session);
                if (ret) {
                        pr_err("Failed to process %s\n", d->file.path);
                        goto out_delete;
index a13641e..2563f07 100644 (file)
@@ -359,8 +359,6 @@ static int __cmd_inject(struct perf_inject *inject)
        } else if (inject->sched_stat) {
                struct perf_evsel *evsel;
 
-               inject->tool.ordered_events = true;
-
                evlist__for_each(session->evlist, evsel) {
                        const char *name = perf_evsel__name(evsel);
 
@@ -379,7 +377,7 @@ static int __cmd_inject(struct perf_inject *inject)
        if (!file_out->is_pipe)
                lseek(fd, session->header.data_offset, SEEK_SET);
 
-       ret = perf_session__process_events(session, &inject->tool);
+       ret = perf_session__process_events(session);
 
        if (!file_out->is_pipe) {
                if (inject->build_ids)
@@ -458,6 +456,8 @@ int cmd_inject(int argc, const char **argv, const char *prefix __maybe_unused)
                return -1;
        }
 
+       inject.tool.ordered_events = inject.sched_stat;
+
        file.path = inject.input_name;
        inject.session = perf_session__new(&file, true, &inject.tool);
        if (inject.session == NULL)
index f295141..62f165a 100644 (file)
@@ -426,7 +426,7 @@ static int __cmd_kmem(struct perf_session *session)
        }
 
        setup_pager();
-       err = perf_session__process_events(session, &perf_kmem);
+       err = perf_session__process_events(session);
        if (err != 0)
                goto out;
        sort_result();
index 0894a81..802b8f5 100644 (file)
@@ -730,9 +730,9 @@ static s64 perf_kvm__mmap_read_idx(struct perf_kvm_stat *kvm, int idx,
                        return -1;
                }
 
-               err = perf_session_queue_event(kvm->session, event, &kvm->tool, &sample, 0);
+               err = perf_session__queue_event(kvm->session, event, &sample, 0);
                /*
-                * FIXME: Here we can't consume the event, as perf_session_queue_event will
+                * FIXME: Here we can't consume the event, as perf_session__queue_event will
                 *        point to it, and it'll get possibly overwritten by the kernel.
                 */
                perf_evlist__mmap_consume(kvm->evlist, idx);
@@ -1066,7 +1066,7 @@ static int read_events(struct perf_kvm_stat *kvm)
        if (ret < 0)
                return ret;
 
-       return perf_session__process_events(kvm->session, &kvm->tool);
+       return perf_session__process_events(kvm->session);
 }
 
 static int parse_target_str(struct perf_kvm_stat *kvm)
index e7ec715..7893a9b 100644 (file)
@@ -878,7 +878,7 @@ static int __cmd_report(bool display_info)
        if (select_key())
                goto out_delete;
 
-       err = perf_session__process_events(session, &eops);
+       err = perf_session__process_events(session);
        if (err)
                goto out_delete;
 
index 9b56639..46c6931 100644 (file)
@@ -141,7 +141,7 @@ static int report_raw_events(struct perf_mem *mem)
 
        printf("# PID, TID, IP, ADDR, LOCAL WEIGHT, DSRC, SYMBOL\n");
 
-       err = perf_session__process_events(session, &mem->tool);
+       err = perf_session__process_events(session);
        if (err)
                return err;
 
index 4fdad06..5a2ff51 100644 (file)
@@ -225,7 +225,7 @@ static int process_buildids(struct record *rec)
         */
        symbol_conf.ignore_vmlinux_buildid = true;
 
-       return perf_session__process_events(session, &rec->tool);
+       return perf_session__process_events(session);
 }
 
 static void perf_event__synthesize_guest_os(struct machine *machine, void *data)
@@ -343,7 +343,7 @@ static int __cmd_record(struct record *rec, int argc, const char **argv)
        signal(SIGINT, sig_handler);
        signal(SIGTERM, sig_handler);
 
-       session = perf_session__new(file, false, NULL);
+       session = perf_session__new(file, false, tool);
        if (session == NULL) {
                pr_err("Perf session creation failed.\n");
                return -1;
index fb35034..52f74e1 100644 (file)
@@ -482,7 +482,7 @@ static int __cmd_report(struct report *rep)
        if (ret)
                return ret;
 
-       ret = perf_session__process_events(session, &rep->tool);
+       ret = perf_session__process_events(session);
        if (ret)
                return ret;
 
index a3ebf1d..3b3a5bb 100644 (file)
@@ -1467,7 +1467,7 @@ static int perf_sched__read_events(struct perf_sched *sched)
                goto out_delete;
 
        if (perf_session__has_traces(session, "record -R")) {
-               int err = perf_session__process_events(session, &sched->tool);
+               int err = perf_session__process_events(session);
                if (err) {
                        pr_err("Failed to process events, error %d", err);
                        goto out_delete;
index ce304df..c7e6750 100644 (file)
@@ -800,7 +800,7 @@ static int __cmd_script(struct perf_script *script)
                script->tool.mmap2 = process_mmap2_event;
        }
 
-       ret = perf_session__process_events(script->session, &script->tool);
+       ret = perf_session__process_events(script->session);
 
        if (debug_mode)
                pr_err("Misordered timestamps: %" PRIu64 "\n", nr_unordered);
index f3bb1a4..51440d1 100644 (file)
@@ -1623,7 +1623,7 @@ static int __cmd_timechart(struct timechart *tchart, const char *output_name)
                goto out_delete;
        }
 
-       ret = perf_session__process_events(session, &tchart->tool);
+       ret = perf_session__process_events(session);
        if (ret)
                goto out_delete;
 
index 211614f..6969ba9 100644 (file)
@@ -2408,7 +2408,7 @@ static int trace__replay(struct trace *trace)
 
        setup_pager();
 
-       err = perf_session__process_events(session, &trace->tool);
+       err = perf_session__process_events(session);
        if (err)
                pr_err("Failed to process events, error %d", err);
 
index e372e03..1afd381 100644 (file)
@@ -579,7 +579,7 @@ int bt_convert__perf2ctf(const char *input, const char *path)
                return -1;
 
        /* perf.data session */
-       session = perf_session__new(&file, 0, NULL);
+       session = perf_session__new(&file, 0, &c.tool);
        if (!session)
                goto free_writer;
 
@@ -591,7 +591,7 @@ int bt_convert__perf2ctf(const char *input, const char *path)
        if (setup_events(cw, session))
                goto free_session;
 
-       err = perf_session__process_events(session, &c.tool);
+       err = perf_session__process_events(session);
        if (!err)
                err = bt_ctf_stream_flush(cw->stream);
 
index e6ab630..bad46ce 100644 (file)
@@ -153,10 +153,7 @@ void ordered_events__delete(struct ordered_events *oe, struct ordered_event *eve
        free_dup_event(oe, event->event);
 }
 
-static int __ordered_events__flush(struct ordered_events *oe,
-                                  struct machines *machines,
-                                  struct perf_evlist *evlist,
-                                  struct perf_tool *tool)
+static int __ordered_events__flush(struct ordered_events *oe)
 {
        struct list_head *head = &oe->events;
        struct ordered_event *tmp, *iter;
@@ -180,12 +177,12 @@ static int __ordered_events__flush(struct ordered_events *oe,
                if (iter->timestamp > limit)
                        break;
 
-               ret = perf_evlist__parse_sample(evlist, iter->event, &sample);
+               ret = perf_evlist__parse_sample(oe->evlist, iter->event, &sample);
                if (ret)
                        pr_err("Can't parse sample, err = %d\n", ret);
                else {
-                       ret = machines__deliver_event(machines, evlist, iter->event,
-                                                     &sample, tool, iter->file_offset);
+                       ret = machines__deliver_event(oe->machines, oe->evlist, iter->event,
+                                                     &sample, oe->tool, iter->file_offset);
                        if (ret)
                                return ret;
                }
@@ -205,9 +202,7 @@ static int __ordered_events__flush(struct ordered_events *oe,
        return 0;
 }
 
-int ordered_events__flush(struct ordered_events *oe, struct machines *machines,
-                         struct perf_evlist *evlist, struct perf_tool *tool,
-                         enum oe_flush how)
+int ordered_events__flush(struct ordered_events *oe, enum oe_flush how)
 {
        static const char * const str[] = {
                "NONE",
@@ -252,7 +247,7 @@ int ordered_events__flush(struct ordered_events *oe, struct machines *machines,
                   str[how], oe->nr_events);
        pr_oe_time(oe->max_timestamp, "max_timestamp\n");
 
-       err = __ordered_events__flush(oe, machines, evlist, tool);
+       err = __ordered_events__flush(oe);
 
        if (!err) {
                if (how == OE_FLUSH__ROUND)
@@ -268,13 +263,17 @@ int ordered_events__flush(struct ordered_events *oe, struct machines *machines,
        return err;
 }
 
-void ordered_events__init(struct ordered_events *oe)
+void ordered_events__init(struct ordered_events *oe, struct machines *machines,
+                         struct perf_evlist *evlist, struct perf_tool *tool)
 {
        INIT_LIST_HEAD(&oe->events);
        INIT_LIST_HEAD(&oe->cache);
        INIT_LIST_HEAD(&oe->to_free);
        oe->max_alloc_size = (u64) -1;
        oe->cur_alloc_size = 0;
+       oe->evlist         = evlist;
+       oe->machines       = machines;
+       oe->tool           = tool;
 }
 
 void ordered_events__free(struct ordered_events *oe)
index e09f243..ef7d73e 100644 (file)
@@ -32,6 +32,9 @@ struct ordered_events {
        struct list_head        to_free;
        struct ordered_event    *buffer;
        struct ordered_event    *last;
+       struct machines         *machines;
+       struct perf_evlist      *evlist;
+       struct perf_tool        *tool;
        int                     buffer_idx;
        unsigned int            nr_events;
        enum oe_flush           last_flush_type;
@@ -41,10 +44,9 @@ struct ordered_events {
 struct ordered_event *ordered_events__new(struct ordered_events *oe, u64 timestamp,
                                          union perf_event *event);
 void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event);
-int ordered_events__flush(struct ordered_events *oe, struct machines *machines,
-                         struct perf_evlist *evlist, struct perf_tool *tool,
-                         enum oe_flush how);
-void ordered_events__init(struct ordered_events *oe);
+int ordered_events__flush(struct ordered_events *oe, enum oe_flush how);
+void ordered_events__init(struct ordered_events *oe, struct machines *machines,
+                         struct perf_evlist *evlsit, struct perf_tool *tool);
 void ordered_events__free(struct ordered_events *oe);
 
 static inline
index 23be146..c6dd89f 100644 (file)
@@ -95,7 +95,6 @@ struct perf_session *perf_session__new(struct perf_data_file *file,
                goto out;
 
        session->repipe = repipe;
-       ordered_events__init(&session->ordered_events);
        machines__init(&session->machines);
 
        if (file) {
@@ -126,7 +125,8 @@ struct perf_session *perf_session__new(struct perf_data_file *file,
            tool->ordered_events && !perf_evlist__sample_id_all(session->evlist)) {
                dump_printf("WARNING: No sample_id_all support, falling back to unordered processing\n");
                tool->ordered_events = false;
-       }
+       } else
+               ordered_events__init(&session->ordered_events, &session->machines, session->evlist, tool);
 
        return session;
 
@@ -508,24 +508,19 @@ static perf_event__swap_op perf_event__swap_ops[] = {
  *      Flush every events below timestamp 7
  *      etc...
  */
-static int process_finished_round(struct perf_tool *tool,
+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 = &session->ordered_events;
-       struct perf_evlist *evlist = session->evlist;
-       struct machines *machines = &session->machines;
 
-       return ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__ROUND);
+       return ordered_events__flush(oe, OE_FLUSH__ROUND);
 }
 
-int perf_session_queue_event(struct perf_session *s, union perf_event *event,
-                            struct perf_tool *tool, struct perf_sample *sample,
-                            u64 file_offset)
+int perf_session__queue_event(struct perf_session *s, union perf_event *event,
+                             struct perf_sample *sample, u64 file_offset)
 {
        struct ordered_events *oe = &s->ordered_events;
-       struct perf_evlist *evlist = s->evlist;
-       struct machines *machines = &s->machines;
 
        u64 timestamp = sample->time;
        struct ordered_event *new;
@@ -543,7 +538,7 @@ int perf_session_queue_event(struct perf_session *s, union perf_event *event,
 
        new = ordered_events__new(oe, timestamp, event);
        if (!new) {
-               ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__HALF);
+               ordered_events__flush(oe, OE_FLUSH__HALF);
                new = ordered_events__new(oe, timestamp, event);
        }
 
@@ -948,9 +943,9 @@ int machines__deliver_event(struct machines *machines,
 
 static s64 perf_session__process_user_event(struct perf_session *session,
                                            union perf_event *event,
-                                           struct perf_tool *tool,
                                            u64 file_offset)
 {
+       struct perf_tool *tool = session->ordered_events.tool;
        int fd = perf_data_file__fd(session->file);
        int err;
 
@@ -988,15 +983,15 @@ static s64 perf_session__process_user_event(struct perf_session *session,
 
 int perf_session__deliver_synth_event(struct perf_session *session,
                                      union perf_event *event,
-                                     struct perf_sample *sample,
-                                     struct perf_tool *tool)
+                                     struct perf_sample *sample)
 {
        struct perf_evlist *evlist = session->evlist;
+       struct perf_tool *tool = session->ordered_events.tool;
 
        events_stats__inc(&evlist->stats, event->header.type);
 
        if (event->header.type >= PERF_RECORD_USER_TYPE_START)
-               return perf_session__process_user_event(session, event, tool, 0);
+               return perf_session__process_user_event(session, event, 0);
 
        return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0);
 }
@@ -1066,11 +1061,10 @@ out_parse_sample:
 }
 
 static s64 perf_session__process_event(struct perf_session *session,
-                                      union perf_event *event,
-                                      struct perf_tool *tool,
-                                      u64 file_offset)
+                                      union perf_event *event, u64 file_offset)
 {
        struct perf_evlist *evlist = session->evlist;
+       struct perf_tool *tool = session->ordered_events.tool;
        struct perf_sample sample;
        int ret;
 
@@ -1083,7 +1077,7 @@ static s64 perf_session__process_event(struct perf_session *session,
        events_stats__inc(&evlist->stats, event->header.type);
 
        if (event->header.type >= PERF_RECORD_USER_TYPE_START)
-               return perf_session__process_user_event(session, event, tool, file_offset);
+               return perf_session__process_user_event(session, event, file_offset);
 
        /*
         * For all kernel events we get the sample data
@@ -1093,8 +1087,7 @@ static s64 perf_session__process_event(struct perf_session *session,
                return ret;
 
        if (tool->ordered_events) {
-               ret = perf_session_queue_event(session, event, tool, &sample,
-                                              file_offset);
+               ret = perf_session__queue_event(session, event, &sample, file_offset);
                if (ret != -ETIME)
                        return ret;
        }
@@ -1173,12 +1166,10 @@ static void perf_tool__warn_about_errors(const struct perf_tool *tool,
 
 volatile int session_done;
 
-static int __perf_session__process_pipe_events(struct perf_session *session,
-                                              struct perf_tool *tool)
+static int __perf_session__process_pipe_events(struct perf_session *session)
 {
        struct ordered_events *oe = &session->ordered_events;
-       struct perf_evlist *evlist = session->evlist;
-       struct machines *machines = &session->machines;
+       struct perf_tool *tool = oe->tool;
        int fd = perf_data_file__fd(session->file);
        union perf_event *event;
        uint32_t size, cur_size = 0;
@@ -1242,7 +1233,7 @@ more:
                }
        }
 
-       if ((skip = perf_session__process_event(session, event, tool, head)) < 0) {
+       if ((skip = perf_session__process_event(session, event, head)) < 0) {
                pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n",
                       head, event->header.size, event->header.type);
                err = -EINVAL;
@@ -1258,7 +1249,7 @@ more:
                goto more;
 done:
        /* do the final flush for ordered samples */
-       err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL);
+       err = ordered_events__flush(oe, OE_FLUSH__FINAL);
 out_err:
        free(buf);
        perf_tool__warn_about_errors(tool, &session->evlist->stats);
@@ -1308,11 +1299,10 @@ fetch_mmaped_event(struct perf_session *session,
 
 static int __perf_session__process_events(struct perf_session *session,
                                          u64 data_offset, u64 data_size,
-                                         u64 file_size, struct perf_tool *tool)
+                                         u64 file_size)
 {
        struct ordered_events *oe = &session->ordered_events;
-       struct perf_evlist *evlist = session->evlist;
-       struct machines *machines = &session->machines;
+       struct perf_tool *tool = oe->tool;
        int fd = perf_data_file__fd(session->file);
        u64 head, page_offset, file_offset, file_pos, size;
        int err, mmap_prot, mmap_flags, map_idx = 0;
@@ -1381,8 +1371,7 @@ more:
        size = event->header.size;
 
        if (size < sizeof(struct perf_event_header) ||
-           (skip = perf_session__process_event(session, event, tool, file_pos))
-                                                                       < 0) {
+           (skip = perf_session__process_event(session, event, file_pos)) < 0) {
                pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n",
                       file_offset + head, event->header.size,
                       event->header.type);
@@ -1406,7 +1395,7 @@ more:
 
 out:
        /* do the final flush for ordered samples */
-       err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL);
+       err = ordered_events__flush(oe, OE_FLUSH__FINAL);
 out_err:
        ui_progress__finish();
        perf_tool__warn_about_errors(tool, &session->evlist->stats);
@@ -1415,8 +1404,7 @@ out_err:
        return err;
 }
 
-int perf_session__process_events(struct perf_session *session,
-                                struct perf_tool *tool)
+int perf_session__process_events(struct perf_session *session)
 {
        u64 size = perf_data_file__size(session->file);
        int err;
@@ -1427,10 +1415,9 @@ int perf_session__process_events(struct perf_session *session,
        if (!perf_data_file__is_pipe(session->file))
                err = __perf_session__process_events(session,
                                                     session->header.data_offset,
-                                                    session->header.data_size,
-                                                    size, tool);
+                                                    session->header.data_size, size);
        else
-               err = __perf_session__process_pipe_events(session, tool);
+               err = __perf_session__process_pipe_events(session);
 
        return err;
 }
index c08fa6b..06e0777 100644 (file)
@@ -48,12 +48,10 @@ int perf_session__peek_event(struct perf_session *session, off_t file_offset,
                             union perf_event **event_ptr,
                             struct perf_sample *sample);
 
-int perf_session__process_events(struct perf_session *session,
-                                struct perf_tool *tool);
+int perf_session__process_events(struct perf_session *session);
 
-int perf_session_queue_event(struct perf_session *s, union perf_event *event,
-                            struct perf_tool *tool, struct perf_sample *sample,
-                            u64 file_offset);
+int perf_session__queue_event(struct perf_session *s, union perf_event *event,
+                             struct perf_sample *sample, u64 file_offset);
 
 void perf_tool__fill_defaults(struct perf_tool *tool);
 
@@ -126,8 +124,7 @@ extern volatile int session_done;
 
 int perf_session__deliver_synth_event(struct perf_session *session,
                                      union perf_event *event,
-                                     struct perf_sample *sample,
-                                     struct perf_tool *tool);
+                                     struct perf_sample *sample);
 
 int perf_event__process_id_index(struct perf_tool *tool,
                                 union perf_event *event,