Commit-ID: 4a6b362f36e68618ee4d3cdb361d05a5e80af023 Gitweb: http://git.kernel.org/tip/4a6b362f36e68618ee4d3cdb361d05a5e80af023 Author: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> AuthorDate: Tue, 3 Mar 2015 13:02:24 -0300 Committer: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> CommitDate: Thu, 12 Mar 2015 12:39:51 -0300 perf ordered_events: Adopt queue() method >From perf_session, will be used in 'trace'. Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx> Cc: Borislav Petkov <bp@xxxxxxx> Cc: David Ahern <dsahern@xxxxxxxxx> Cc: Don Zickus <dzickus@xxxxxxxxxx> Cc: Frederic Weisbecker <fweisbec@xxxxxxxxx> Cc: Jiri Olsa <jolsa@xxxxxxxxxx> Cc: Namhyung Kim <namhyung@xxxxxxxxxx> Cc: Stephane Eranian <eranian@xxxxxxxxxx> Link: http://lkml.kernel.org/n/tip-mfihndzaumx44h6y37ng2irb@xxxxxxxxxxxxxx Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> --- tools/perf/util/ordered-events.c | 34 ++++++++++++++++++++++++++++++++-- tools/perf/util/ordered-events.h | 4 ++-- tools/perf/util/session.c | 28 +--------------------------- 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c index 0d8cea9..6002fa3 100644 --- a/tools/perf/util/ordered-events.c +++ b/tools/perf/util/ordered-events.c @@ -131,8 +131,8 @@ static struct ordered_event *alloc_event(struct ordered_events *oe, return new; } -struct ordered_event * -ordered_events__new(struct ordered_events *oe, u64 timestamp, +static struct ordered_event * +ordered_events__new_event(struct ordered_events *oe, u64 timestamp, union perf_event *event) { struct ordered_event *new; @@ -153,6 +153,36 @@ void ordered_events__delete(struct ordered_events *oe, struct ordered_event *eve free_dup_event(oe, event->event); } +int ordered_events__queue(struct ordered_events *oe, union perf_event *event, + struct perf_sample *sample, u64 file_offset) +{ + u64 timestamp = sample->time; + struct ordered_event *oevent; + + if (!timestamp || timestamp == ~0ULL) + return -ETIME; + + if (timestamp < oe->last_flush) { + pr_oe_time(timestamp, "out of order event\n"); + pr_oe_time(oe->last_flush, "last flush, last_flush_type %d\n", + oe->last_flush_type); + + oe->evlist->stats.nr_unordered_events++; + } + + oevent = ordered_events__new_event(oe, timestamp, event); + if (!oevent) { + ordered_events__flush(oe, OE_FLUSH__HALF); + oevent = ordered_events__new_event(oe, timestamp, event); + } + + if (!oevent) + return -ENOMEM; + + oevent->file_offset = file_offset; + return 0; +} + static int __ordered_events__flush(struct ordered_events *oe) { struct list_head *head = &oe->events; diff --git a/tools/perf/util/ordered-events.h b/tools/perf/util/ordered-events.h index c6cf0ba..173e13f 100644 --- a/tools/perf/util/ordered-events.h +++ b/tools/perf/util/ordered-events.h @@ -49,8 +49,8 @@ struct ordered_events { bool copy_on_queue; }; -struct ordered_event *ordered_events__new(struct ordered_events *oe, u64 timestamp, - union perf_event *event); +int ordered_events__queue(struct ordered_events *oe, union perf_event *event, + struct perf_sample *sample, u64 file_offset); void ordered_events__delete(struct ordered_events *oe, struct ordered_event *event); int ordered_events__flush(struct ordered_events *oe, enum oe_flush how); void ordered_events__init(struct ordered_events *oe, struct machines *machines, diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 703a370..adf0740 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -541,33 +541,7 @@ static int process_finished_round(struct perf_tool *tool __maybe_unused, 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; - - u64 timestamp = sample->time; - struct ordered_event *new; - - if (!timestamp || timestamp == ~0ULL) - return -ETIME; - - if (timestamp < oe->last_flush) { - pr_oe_time(timestamp, "out of order event\n"); - pr_oe_time(oe->last_flush, "last flush, last_flush_type %d\n", - oe->last_flush_type); - - s->evlist->stats.nr_unordered_events++; - } - - new = ordered_events__new(oe, timestamp, event); - if (!new) { - ordered_events__flush(oe, OE_FLUSH__HALF); - new = ordered_events__new(oe, timestamp, event); - } - - if (!new) - return -ENOMEM; - - new->file_offset = file_offset; - return 0; + return ordered_events__queue(&s->ordered_events, event, sample, file_offset); } static void callchain__lbr_callstack_printf(struct perf_sample *sample) -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |