perf tools: Add pid to struct thread
authorAdrian Hunter <adrian.hunter@intel.com>
Mon, 26 Aug 2013 13:00:19 +0000 (16:00 +0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 27 Aug 2013 14:05:53 +0000 (11:05 -0300)
Record pid on struct thread.  The member is named 'pid_' to avoid
confusion with the 'tid' member which was previously named 'pid'.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: David Ahern <dsahern@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1377522030-27870-3-git-send-email-adrian.hunter@intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/machine.c
tools/perf/util/thread.c
tools/perf/util/thread.h

index 574feb7003ab54f39b42778b44c894b48f607819..59486c18062640eac9942920ffa5f9bb1815596b 100644 (file)
@@ -253,7 +253,8 @@ void machines__set_id_hdr_size(struct machines *machines, u16 id_hdr_size)
        return;
 }
 
-static struct thread *__machine__findnew_thread(struct machine *machine, pid_t tid,
+static struct thread *__machine__findnew_thread(struct machine *machine,
+                                               pid_t pid, pid_t tid,
                                                bool create)
 {
        struct rb_node **p = &machine->threads.rb_node;
@@ -265,8 +266,11 @@ static struct thread *__machine__findnew_thread(struct machine *machine, pid_t t
         * so most of the time we dont have to look up
         * the full rbtree:
         */
-       if (machine->last_match && machine->last_match->tid == tid)
+       if (machine->last_match && machine->last_match->tid == tid) {
+               if (pid && pid != machine->last_match->pid_)
+                       machine->last_match->pid_ = pid;
                return machine->last_match;
+       }
 
        while (*p != NULL) {
                parent = *p;
@@ -274,6 +278,8 @@ static struct thread *__machine__findnew_thread(struct machine *machine, pid_t t
 
                if (th->tid == tid) {
                        machine->last_match = th;
+                       if (pid && pid != th->pid_)
+                               th->pid_ = pid;
                        return th;
                }
 
@@ -286,7 +292,7 @@ static struct thread *__machine__findnew_thread(struct machine *machine, pid_t t
        if (!create)
                return NULL;
 
-       th = thread__new(tid);
+       th = thread__new(pid, tid);
        if (th != NULL) {
                rb_link_node(&th->rb_node, parent, p);
                rb_insert_color(&th->rb_node, &machine->threads);
@@ -298,12 +304,12 @@ static struct thread *__machine__findnew_thread(struct machine *machine, pid_t t
 
 struct thread *machine__findnew_thread(struct machine *machine, pid_t tid)
 {
-       return __machine__findnew_thread(machine, tid, true);
+       return __machine__findnew_thread(machine, 0, tid, true);
 }
 
 struct thread *machine__find_thread(struct machine *machine, pid_t tid)
 {
-       return __machine__findnew_thread(machine, tid, false);
+       return __machine__findnew_thread(machine, 0, tid, false);
 }
 
 int machine__process_comm_event(struct machine *machine, union perf_event *event)
index 6feeb88eb5b0165f86c535601f0250553df4aaba..e3d4a550a703211d8fabeb9807c28a86466fe6d8 100644 (file)
@@ -7,12 +7,13 @@
 #include "util.h"
 #include "debug.h"
 
-struct thread *thread__new(pid_t tid)
+struct thread *thread__new(pid_t pid, pid_t tid)
 {
        struct thread *self = zalloc(sizeof(*self));
 
        if (self != NULL) {
                map_groups__init(&self->mg);
+               self->pid_ = pid;
                self->tid = tid;
                self->ppid = -1;
                self->comm = malloc(32);
index 32d060164b52564d144e2e58ebd1260a446559fc..4ebbb40d46d43e13cc78010601611eb30e5c7498 100644 (file)
@@ -12,6 +12,7 @@ struct thread {
                struct list_head node;
        };
        struct map_groups       mg;
+       pid_t                   pid_; /* Not all tools update this */
        pid_t                   tid;
        pid_t                   ppid;
        char                    shortname[3];
@@ -25,7 +26,7 @@ struct thread {
 
 struct machine;
 
-struct thread *thread__new(pid_t tid);
+struct thread *thread__new(pid_t pid, pid_t tid);
 void thread__delete(struct thread *self);
 static inline void thread__exited(struct thread *thread)
 {