From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755547AbbCNHCb (ORCPT ); Sat, 14 Mar 2015 03:02:31 -0400 Received: from terminus.zytor.com ([198.137.202.10]:40144 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755106AbbCNHC1 (ORCPT ); Sat, 14 Mar 2015 03:02:27 -0400 Date: Sat, 14 Mar 2015 00:02:11 -0700 From: tip-bot for Arnaldo Carvalho de Melo Message-ID: Cc: bp@suse.de, tglx@linutronix.de, acme@redhat.com, dzickus@redhat.com, mingo@kernel.org, adrian.hunter@intel.com, namhyung@kernel.org, jolsa@redhat.com, linux-kernel@vger.kernel.org, fweisbec@gmail.com, dsahern@gmail.com, hpa@zytor.com, eranian@google.com Reply-To: mingo@kernel.org, jolsa@redhat.com, namhyung@kernel.org, adrian.hunter@intel.com, linux-kernel@vger.kernel.org, acme@redhat.com, tglx@linutronix.de, bp@suse.de, dzickus@redhat.com, eranian@google.com, fweisbec@gmail.com, dsahern@gmail.com, hpa@zytor.com To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf ordered_events: Adopt queue() method Git-Commit-ID: 4a6b362f36e68618ee4d3cdb361d05a5e80af023 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 4a6b362f36e68618ee4d3cdb361d05a5e80af023 Gitweb: http://git.kernel.org/tip/4a6b362f36e68618ee4d3cdb361d05a5e80af023 Author: Arnaldo Carvalho de Melo AuthorDate: Tue, 3 Mar 2015 13:02:24 -0300 Committer: Arnaldo Carvalho de Melo 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 Cc: Borislav Petkov Cc: David Ahern Cc: Don Zickus Cc: Frederic Weisbecker Cc: Jiri Olsa Cc: Namhyung Kim Cc: Stephane Eranian Link: http://lkml.kernel.org/n/tip-mfihndzaumx44h6y37ng2irb@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo --- 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)