From 3c9ef1585f155a8c890ddd6cdb0fda3b776b24fe Mon Sep 17 00:00:00 2001 From: Konstantin Stepanyuk Date: Thu, 27 May 2010 02:10:11 +0400 Subject: [PATCH] --- yaml --- r: 199736 b: refs/heads/master c: 75d9ef1707cf3db264a549142a1f54a5380d63dc h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/tools/perf/builtin-record.c | 3 ++- trunk/tools/perf/builtin-sched.c | 1 - trunk/tools/perf/util/event.c | 13 +++++++++---- trunk/tools/perf/util/hist.c | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 934aa63bcf7c..387a161ad07b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2fb750e825b5347de0390315f4284f13709a9856 +refs/heads/master: 75d9ef1707cf3db264a549142a1f54a5380d63dc diff --git a/trunk/tools/perf/builtin-record.c b/trunk/tools/perf/builtin-record.c index dc3435e18bde..9bc89050e6f8 100644 --- a/trunk/tools/perf/builtin-record.c +++ b/trunk/tools/perf/builtin-record.c @@ -503,6 +503,7 @@ static int __cmd_record(int argc, const char **argv) { int i, counter; struct stat st; + pid_t pid = 0; int flags; int err; unsigned long waking = 0; @@ -571,7 +572,7 @@ static int __cmd_record(int argc, const char **argv) if (forks) { child_pid = fork(); - if (child_pid < 0) { + if (pid < 0) { perror("failed to fork"); exit(-1); } diff --git a/trunk/tools/perf/builtin-sched.c b/trunk/tools/perf/builtin-sched.c index 55f3b5dcc731..f67bce2a83b4 100644 --- a/trunk/tools/perf/builtin-sched.c +++ b/trunk/tools/perf/builtin-sched.c @@ -1645,7 +1645,6 @@ static struct perf_event_ops event_ops = { .sample = process_sample_event, .comm = event__process_comm, .lost = event__process_lost, - .fork = event__process_task, .ordered_samples = true, }; diff --git a/trunk/tools/perf/util/event.c b/trunk/tools/perf/util/event.c index 1f08f008d289..50771b5813ee 100644 --- a/trunk/tools/perf/util/event.c +++ b/trunk/tools/perf/util/event.c @@ -370,9 +370,9 @@ static int thread__set_comm_adjust(struct thread *self, const char *comm) int event__process_comm(event_t *self, struct perf_session *session) { - struct thread *thread = perf_session__findnew(session, self->comm.tid); + struct thread *thread = perf_session__findnew(session, self->comm.pid); - dump_printf(": %s:%d\n", self->comm.comm, self->comm.tid); + dump_printf(": %s:%d\n", self->comm.comm, self->comm.pid); if (thread == NULL || thread__set_comm_adjust(thread, self->comm.comm)) { dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n"); @@ -532,11 +532,16 @@ int event__process_mmap(event_t *self, struct perf_session *session) int event__process_task(event_t *self, struct perf_session *session) { - struct thread *thread = perf_session__findnew(session, self->fork.tid); - struct thread *parent = perf_session__findnew(session, self->fork.ptid); + struct thread *thread = perf_session__findnew(session, self->fork.pid); + struct thread *parent = perf_session__findnew(session, self->fork.ppid); dump_printf("(%d:%d):(%d:%d)\n", self->fork.pid, self->fork.tid, self->fork.ppid, self->fork.ptid); + /* + * A thread clone will have the same PID for both parent and child. + */ + if (thread == parent) + return 0; if (self->header.type == PERF_RECORD_EXIT) return 0; diff --git a/trunk/tools/perf/util/hist.c b/trunk/tools/perf/util/hist.c index cbf7eae2ce09..07f89b66b318 100644 --- a/trunk/tools/perf/util/hist.c +++ b/trunk/tools/perf/util/hist.c @@ -965,7 +965,7 @@ static int hist_entry__parse_objdump_line(struct hist_entry *self, FILE *file, * Parse hexa addresses followed by ':' */ line_ip = strtoull(tmp, &tmp2, 16); - if (*tmp2 != ':') + if (*tmp2 != ':' || tmp == tmp2) line_ip = -1; }