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

Commit cac21425 authored by Jiri Olsa's avatar Jiri Olsa Committed by Arnaldo Carvalho de Melo
Browse files

perf tools: Fix attributes for '{}' defined event groups



Fixing events attributes for groups defined via '{}'.

Currently 'enable_on_exec' attribute in record command and both
'disabled ' and 'enable_on_exec' attributes in stat command are set
based on the 'group' option. This eliminates proper setup for '{}'
defined groups as they don't set 'group' option.

Making above attributes values based on the 'evsel->leader' as this is
common to both group definition.

Moving perf_evlist__set_leader call within builtin-record ahead
perf_evlist__config_attrs call, because the latter needs possible group
leader links in place.

Signed-off-by: default avatarJiri Olsa <jolsa@redhat.com>
Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/1352741644-16809-2-git-send-email-jolsa@redhat.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 60648033
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -230,11 +230,15 @@ static int perf_record__open(struct perf_record *rec)
	struct perf_record_opts *opts = &rec->opts;
	int rc = 0;

	perf_evlist__config_attrs(evlist, opts);

	/*
	 * Set the evsel leader links before we configure attributes,
	 * since some might depend on this info.
	 */
	if (opts->group)
		perf_evlist__set_leader(evlist);

	perf_evlist__config_attrs(evlist, opts);

	list_for_each_entry(pos, &evlist->entries, node) {
		struct perf_event_attr *attr = &pos->attr;
		/*
+4 −7
Original line number Diff line number Diff line
@@ -129,8 +129,7 @@ static struct stats runtime_itlb_cache_stats[MAX_NR_CPUS];
static struct stats runtime_dtlb_cache_stats[MAX_NR_CPUS];
static struct stats walltime_nsecs_stats;

static int create_perf_stat_counter(struct perf_evsel *evsel,
				    struct perf_evsel *first)
static int create_perf_stat_counter(struct perf_evsel *evsel)
{
	struct perf_event_attr *attr = &evsel->attr;
	bool exclude_guest_missing = false;
@@ -153,7 +152,7 @@ static int create_perf_stat_counter(struct perf_evsel *evsel,
		return 0;
	}

	if (!perf_target__has_task(&target) && (!group || evsel == first)) {
	if (!perf_target__has_task(&target) && (!evsel->leader)) {
		attr->disabled = 1;
		attr->enable_on_exec = 1;
	}
@@ -272,7 +271,7 @@ static int read_counter(struct perf_evsel *counter)
static int __run_perf_stat(int argc __maybe_unused, const char **argv)
{
	unsigned long long t0, t1;
	struct perf_evsel *counter, *first;
	struct perf_evsel *counter;
	int status = 0;
	int child_ready_pipe[2], go_pipe[2];
	const bool forks = (argc > 0);
@@ -332,10 +331,8 @@ static int __run_perf_stat(int argc __maybe_unused, const char **argv)
	if (group)
		perf_evlist__set_leader(evsel_list);

	first = perf_evlist__first(evsel_list);

	list_for_each_entry(counter, &evsel_list->entries, node) {
		if (create_perf_stat_counter(counter, first) < 0) {
		if (create_perf_stat_counter(counter) < 0) {
			/*
			 * PPC returns ENXIO for HW counters until 2.6.37
			 * (behavior changed with commit b0a873e).
+1 −3
Original line number Diff line number Diff line
@@ -15,6 +15,4 @@ config=1
sample_type=327
mmap=0
comm=0
# TODO this is disabled for --group option, enabled otherwise
#      check why..
enable_on_exec=1
enable_on_exec=0
+2 −4
Original line number Diff line number Diff line
@@ -11,7 +11,5 @@ group_fd=-1
fd=2
group_fd=1
config=1
# TODO both disabled and enable_on_exec are disabled for --group option,
#      enabled otherwise, check why..
disabled=1
enable_on_exec=1
disabled=0
enable_on_exec=0
+1 −1
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ int test__syscall_open_tp_fields(void)
		goto out_delete_evlist;
	}

	perf_evsel__config(evsel, &opts, evsel);
	perf_evsel__config(evsel, &opts);

	evlist->threads->map[0] = getpid();

Loading