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

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

perf evlist: Make set_maps() more resilient



Make perf_evlist__set_maps() more resilient by allowing for the
possibility that one or another of the maps isn't being changed and
therefore should not be "put".

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-9-git-send-email-adrian.hunter@intel.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent fce4d296
Loading
Loading
Loading
Loading
+15 −4
Original line number Original line Diff line number Diff line
@@ -1155,11 +1155,22 @@ out_delete_threads:
void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
void perf_evlist__set_maps(struct perf_evlist *evlist, struct cpu_map *cpus,
			   struct thread_map *threads)
			   struct thread_map *threads)
{
{
	/*
	 * Allow for the possibility that one or another of the maps isn't being
	 * changed i.e. don't put it.  Note we are assuming the maps that are
	 * being applied are brand new and evlist is taking ownership of the
	 * original reference count of 1.  If that is not the case it is up to
	 * the caller to increase the reference count.
	 */
	if (cpus != evlist->cpus) {
		cpu_map__put(evlist->cpus);
		cpu_map__put(evlist->cpus);
		evlist->cpus = cpus;
		evlist->cpus = cpus;
	}


	if (threads != evlist->threads) {
		thread_map__put(evlist->threads);
		thread_map__put(evlist->threads);
		evlist->threads = threads;
		evlist->threads = threads;
	}


	perf_evlist__propagate_maps(evlist);
	perf_evlist__propagate_maps(evlist);
}
}