Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 223914
b: refs/heads/master
c: 3dfc2c0
h: refs/heads/master
v: v3
  • Loading branch information
Thomas Gleixner authored and Arnaldo Carvalho de Melo committed Dec 9, 2010
1 parent 1aab708 commit b76d631
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 532e7269c01098f0be6e08113c6947ec6ed11bfa
refs/heads/master: 3dfc2c0aee789843d18f6e4675658e6879465a56
40 changes: 25 additions & 15 deletions trunk/tools/perf/util/session.c
Original file line number Diff line number Diff line change
Expand Up @@ -732,6 +732,22 @@ static int perf_session_deliver_event(struct perf_session *session,
}
}

static int perf_session__preprocess_sample(struct perf_session *session,
event_t *event, struct sample_data *sample)
{
if (event->header.type != PERF_RECORD_SAMPLE ||
!(session->sample_type & PERF_SAMPLE_CALLCHAIN))
return 0;

if (!ip_callchain__valid(sample->callchain, event)) {
pr_debug("call-chain problem with event, skipping it.\n");
++session->hists.stats.nr_invalid_chains;
session->hists.stats.total_invalid_chains += sample->period;
return -EINVAL;
}
return 0;
}

static int perf_session__process_event(struct perf_session *session,
event_t *event,
struct perf_event_ops *ops,
Expand All @@ -750,24 +766,9 @@ static int perf_session__process_event(struct perf_session *session,

if (event->header.type >= PERF_RECORD_USER_TYPE_START)
dump_event(session, event, file_offset, NULL);
else
event__parse_sample(event, session, &sample);

/* These events are processed right away */
switch (event->header.type) {
case PERF_RECORD_SAMPLE:
if (session->sample_type & PERF_SAMPLE_CALLCHAIN) {
if (!ip_callchain__valid(sample.callchain, event)) {
pr_debug("call-chain problem with event, "
"skipping it.\n");
++session->hists.stats.nr_invalid_chains;
session->hists.stats.total_invalid_chains +=
sample.period;
return 0;
}
}
break;

case PERF_RECORD_HEADER_ATTR:
return ops->attr(event, session);
case PERF_RECORD_HEADER_EVENT_TYPE:
Expand All @@ -784,6 +785,15 @@ static int perf_session__process_event(struct perf_session *session,
break;
}

/*
* For all kernel events we get the sample data
*/
event__parse_sample(event, session, &sample);

/* Preprocess sample records - precheck callchains */
if (perf_session__preprocess_sample(session, event, &sample))
return 0;

if (ops->ordered_samples) {
ret = perf_session_queue_event(session, event, &sample,
file_offset);
Expand Down

0 comments on commit b76d631

Please sign in to comment.