Commit fce4d296 authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo

perf evsel: Add own_cpus member

perf_evlist__propagate_maps() cannot easily tell if an evsel has its own
cpu map.  To make that simpler, keep a copy of the PMU cpu map and
adjust the propagation logic accordingly.
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@intel.com>
Link: http://lkml.kernel.org/r/1441699142-18905-8-git-send-email-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent b278c364
...@@ -1111,9 +1111,12 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist) ...@@ -1111,9 +1111,12 @@ static void perf_evlist__propagate_maps(struct perf_evlist *evlist)
* We already have cpus for evsel (via PMU sysfs) so * We already have cpus for evsel (via PMU sysfs) so
* keep it, if there's no target cpu list defined. * keep it, if there's no target cpu list defined.
*/ */
if (!evsel->cpus || evlist->has_user_cpus) { if (!evsel->own_cpus || evlist->has_user_cpus) {
cpu_map__put(evsel->cpus); cpu_map__put(evsel->cpus);
evsel->cpus = cpu_map__get(evlist->cpus); evsel->cpus = cpu_map__get(evlist->cpus);
} else if (evsel->cpus != evsel->own_cpus) {
cpu_map__put(evsel->cpus);
evsel->cpus = cpu_map__get(evsel->own_cpus);
} }
thread_map__put(evsel->threads); thread_map__put(evsel->threads);
......
...@@ -1033,6 +1033,7 @@ void perf_evsel__exit(struct perf_evsel *evsel) ...@@ -1033,6 +1033,7 @@ void perf_evsel__exit(struct perf_evsel *evsel)
perf_evsel__free_config_terms(evsel); perf_evsel__free_config_terms(evsel);
close_cgroup(evsel->cgrp); close_cgroup(evsel->cgrp);
cpu_map__put(evsel->cpus); cpu_map__put(evsel->cpus);
cpu_map__put(evsel->own_cpus);
thread_map__put(evsel->threads); thread_map__put(evsel->threads);
zfree(&evsel->group_name); zfree(&evsel->group_name);
zfree(&evsel->name); zfree(&evsel->name);
......
...@@ -98,6 +98,7 @@ struct perf_evsel { ...@@ -98,6 +98,7 @@ struct perf_evsel {
struct cgroup_sel *cgrp; struct cgroup_sel *cgrp;
void *handler; void *handler;
struct cpu_map *cpus; struct cpu_map *cpus;
struct cpu_map *own_cpus;
struct thread_map *threads; struct thread_map *threads;
unsigned int sample_size; unsigned int sample_size;
int id_pos; int id_pos;
......
...@@ -287,8 +287,8 @@ __add_event(struct list_head *list, int *idx, ...@@ -287,8 +287,8 @@ __add_event(struct list_head *list, int *idx,
if (!evsel) if (!evsel)
return NULL; return NULL;
if (cpus) evsel->cpus = cpu_map__get(cpus);
evsel->cpus = cpu_map__get(cpus); evsel->own_cpus = cpu_map__get(cpus);
if (name) if (name)
evsel->name = strdup(name); evsel->name = strdup(name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment