From: tip-bot for Arnaldo Carvalho de Melo <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, dsahern@gmail.com,
eranian@google.com, tglx@linutronix.de, mingo@kernel.org,
bp@suse.de, acme@redhat.com, jolsa@redhat.com,
fweisbec@gmail.com, namhyung@kernel.org, dzickus@redhat.com,
hpa@zytor.com, adrian.hunter@intel.com
Subject: [tip:perf/core] perf ordered_events: Untangle from perf_session
Date: Sat, 14 Mar 2015 00:00:42 -0700 [thread overview]
Message-ID: <tip-nedqe7cmii5w82etfi36urfz@git.kernel.org> (raw)
Commit-ID: fa713a4eb9cebe5dec71b1bd11429603e17d841d
Gitweb: http://git.kernel.org/tip/fa713a4eb9cebe5dec71b1bd11429603e17d841d
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
AuthorDate: Tue, 3 Mar 2015 11:48:12 -0300
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Wed, 11 Mar 2015 10:16:50 -0300
perf ordered_events: Untangle from perf_session
For use by tools that are not perf.data based, as maybe 'perf trace' in
live mode.
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-nedqe7cmii5w82etfi36urfz@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/ordered-events.c | 17 +++++++++--------
tools/perf/util/ordered-events.h | 8 +++++---
tools/perf/util/session.c | 37 ++++++++++++++++++++++++++-----------
tools/perf/util/session.h | 3 ++-
4 files changed, 42 insertions(+), 23 deletions(-)
diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c
index 077ddd2..e6ab630 100644
--- a/tools/perf/util/ordered-events.c
+++ b/tools/perf/util/ordered-events.c
@@ -153,10 +153,11 @@ void ordered_events__delete(struct ordered_events *oe, struct ordered_event *eve
free_dup_event(oe, event->event);
}
-static int __ordered_events__flush(struct perf_session *s,
+static int __ordered_events__flush(struct ordered_events *oe,
+ struct machines *machines,
+ struct perf_evlist *evlist,
struct perf_tool *tool)
{
- struct ordered_events *oe = &s->ordered_events;
struct list_head *head = &oe->events;
struct ordered_event *tmp, *iter;
struct perf_sample sample;
@@ -179,12 +180,12 @@ static int __ordered_events__flush(struct perf_session *s,
if (iter->timestamp > limit)
break;
- ret = perf_evlist__parse_sample(s->evlist, iter->event, &sample);
+ ret = perf_evlist__parse_sample(evlist, iter->event, &sample);
if (ret)
pr_err("Can't parse sample, err = %d\n", ret);
else {
- ret = perf_session__deliver_event(s, iter->event, &sample, tool,
- iter->file_offset);
+ ret = machines__deliver_event(machines, evlist, iter->event,
+ &sample, tool, iter->file_offset);
if (ret)
return ret;
}
@@ -204,10 +205,10 @@ static int __ordered_events__flush(struct perf_session *s,
return 0;
}
-int ordered_events__flush(struct perf_session *s, struct perf_tool *tool,
+int ordered_events__flush(struct ordered_events *oe, struct machines *machines,
+ struct perf_evlist *evlist, struct perf_tool *tool,
enum oe_flush how)
{
- struct ordered_events *oe = &s->ordered_events;
static const char * const str[] = {
"NONE",
"FINAL",
@@ -251,7 +252,7 @@ int ordered_events__flush(struct perf_session *s, struct perf_tool *tool,
str[how], oe->nr_events);
pr_oe_time(oe->max_timestamp, "max_timestamp\n");
- err = __ordered_events__flush(s, tool);
+ err = __ordered_events__flush(oe, machines, evlist, tool);
if (!err) {
if (how == OE_FLUSH__ROUND)
diff --git a/tools/perf/util/ordered-events.h b/tools/perf/util/ordered-events.h
index 7b8f9b0..e09f243 100644
--- a/tools/perf/util/ordered-events.h
+++ b/tools/perf/util/ordered-events.h
@@ -2,9 +2,10 @@
#define __ORDERED_EVENTS_H
#include <linux/types.h>
-#include "tool.h"
-struct perf_session;
+struct perf_tool;
+struct perf_evlist;
+struct machines;
struct ordered_event {
u64 timestamp;
@@ -40,7 +41,8 @@ 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 perf_session *s, struct perf_tool *tool,
+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);
void ordered_events__free(struct ordered_events *oe);
diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index ed4e5cf..23be146 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -512,7 +512,11 @@ static int process_finished_round(struct perf_tool *tool,
union perf_event *event __maybe_unused,
struct perf_session *session)
{
- return ordered_events__flush(session, tool, OE_FLUSH__ROUND);
+ 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);
}
int perf_session_queue_event(struct perf_session *s, union perf_event *event,
@@ -520,6 +524,9 @@ int perf_session_queue_event(struct perf_session *s, union perf_event *event,
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;
@@ -536,7 +543,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(s, tool, OE_FLUSH__HALF);
+ ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__HALF);
new = ordered_events__new(oe, timestamp, event);
}
@@ -886,12 +893,12 @@ static int
&sample->read.one, machine);
}
-int perf_session__deliver_event(struct perf_session *session,
+int machines__deliver_event(struct machines *machines,
+ struct perf_evlist *evlist,
union perf_event *event,
struct perf_sample *sample,
struct perf_tool *tool, u64 file_offset)
{
- struct perf_evlist *evlist = session->evlist;
struct perf_evsel *evsel;
struct machine *machine;
@@ -899,7 +906,7 @@ int perf_session__deliver_event(struct perf_session *session,
evsel = perf_evlist__id2evsel(evlist, sample->id);
- machine = machines__find_for_cpumode(&session->machines, event, sample);
+ machine = machines__find_for_cpumode(machines, event, sample);
switch (event->header.type) {
case PERF_RECORD_SAMPLE:
@@ -984,12 +991,14 @@ int perf_session__deliver_synth_event(struct perf_session *session,
struct perf_sample *sample,
struct perf_tool *tool)
{
- events_stats__inc(&session->evlist->stats, event->header.type);
+ struct perf_evlist *evlist = session->evlist;
+
+ 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__deliver_event(session, event, sample, tool, 0);
+ return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0);
}
static void event_swap(union perf_event *event, bool sample_id_all)
@@ -1090,8 +1099,8 @@ static s64 perf_session__process_event(struct perf_session *session,
return ret;
}
- return perf_session__deliver_event(session, event, &sample, tool,
- file_offset);
+ return machines__deliver_event(&session->machines, evlist, event,
+ &sample, tool, file_offset);
}
void perf_event_header__bswap(struct perf_event_header *hdr)
@@ -1167,6 +1176,9 @@ volatile int session_done;
static int __perf_session__process_pipe_events(struct perf_session *session,
struct perf_tool *tool)
{
+ struct ordered_events *oe = &session->ordered_events;
+ struct perf_evlist *evlist = session->evlist;
+ struct machines *machines = &session->machines;
int fd = perf_data_file__fd(session->file);
union perf_event *event;
uint32_t size, cur_size = 0;
@@ -1246,7 +1258,7 @@ more:
goto more;
done:
/* do the final flush for ordered samples */
- err = ordered_events__flush(session, tool, OE_FLUSH__FINAL);
+ err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL);
out_err:
free(buf);
perf_tool__warn_about_errors(tool, &session->evlist->stats);
@@ -1298,6 +1310,9 @@ static int __perf_session__process_events(struct perf_session *session,
u64 data_offset, u64 data_size,
u64 file_size, struct perf_tool *tool)
{
+ struct ordered_events *oe = &session->ordered_events;
+ struct perf_evlist *evlist = session->evlist;
+ struct machines *machines = &session->machines;
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;
@@ -1391,7 +1406,7 @@ more:
out:
/* do the final flush for ordered samples */
- err = ordered_events__flush(session, tool, OE_FLUSH__FINAL);
+ err = ordered_events__flush(oe, machines, evlist, tool, OE_FLUSH__FINAL);
out_err:
ui_progress__finish();
perf_tool__warn_about_errors(tool, &session->evlist->stats);
diff --git a/tools/perf/util/session.h b/tools/perf/util/session.h
index fe859f3..c08fa6b 100644
--- a/tools/perf/util/session.h
+++ b/tools/perf/util/session.h
@@ -57,7 +57,8 @@ int perf_session_queue_event(struct perf_session *s, union perf_event *event,
void perf_tool__fill_defaults(struct perf_tool *tool);
-int perf_session__deliver_event(struct perf_session *session,
+int machines__deliver_event(struct machines *machines,
+ struct perf_evlist *evlist,
union perf_event *event,
struct perf_sample *sample,
struct perf_tool *tool, u64 file_offset);
reply other threads:[~2015-03-14 7:01 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-nedqe7cmii5w82etfi36urfz@git.kernel.org \
--to=tipbot@zytor.com \
--cc=acme@redhat.com \
--cc=adrian.hunter@intel.com \
--cc=bp@suse.de \
--cc=dsahern@gmail.com \
--cc=dzickus@redhat.com \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=hpa@zytor.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.