perf evlist: Propagate thread maps through the evlist
authorJiri Olsa <jolsa@kernel.org>
Mon, 22 Jun 2015 22:36:07 +0000 (00:36 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Thu, 25 Jun 2015 18:15:51 +0000 (15:15 -0300)
Propagate evlist's thread_map object through all the evsel objects.

It'll be handy to access evsel's threads directly in following patches.
The reason is there's no link from evsel to evlist which hold threads
map now and evlist is not always available.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1435012588-9007-7-git-send-email-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/evlist.c
tools/perf/util/evsel.c
tools/perf/util/evsel.h

index 214affaf1cf6bdc2a1f7ee8011ef6ff9fff20642..6cfdee68e76398cdb2d53c6950d8c34ea969484a 100644 (file)
@@ -1117,7 +1117,9 @@ static int perf_evlist__propagate_maps(struct perf_evlist *evlist,
                if (!evsel->cpus || target->cpu_list)
                        evsel->cpus = cpu_map__get(evlist->cpus);
 
-               if (!evsel->cpus)
+               evsel->threads = thread_map__get(evlist->threads);
+
+               if (!evsel->cpus || !evsel->threads)
                        return -ENOMEM;
        }
 
index 31b0afb6882579053ea68ccfb32f1b61f6f09bf9..1b2f480a3e821a397c225c3ca91943b9b787520f 100644 (file)
@@ -886,6 +886,7 @@ void perf_evsel__exit(struct perf_evsel *evsel)
        perf_evsel__free_id(evsel);
        close_cgroup(evsel->cgrp);
        cpu_map__put(evsel->cpus);
+       thread_map__put(evsel->threads);
        zfree(&evsel->group_name);
        zfree(&evsel->name);
        perf_evsel__object.fini(evsel);
index bb0579e8a10a4556119c5aa313cd22ddacdbc220..9e16a5c4eb01fed26ea5426a0c4474e9179d4c9b 100644 (file)
@@ -82,6 +82,7 @@ struct perf_evsel {
        struct cgroup_sel       *cgrp;
        void                    *handler;
        struct cpu_map          *cpus;
+       struct thread_map       *threads;
        unsigned int            sample_size;
        int                     id_pos;
        int                     is_pos;