Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent b278c364
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -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);
+1 −0
Original line number Original line Diff line number Diff line
@@ -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);
+1 −0
Original line number Original line Diff line number Diff line
@@ -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;
+2 −2
Original line number Original line Diff line number Diff line
@@ -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);