perf evlist: Move destruction of maps to evlist destructor
Instead of requiring tools to do an extra destructor call just before calling perf_evlist__delete. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-0jd2ptzyikxb5wp7inzz2ah2@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
					parent
					
						
							
								3e2be2da8f
							
						
					
				
			
			
				commit
				
					
						03ad9747c5
					
				
			
		
					 15 changed files with 32 additions and 58 deletions
				
			
		| 
						 | 
					@ -1556,10 +1556,8 @@ out:
 | 
				
			||||||
	if (kvm->session)
 | 
						if (kvm->session)
 | 
				
			||||||
		perf_session__delete(kvm->session);
 | 
							perf_session__delete(kvm->session);
 | 
				
			||||||
	kvm->session = NULL;
 | 
						kvm->session = NULL;
 | 
				
			||||||
	if (kvm->evlist) {
 | 
						if (kvm->evlist)
 | 
				
			||||||
		perf_evlist__delete_maps(kvm->evlist);
 | 
					 | 
				
			||||||
		perf_evlist__delete(kvm->evlist);
 | 
							perf_evlist__delete(kvm->evlist);
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -964,15 +964,13 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (record_opts__config(&rec->opts)) {
 | 
						if (record_opts__config(&rec->opts)) {
 | 
				
			||||||
		err = -EINVAL;
 | 
							err = -EINVAL;
 | 
				
			||||||
		goto out_free_fd;
 | 
							goto out_symbol_exit;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = __cmd_record(&record, argc, argv);
 | 
						err = __cmd_record(&record, argc, argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	perf_evlist__munmap(rec->evlist);
 | 
						perf_evlist__munmap(rec->evlist);
 | 
				
			||||||
	perf_evlist__close(rec->evlist);
 | 
						perf_evlist__close(rec->evlist);
 | 
				
			||||||
out_free_fd:
 | 
					 | 
				
			||||||
	perf_evlist__delete_maps(rec->evlist);
 | 
					 | 
				
			||||||
out_symbol_exit:
 | 
					out_symbol_exit:
 | 
				
			||||||
	symbol__exit();
 | 
						symbol__exit();
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1782,14 +1782,14 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused)
 | 
				
			||||||
	if (interval && interval < 100) {
 | 
						if (interval && interval < 100) {
 | 
				
			||||||
		pr_err("print interval must be >= 100ms\n");
 | 
							pr_err("print interval must be >= 100ms\n");
 | 
				
			||||||
		parse_options_usage(stat_usage, options, "I", 1);
 | 
							parse_options_usage(stat_usage, options, "I", 1);
 | 
				
			||||||
		goto out_free_maps;
 | 
							goto out;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (perf_evlist__alloc_stats(evsel_list, interval))
 | 
						if (perf_evlist__alloc_stats(evsel_list, interval))
 | 
				
			||||||
		goto out_free_maps;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (perf_stat_init_aggr_mode())
 | 
						if (perf_stat_init_aggr_mode())
 | 
				
			||||||
		goto out_free_maps;
 | 
							goto out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * We dont want to block the signals - that would cause
 | 
						 * We dont want to block the signals - that would cause
 | 
				
			||||||
| 
						 | 
					@ -1821,8 +1821,6 @@ int cmd_stat(int argc, const char **argv, const char *prefix __maybe_unused)
 | 
				
			||||||
		print_stat(argc, argv);
 | 
							print_stat(argc, argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	perf_evlist__free_stats(evsel_list);
 | 
						perf_evlist__free_stats(evsel_list);
 | 
				
			||||||
out_free_maps:
 | 
					 | 
				
			||||||
	perf_evlist__delete_maps(evsel_list);
 | 
					 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
	perf_evlist__delete(evsel_list);
 | 
						perf_evlist__delete(evsel_list);
 | 
				
			||||||
	return status;
 | 
						return status;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1171,7 +1171,7 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
 | 
				
			||||||
	if (!top.evlist->nr_entries &&
 | 
						if (!top.evlist->nr_entries &&
 | 
				
			||||||
	    perf_evlist__add_default(top.evlist) < 0) {
 | 
						    perf_evlist__add_default(top.evlist) < 0) {
 | 
				
			||||||
		ui__error("Not enough memory for event selector list\n");
 | 
							ui__error("Not enough memory for event selector list\n");
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	symbol_conf.nr_events = top.evlist->nr_entries;
 | 
						symbol_conf.nr_events = top.evlist->nr_entries;
 | 
				
			||||||
| 
						 | 
					@ -1181,7 +1181,7 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (record_opts__config(opts)) {
 | 
						if (record_opts__config(opts)) {
 | 
				
			||||||
		status = -EINVAL;
 | 
							status = -EINVAL;
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	top.sym_evsel = perf_evlist__first(top.evlist);
 | 
						top.sym_evsel = perf_evlist__first(top.evlist);
 | 
				
			||||||
| 
						 | 
					@ -1206,8 +1206,6 @@ int cmd_top(int argc, const char **argv, const char *prefix __maybe_unused)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	status = __cmd_top(&top);
 | 
						status = __cmd_top(&top);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
out_delete_maps:
 | 
					 | 
				
			||||||
	perf_evlist__delete_maps(top.evlist);
 | 
					 | 
				
			||||||
out_delete_evlist:
 | 
					out_delete_evlist:
 | 
				
			||||||
	perf_evlist__delete(top.evlist);
 | 
						perf_evlist__delete(top.evlist);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1885,7 +1885,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
 | 
				
			||||||
	err = trace__symbols_init(trace, evlist);
 | 
						err = trace__symbols_init(trace, evlist);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
		fprintf(trace->output, "Problems initializing symbol libraries!\n");
 | 
							fprintf(trace->output, "Problems initializing symbol libraries!\n");
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	perf_evlist__config(evlist, &trace->opts);
 | 
						perf_evlist__config(evlist, &trace->opts);
 | 
				
			||||||
| 
						 | 
					@ -1898,7 +1898,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
 | 
				
			||||||
						    argv, false, NULL);
 | 
											    argv, false, NULL);
 | 
				
			||||||
		if (err < 0) {
 | 
							if (err < 0) {
 | 
				
			||||||
			fprintf(trace->output, "Couldn't run the workload!\n");
 | 
								fprintf(trace->output, "Couldn't run the workload!\n");
 | 
				
			||||||
			goto out_delete_maps;
 | 
								goto out_delete_evlist;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1996,8 +1996,6 @@ out_disable:
 | 
				
			||||||
	perf_evlist__munmap(evlist);
 | 
						perf_evlist__munmap(evlist);
 | 
				
			||||||
out_close_evlist:
 | 
					out_close_evlist:
 | 
				
			||||||
	perf_evlist__close(evlist);
 | 
						perf_evlist__close(evlist);
 | 
				
			||||||
out_delete_maps:
 | 
					 | 
				
			||||||
	perf_evlist__delete_maps(evlist);
 | 
					 | 
				
			||||||
out_delete_evlist:
 | 
					out_delete_evlist:
 | 
				
			||||||
	perf_evlist__delete(evlist);
 | 
						perf_evlist__delete(evlist);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -543,11 +543,10 @@ out_err:
 | 
				
			||||||
		perf_evlist__munmap(evlist);
 | 
							perf_evlist__munmap(evlist);
 | 
				
			||||||
		perf_evlist__close(evlist);
 | 
							perf_evlist__close(evlist);
 | 
				
			||||||
		perf_evlist__delete(evlist);
 | 
							perf_evlist__delete(evlist);
 | 
				
			||||||
	}
 | 
						} else {
 | 
				
			||||||
	if (cpus)
 | 
					 | 
				
			||||||
		cpu_map__delete(cpus);
 | 
							cpu_map__delete(cpus);
 | 
				
			||||||
	if (threads)
 | 
					 | 
				
			||||||
		thread_map__delete(threads);
 | 
							thread_map__delete(threads);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	machines__destroy_kernel_maps(&machines);
 | 
						machines__destroy_kernel_maps(&machines);
 | 
				
			||||||
	machine__delete_threads(machine);
 | 
						machine__delete_threads(machine);
 | 
				
			||||||
	machines__exit(&machines);
 | 
						machines__exit(&machines);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -145,11 +145,10 @@ out_err:
 | 
				
			||||||
		perf_evlist__munmap(evlist);
 | 
							perf_evlist__munmap(evlist);
 | 
				
			||||||
		perf_evlist__close(evlist);
 | 
							perf_evlist__close(evlist);
 | 
				
			||||||
		perf_evlist__delete(evlist);
 | 
							perf_evlist__delete(evlist);
 | 
				
			||||||
	}
 | 
						} else {
 | 
				
			||||||
	if (cpus)
 | 
					 | 
				
			||||||
		cpu_map__delete(cpus);
 | 
							cpu_map__delete(cpus);
 | 
				
			||||||
	if (threads)
 | 
					 | 
				
			||||||
		thread_map__delete(threads);
 | 
							thread_map__delete(threads);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -143,6 +143,8 @@ out_close_fd:
 | 
				
			||||||
		perf_evsel__close_fd(evsels[i], 1, threads->nr);
 | 
							perf_evsel__close_fd(evsels[i], 1, threads->nr);
 | 
				
			||||||
out_free_evlist:
 | 
					out_free_evlist:
 | 
				
			||||||
	perf_evlist__delete(evlist);
 | 
						perf_evlist__delete(evlist);
 | 
				
			||||||
 | 
						cpus	= NULL;
 | 
				
			||||||
 | 
						threads = NULL;
 | 
				
			||||||
out_free_cpus:
 | 
					out_free_cpus:
 | 
				
			||||||
	cpu_map__delete(cpus);
 | 
						cpu_map__delete(cpus);
 | 
				
			||||||
out_free_threads:
 | 
					out_free_threads:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,7 +48,7 @@ int test__syscall_open_tp_fields(void)
 | 
				
			||||||
	err = perf_evlist__open(evlist);
 | 
						err = perf_evlist__open(evlist);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
		pr_debug("perf_evlist__open: %s\n", strerror(errno));
 | 
							pr_debug("perf_evlist__open: %s\n", strerror(errno));
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = perf_evlist__mmap(evlist, UINT_MAX, false);
 | 
						err = perf_evlist__mmap(evlist, UINT_MAX, false);
 | 
				
			||||||
| 
						 | 
					@ -114,8 +114,6 @@ out_munmap:
 | 
				
			||||||
	perf_evlist__munmap(evlist);
 | 
						perf_evlist__munmap(evlist);
 | 
				
			||||||
out_close_evlist:
 | 
					out_close_evlist:
 | 
				
			||||||
	perf_evlist__close(evlist);
 | 
						perf_evlist__close(evlist);
 | 
				
			||||||
out_delete_maps:
 | 
					 | 
				
			||||||
	perf_evlist__delete_maps(evlist);
 | 
					 | 
				
			||||||
out_delete_evlist:
 | 
					out_delete_evlist:
 | 
				
			||||||
	perf_evlist__delete(evlist);
 | 
						perf_evlist__delete(evlist);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -86,7 +86,7 @@ int test__PERF_RECORD(void)
 | 
				
			||||||
	err = perf_evlist__prepare_workload(evlist, &opts.target, argv, false, NULL);
 | 
						err = perf_evlist__prepare_workload(evlist, &opts.target, argv, false, NULL);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
		pr_debug("Couldn't run the workload!\n");
 | 
							pr_debug("Couldn't run the workload!\n");
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					@ -101,7 +101,7 @@ int test__PERF_RECORD(void)
 | 
				
			||||||
	err = sched__get_first_possible_cpu(evlist->workload.pid, &cpu_mask);
 | 
						err = sched__get_first_possible_cpu(evlist->workload.pid, &cpu_mask);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
		pr_debug("sched__get_first_possible_cpu: %s\n", strerror(errno));
 | 
							pr_debug("sched__get_first_possible_cpu: %s\n", strerror(errno));
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cpu = err;
 | 
						cpu = err;
 | 
				
			||||||
| 
						 | 
					@ -111,7 +111,7 @@ int test__PERF_RECORD(void)
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (sched_setaffinity(evlist->workload.pid, cpu_mask_size, &cpu_mask) < 0) {
 | 
						if (sched_setaffinity(evlist->workload.pid, cpu_mask_size, &cpu_mask) < 0) {
 | 
				
			||||||
		pr_debug("sched_setaffinity: %s\n", strerror(errno));
 | 
							pr_debug("sched_setaffinity: %s\n", strerror(errno));
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					@ -121,7 +121,7 @@ int test__PERF_RECORD(void)
 | 
				
			||||||
	err = perf_evlist__open(evlist);
 | 
						err = perf_evlist__open(evlist);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
		pr_debug("perf_evlist__open: %s\n", strerror(errno));
 | 
							pr_debug("perf_evlist__open: %s\n", strerror(errno));
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					@ -306,8 +306,6 @@ out_err:
 | 
				
			||||||
	perf_evlist__munmap(evlist);
 | 
						perf_evlist__munmap(evlist);
 | 
				
			||||||
out_close_evlist:
 | 
					out_close_evlist:
 | 
				
			||||||
	perf_evlist__close(evlist);
 | 
						perf_evlist__close(evlist);
 | 
				
			||||||
out_delete_maps:
 | 
					 | 
				
			||||||
	perf_evlist__delete_maps(evlist);
 | 
					 | 
				
			||||||
out_delete_evlist:
 | 
					out_delete_evlist:
 | 
				
			||||||
	perf_evlist__delete(evlist);
 | 
						perf_evlist__delete(evlist);
 | 
				
			||||||
out:
 | 
					out:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -170,10 +170,6 @@ out_err:
 | 
				
			||||||
		perf_evlist__close(evlist);
 | 
							perf_evlist__close(evlist);
 | 
				
			||||||
		perf_evlist__delete(evlist);
 | 
							perf_evlist__delete(evlist);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (cpus)
 | 
					 | 
				
			||||||
		cpu_map__delete(cpus);
 | 
					 | 
				
			||||||
	if (threads)
 | 
					 | 
				
			||||||
		thread_map__delete(threads);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 | 
				
			||||||
	evsel = perf_evsel__new(&attr);
 | 
						evsel = perf_evsel__new(&attr);
 | 
				
			||||||
	if (evsel == NULL) {
 | 
						if (evsel == NULL) {
 | 
				
			||||||
		pr_debug("perf_evsel__new\n");
 | 
							pr_debug("perf_evsel__new\n");
 | 
				
			||||||
		goto out_free_evlist;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	perf_evlist__add(evlist, evsel);
 | 
						perf_evlist__add(evlist, evsel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,7 +54,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 | 
				
			||||||
	if (!evlist->cpus || !evlist->threads) {
 | 
						if (!evlist->cpus || !evlist->threads) {
 | 
				
			||||||
		err = -ENOMEM;
 | 
							err = -ENOMEM;
 | 
				
			||||||
		pr_debug("Not enough memory to create thread/cpu maps\n");
 | 
							pr_debug("Not enough memory to create thread/cpu maps\n");
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (perf_evlist__open(evlist)) {
 | 
						if (perf_evlist__open(evlist)) {
 | 
				
			||||||
| 
						 | 
					@ -63,7 +63,7 @@ static int __test__sw_clock_freq(enum perf_sw_ids clock_id)
 | 
				
			||||||
		err = -errno;
 | 
							err = -errno;
 | 
				
			||||||
		pr_debug("Couldn't open evlist: %s\nHint: check %s, using %" PRIu64 " in this test.\n",
 | 
							pr_debug("Couldn't open evlist: %s\nHint: check %s, using %" PRIu64 " in this test.\n",
 | 
				
			||||||
			 strerror(errno), knob, (u64)attr.sample_freq);
 | 
								 strerror(errno), knob, (u64)attr.sample_freq);
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = perf_evlist__mmap(evlist, 128, true);
 | 
						err = perf_evlist__mmap(evlist, 128, true);
 | 
				
			||||||
| 
						 | 
					@ -109,9 +109,7 @@ out_unmap_evlist:
 | 
				
			||||||
	perf_evlist__munmap(evlist);
 | 
						perf_evlist__munmap(evlist);
 | 
				
			||||||
out_close_evlist:
 | 
					out_close_evlist:
 | 
				
			||||||
	perf_evlist__close(evlist);
 | 
						perf_evlist__close(evlist);
 | 
				
			||||||
out_delete_maps:
 | 
					out_delete_evlist:
 | 
				
			||||||
	perf_evlist__delete_maps(evlist);
 | 
					 | 
				
			||||||
out_free_evlist:
 | 
					 | 
				
			||||||
	perf_evlist__delete(evlist);
 | 
						perf_evlist__delete(evlist);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,14 +62,14 @@ int test__task_exit(void)
 | 
				
			||||||
	if (!evlist->cpus || !evlist->threads) {
 | 
						if (!evlist->cpus || !evlist->threads) {
 | 
				
			||||||
		err = -ENOMEM;
 | 
							err = -ENOMEM;
 | 
				
			||||||
		pr_debug("Not enough memory to create thread/cpu maps\n");
 | 
							pr_debug("Not enough memory to create thread/cpu maps\n");
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = perf_evlist__prepare_workload(evlist, &target, argv, false,
 | 
						err = perf_evlist__prepare_workload(evlist, &target, argv, false,
 | 
				
			||||||
					    workload_exec_failed_signal);
 | 
										    workload_exec_failed_signal);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
		pr_debug("Couldn't run the workload!\n");
 | 
							pr_debug("Couldn't run the workload!\n");
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	evsel = perf_evlist__first(evlist);
 | 
						evsel = perf_evlist__first(evlist);
 | 
				
			||||||
| 
						 | 
					@ -83,7 +83,7 @@ int test__task_exit(void)
 | 
				
			||||||
	err = perf_evlist__open(evlist);
 | 
						err = perf_evlist__open(evlist);
 | 
				
			||||||
	if (err < 0) {
 | 
						if (err < 0) {
 | 
				
			||||||
		pr_debug("Couldn't open the evlist: %s\n", strerror(-err));
 | 
							pr_debug("Couldn't open the evlist: %s\n", strerror(-err));
 | 
				
			||||||
		goto out_delete_maps;
 | 
							goto out_delete_evlist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (perf_evlist__mmap(evlist, 128, true) < 0) {
 | 
						if (perf_evlist__mmap(evlist, 128, true) < 0) {
 | 
				
			||||||
| 
						 | 
					@ -115,8 +115,7 @@ retry:
 | 
				
			||||||
	perf_evlist__munmap(evlist);
 | 
						perf_evlist__munmap(evlist);
 | 
				
			||||||
out_close_evlist:
 | 
					out_close_evlist:
 | 
				
			||||||
	perf_evlist__close(evlist);
 | 
						perf_evlist__close(evlist);
 | 
				
			||||||
out_delete_maps:
 | 
					out_delete_evlist:
 | 
				
			||||||
	perf_evlist__delete_maps(evlist);
 | 
					 | 
				
			||||||
	perf_evlist__delete(evlist);
 | 
						perf_evlist__delete(evlist);
 | 
				
			||||||
	return err;
 | 
						return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -107,6 +107,10 @@ void perf_evlist__exit(struct perf_evlist *evlist)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void perf_evlist__delete(struct perf_evlist *evlist)
 | 
					void perf_evlist__delete(struct perf_evlist *evlist)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						cpu_map__delete(evlist->cpus);
 | 
				
			||||||
 | 
						thread_map__delete(evlist->threads);
 | 
				
			||||||
 | 
						evlist->cpus = NULL;
 | 
				
			||||||
 | 
						evlist->threads = NULL;
 | 
				
			||||||
	perf_evlist__purge(evlist);
 | 
						perf_evlist__purge(evlist);
 | 
				
			||||||
	perf_evlist__exit(evlist);
 | 
						perf_evlist__exit(evlist);
 | 
				
			||||||
	free(evlist);
 | 
						free(evlist);
 | 
				
			||||||
| 
						 | 
					@ -833,14 +837,6 @@ out_delete_threads:
 | 
				
			||||||
	return -1;
 | 
						return -1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void perf_evlist__delete_maps(struct perf_evlist *evlist)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	cpu_map__delete(evlist->cpus);
 | 
					 | 
				
			||||||
	thread_map__delete(evlist->threads);
 | 
					 | 
				
			||||||
	evlist->cpus	= NULL;
 | 
					 | 
				
			||||||
	evlist->threads = NULL;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
int perf_evlist__apply_filters(struct perf_evlist *evlist)
 | 
					int perf_evlist__apply_filters(struct perf_evlist *evlist)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct perf_evsel *evsel;
 | 
						struct perf_evsel *evsel;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -135,7 +135,6 @@ static inline void perf_evlist__set_maps(struct perf_evlist *evlist,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target);
 | 
					int perf_evlist__create_maps(struct perf_evlist *evlist, struct target *target);
 | 
				
			||||||
void perf_evlist__delete_maps(struct perf_evlist *evlist);
 | 
					 | 
				
			||||||
int perf_evlist__apply_filters(struct perf_evlist *evlist);
 | 
					int perf_evlist__apply_filters(struct perf_evlist *evlist);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void __perf_evlist__set_leader(struct list_head *list);
 | 
					void __perf_evlist__set_leader(struct list_head *list);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue