All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: lkml <linux-kernel@vger.kernel.org>,
	Ingo Molnar <mingo@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	David Ahern <dsahern@gmail.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Andi Kleen <andi@firstfloor.org>
Subject: [PATCH 36/43] perf stat: Move *_aggr_* data into struct perf_stat_config
Date: Thu, 30 Aug 2018 08:32:45 +0200	[thread overview]
Message-ID: <20180830063252.23729-37-jolsa@kernel.org> (raw)
In-Reply-To: <20180830063252.23729-1-jolsa@kernel.org>

Moving *_aggr_* data into struct perf_stat_config,
so it can be passed around and used outside stat command.

Link: http://lkml.kernel.org/n/tip-3z70bag45oyahf06loz984uo@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/builtin-stat.c | 112 ++++++++++++++++++++------------------
 tools/perf/util/stat.h    |   6 ++
 2 files changed, 64 insertions(+), 54 deletions(-)

diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 942ebfd8ef2e..2f606f76b66a 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -143,8 +143,6 @@ static struct target target = {
 	.uid	= UINT_MAX,
 };
 
-typedef int (*aggr_get_id_t)(struct cpu_map *m, int cpu);
-
 #define METRIC_ONLY_LEN 20
 
 static volatile pid_t		child_pid			= -1;
@@ -164,8 +162,6 @@ static bool			force_metric_only		= false;
 static bool			no_merge			= false;
 static bool			walltime_run_table		= false;
 static struct timespec		ref_time;
-static struct cpu_map		*aggr_map;
-static aggr_get_id_t		aggr_get_id;
 static bool			append_file;
 static bool			interval_count;
 static const char		*output_name;
@@ -920,7 +916,7 @@ static int first_shadow_cpu(struct perf_stat_config *config,
 {
 	int i;
 
-	if (!aggr_get_id)
+	if (!config->aggr_get_id)
 		return 0;
 
 	if (config->aggr_mode == AGGR_NONE)
@@ -932,7 +928,7 @@ static int first_shadow_cpu(struct perf_stat_config *config,
 	for (i = 0; i < perf_evsel__nr_cpus(evsel); i++) {
 		int cpu2 = perf_evsel__cpus(evsel)->map[i];
 
-		if (aggr_get_id(evsel_list->cpus, cpu2) == id)
+		if (config->aggr_get_id(config, evsel_list->cpus, cpu2) == id)
 			return cpu2;
 	}
 	return 0;
@@ -1102,12 +1098,12 @@ static void aggr_update_shadow(struct perf_stat_config *config,
 	u64 val;
 	struct perf_evsel *counter;
 
-	for (s = 0; s < aggr_map->nr; s++) {
-		id = aggr_map->map[s];
+	for (s = 0; s < config->aggr_map->nr; s++) {
+		id = config->aggr_map->map[s];
 		evlist__for_each_entry(evlist, counter) {
 			val = 0;
 			for (cpu = 0; cpu < perf_evsel__nr_cpus(counter); cpu++) {
-				s2 = aggr_get_id(evsel_list->cpus, cpu);
+				s2 = config->aggr_get_id(config, evsel_list->cpus, cpu);
 				if (s2 != id)
 					continue;
 				val += perf_counts(counter->counts, cpu, 0)->val;
@@ -1147,8 +1143,8 @@ static void uniquify_event_name(struct perf_evsel *counter)
 	counter->uniquified_name = true;
 }
 
-static void collect_all_aliases(struct perf_evsel *counter,
-			    void (*cb)(struct perf_evsel *counter, void *data,
+static void collect_all_aliases(struct perf_stat_config *config, struct perf_evsel *counter,
+			    void (*cb)(struct perf_stat_config *config, struct perf_evsel *counter, void *data,
 				       bool first),
 			    void *data)
 {
@@ -1164,22 +1160,22 @@ static void collect_all_aliases(struct perf_evsel *counter,
 		    perf_evsel__is_clock(alias) != perf_evsel__is_clock(counter))
 			break;
 		alias->merged_stat = true;
-		cb(alias, data, false);
+		cb(config, alias, data, false);
 	}
 }
 
-static bool collect_data(struct perf_evsel *counter,
-			    void (*cb)(struct perf_evsel *counter, void *data,
+static bool collect_data(struct perf_stat_config *config, struct perf_evsel *counter,
+			    void (*cb)(struct perf_stat_config *config, struct perf_evsel *counter, void *data,
 				       bool first),
 			    void *data)
 {
 	if (counter->merged_stat)
 		return false;
-	cb(counter, data, true);
+	cb(config, counter, data, true);
 	if (no_merge)
 		uniquify_event_name(counter);
 	else if (counter->auto_merge_stats)
-		collect_all_aliases(counter, cb, data);
+		collect_all_aliases(config, counter, cb, data);
 	return true;
 }
 
@@ -1190,7 +1186,8 @@ struct aggr_data {
 	int cpu;
 };
 
-static void aggr_cb(struct perf_evsel *counter, void *data, bool first)
+static void aggr_cb(struct perf_stat_config *config,
+		    struct perf_evsel *counter, void *data, bool first)
 {
 	struct aggr_data *ad = data;
 	int cpu, s2;
@@ -1198,7 +1195,7 @@ static void aggr_cb(struct perf_evsel *counter, void *data, bool first)
 	for (cpu = 0; cpu < perf_evsel__nr_cpus(counter); cpu++) {
 		struct perf_counts_values *counts;
 
-		s2 = aggr_get_id(perf_evsel__cpus(counter), cpu);
+		s2 = config->aggr_get_id(config, perf_evsel__cpus(counter), cpu);
 		if (s2 != ad->id)
 			continue;
 		if (first)
@@ -1232,7 +1229,7 @@ static void print_aggr(struct perf_stat_config *config,
 	u64 ena, run, val;
 	bool first;
 
-	if (!(aggr_map || aggr_get_id))
+	if (!(config->aggr_map || config->aggr_get_id))
 		return;
 
 	aggr_update_shadow(config, evlist);
@@ -1241,12 +1238,12 @@ static void print_aggr(struct perf_stat_config *config,
 	 * With metric_only everything is on a single line.
 	 * Without each counter has its own line.
 	 */
-	for (s = 0; s < aggr_map->nr; s++) {
+	for (s = 0; s < config->aggr_map->nr; s++) {
 		struct aggr_data ad;
 		if (prefix && metric_only)
 			fprintf(output, "%s", prefix);
 
-		ad.id = id = aggr_map->map[s];
+		ad.id = id = config->aggr_map->map[s];
 		first = true;
 		evlist__for_each_entry(evlist, counter) {
 			if (is_duration_time(counter))
@@ -1254,7 +1251,7 @@ static void print_aggr(struct perf_stat_config *config,
 
 			ad.val = ad.ena = ad.run = 0;
 			ad.nr = 0;
-			if (!collect_data(counter, aggr_cb, &ad))
+			if (!collect_data(config, counter, aggr_cb, &ad))
 				continue;
 			nr = ad.nr;
 			ena = ad.ena;
@@ -1370,7 +1367,8 @@ struct caggr_data {
 	double avg, avg_enabled, avg_running;
 };
 
-static void counter_aggr_cb(struct perf_evsel *counter, void *data,
+static void counter_aggr_cb(struct perf_stat_config *config __maybe_unused,
+			    struct perf_evsel *counter, void *data,
 			    bool first __maybe_unused)
 {
 	struct caggr_data *cd = data;
@@ -1393,7 +1391,7 @@ static void print_counter_aggr(struct perf_stat_config *config,
 	double uval;
 	struct caggr_data cd = { .avg = 0.0 };
 
-	if (!collect_data(counter, counter_aggr_cb, &cd))
+	if (!collect_data(config, counter, counter_aggr_cb, &cd))
 		return;
 
 	if (prefix && !metric_only)
@@ -1406,7 +1404,8 @@ static void print_counter_aggr(struct perf_stat_config *config,
 		fprintf(output, "\n");
 }
 
-static void counter_cb(struct perf_evsel *counter, void *data,
+static void counter_cb(struct perf_stat_config *config __maybe_unused,
+		       struct perf_evsel *counter, void *data,
 		       bool first __maybe_unused)
 {
 	struct aggr_data *ad = data;
@@ -1431,7 +1430,7 @@ static void print_counter(struct perf_stat_config *config,
 	for (cpu = 0; cpu < perf_evsel__nr_cpus(counter); cpu++) {
 		struct aggr_data ad = { .cpu = cpu };
 
-		if (!collect_data(counter, counter_cb, &ad))
+		if (!collect_data(config, counter, counter_cb, &ad))
 			return;
 		val = ad.val;
 		ena = ad.ena;
@@ -1944,12 +1943,14 @@ static const struct option stat_options[] = {
 	OPT_END()
 };
 
-static int perf_stat__get_socket(struct cpu_map *map, int cpu)
+static int perf_stat__get_socket(struct perf_stat_config *config __maybe_unused,
+				 struct cpu_map *map, int cpu)
 {
 	return cpu_map__get_socket(map, cpu, NULL);
 }
 
-static int perf_stat__get_core(struct cpu_map *map, int cpu)
+static int perf_stat__get_core(struct perf_stat_config *config __maybe_unused,
+			       struct cpu_map *map, int cpu)
 {
 	return cpu_map__get_core(map, cpu, NULL);
 }
@@ -1966,9 +1967,8 @@ static int cpu_map__get_max(struct cpu_map *map)
 	return max;
 }
 
-static struct cpu_map *cpus_aggr_map;
-
-static int perf_stat__get_aggr(aggr_get_id_t get_id, struct cpu_map *map, int idx)
+static int perf_stat__get_aggr(struct perf_stat_config *config,
+			       aggr_get_id_t get_id, struct cpu_map *map, int idx)
 {
 	int cpu;
 
@@ -1977,20 +1977,22 @@ static int perf_stat__get_aggr(aggr_get_id_t get_id, struct cpu_map *map, int id
 
 	cpu = map->map[idx];
 
-	if (cpus_aggr_map->map[cpu] == -1)
-		cpus_aggr_map->map[cpu] = get_id(map, idx);
+	if (config->cpus_aggr_map->map[cpu] == -1)
+		config->cpus_aggr_map->map[cpu] = get_id(config, map, idx);
 
-	return cpus_aggr_map->map[cpu];
+	return config->cpus_aggr_map->map[cpu];
 }
 
-static int perf_stat__get_socket_cached(struct cpu_map *map, int idx)
+static int perf_stat__get_socket_cached(struct perf_stat_config *config,
+					struct cpu_map *map, int idx)
 {
-	return perf_stat__get_aggr(perf_stat__get_socket, map, idx);
+	return perf_stat__get_aggr(config, perf_stat__get_socket, map, idx);
 }
 
-static int perf_stat__get_core_cached(struct cpu_map *map, int idx)
+static int perf_stat__get_core_cached(struct perf_stat_config *config,
+				      struct cpu_map *map, int idx)
 {
-	return perf_stat__get_aggr(perf_stat__get_core, map, idx);
+	return perf_stat__get_aggr(config, perf_stat__get_core, map, idx);
 }
 
 static int perf_stat_init_aggr_mode(void)
@@ -1999,18 +2001,18 @@ static int perf_stat_init_aggr_mode(void)
 
 	switch (stat_config.aggr_mode) {
 	case AGGR_SOCKET:
-		if (cpu_map__build_socket_map(evsel_list->cpus, &aggr_map)) {
+		if (cpu_map__build_socket_map(evsel_list->cpus, &stat_config.aggr_map)) {
 			perror("cannot build socket map");
 			return -1;
 		}
-		aggr_get_id = perf_stat__get_socket_cached;
+		stat_config.aggr_get_id = perf_stat__get_socket_cached;
 		break;
 	case AGGR_CORE:
-		if (cpu_map__build_core_map(evsel_list->cpus, &aggr_map)) {
+		if (cpu_map__build_core_map(evsel_list->cpus, &stat_config.aggr_map)) {
 			perror("cannot build core map");
 			return -1;
 		}
-		aggr_get_id = perf_stat__get_core_cached;
+		stat_config.aggr_get_id = perf_stat__get_core_cached;
 		break;
 	case AGGR_NONE:
 	case AGGR_GLOBAL:
@@ -2026,16 +2028,16 @@ static int perf_stat_init_aggr_mode(void)
 	 * the aggregation translate cpumap.
 	 */
 	nr = cpu_map__get_max(evsel_list->cpus);
-	cpus_aggr_map = cpu_map__empty_new(nr + 1);
-	return cpus_aggr_map ? 0 : -ENOMEM;
+	stat_config.cpus_aggr_map = cpu_map__empty_new(nr + 1);
+	return stat_config.cpus_aggr_map ? 0 : -ENOMEM;
 }
 
 static void perf_stat__exit_aggr_mode(void)
 {
-	cpu_map__put(aggr_map);
-	cpu_map__put(cpus_aggr_map);
-	aggr_map = NULL;
-	cpus_aggr_map = NULL;
+	cpu_map__put(stat_config.aggr_map);
+	cpu_map__put(stat_config.cpus_aggr_map);
+	stat_config.aggr_map = NULL;
+	stat_config.cpus_aggr_map = NULL;
 }
 
 static inline int perf_env__get_cpu(struct perf_env *env, struct cpu_map *map, int idx)
@@ -2093,12 +2095,14 @@ static int perf_env__build_core_map(struct perf_env *env, struct cpu_map *cpus,
 	return cpu_map__build_map(cpus, corep, perf_env__get_core, env);
 }
 
-static int perf_stat__get_socket_file(struct cpu_map *map, int idx)
+static int perf_stat__get_socket_file(struct perf_stat_config *config __maybe_unused,
+				      struct cpu_map *map, int idx)
 {
 	return perf_env__get_socket(map, idx, &perf_stat.session->header.env);
 }
 
-static int perf_stat__get_core_file(struct cpu_map *map, int idx)
+static int perf_stat__get_core_file(struct perf_stat_config *config __maybe_unused,
+				    struct cpu_map *map, int idx)
 {
 	return perf_env__get_core(map, idx, &perf_stat.session->header.env);
 }
@@ -2109,18 +2113,18 @@ static int perf_stat_init_aggr_mode_file(struct perf_stat *st)
 
 	switch (stat_config.aggr_mode) {
 	case AGGR_SOCKET:
-		if (perf_env__build_socket_map(env, evsel_list->cpus, &aggr_map)) {
+		if (perf_env__build_socket_map(env, evsel_list->cpus, &stat_config.aggr_map)) {
 			perror("cannot build socket map");
 			return -1;
 		}
-		aggr_get_id = perf_stat__get_socket_file;
+		stat_config.aggr_get_id = perf_stat__get_socket_file;
 		break;
 	case AGGR_CORE:
-		if (perf_env__build_core_map(env, evsel_list->cpus, &aggr_map)) {
+		if (perf_env__build_core_map(env, evsel_list->cpus, &stat_config.aggr_map)) {
 			perror("cannot build core map");
 			return -1;
 		}
-		aggr_get_id = perf_stat__get_core_file;
+		stat_config.aggr_get_id = perf_stat__get_core_file;
 		break;
 	case AGGR_NONE:
 	case AGGR_GLOBAL:
diff --git a/tools/perf/util/stat.h b/tools/perf/util/stat.h
index 1fd0b7e196c6..be202b066e62 100644
--- a/tools/perf/util/stat.h
+++ b/tools/perf/util/stat.h
@@ -90,6 +90,9 @@ struct runtime_stat {
 	struct rblist value_list;
 };
 
+typedef int (*aggr_get_id_t)(struct perf_stat_config *config,
+			     struct cpu_map *m, int cpu);
+
 struct perf_stat_config {
 	enum aggr_mode		 aggr_mode;
 	bool			 scale;
@@ -115,6 +118,9 @@ struct perf_stat_config {
 	const char		*csv_sep;
 	struct stats		*walltime_nsecs_stats;
 	struct rusage		 ru_data;
+	struct cpu_map		*aggr_map;
+	aggr_get_id_t		 aggr_get_id;
+	struct cpu_map		*cpus_aggr_map;
 };
 
 void update_stats(struct stats *stats, u64 val);
-- 
2.17.1


  parent reply	other threads:[~2018-08-30  6:33 UTC|newest]

Thread overview: 88+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-30  6:32 [PATCH 00/43] perf stat: Make some of the stat code generic Jiri Olsa
2018-08-30  6:32 ` [PATCH 01/43] perf stat: Use evsel->threads in create_perf_stat_counter Jiri Olsa
2018-09-06 13:21   ` [tip:perf/core] perf stat: Use evsel->threads in create_perf_stat_counter() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 02/43] perf stat: Move initial_delay into struct perf_stat_config Jiri Olsa
2018-09-06 13:21   ` [tip:perf/core] perf stat: Move 'initial_delay' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 03/43] perf stat: Move no_inherit into struct perf_stat_config Jiri Olsa
2018-09-06 13:22   ` [tip:perf/core] perf stat: Move 'no_inherit' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 04/43] perf stat: Use local config arg for scale in create_perf_stat_counter Jiri Olsa
2018-09-06 13:22   ` [tip:perf/core] perf stat: Use local config arg for scale in create_perf_stat_counter() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 05/43] perf stat: Add identifier flag into struct stat_opts Jiri Olsa
2018-09-06 13:23   ` [tip:perf/core] perf stat: Add 'identifier' flag to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 06/43] perf tools: Switch session argument to evlist in perf_event__synthesize_attrs Jiri Olsa
2018-09-06 13:23   ` [tip:perf/core] perf tools: Switch 'session' argument to 'evlist' in perf_event__synthesize_attrs() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 07/43] perf tools: Add perf_evsel__store_ids function Jiri Olsa
2018-09-06 13:24   ` [tip:perf/core] perf evsel: Introduce perf_evsel__store_ids() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 08/43] perf stat: Move create_perf_stat_counter into stat.c Jiri Olsa
2018-09-06 13:24   ` [tip:perf/core] perf stat: Move create_perf_stat_counter() to stat.c tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 09/43] perf stat: Rename is_pipe argument to attrs perf_stat_synthesize_config Jiri Olsa
2018-09-06 13:25   ` [tip:perf/core] perf stat: Rename 'is_pipe' argument to 'attrs' in perf_stat_synthesize_config() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 10/43] perf stat: Add struct perf_stat_config argument to perf_stat_synthesize_config Jiri Olsa
2018-09-06 13:26   ` [tip:perf/core] perf stat: Add 'struct perf_stat_config' argument to perf_stat_synthesize_config() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 11/43] perf stat: Add struct perf_tool argument to perf_stat_synthesize_config Jiri Olsa
2018-09-06 13:26   ` [tip:perf/core] perf stat: Add 'struct perf_tool' argument to perf_stat_synthesize_config() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 12/43] perf stat: Add struct perf_evlist argument to perf_stat_synthesize_config Jiri Olsa
2018-09-06 13:27   ` [tip:perf/core] perf stat: Add 'struct perf_evlist' argument to perf_stat_synthesize_config() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 13/43] perf stat: Add perf_event__handler_t argument to perf_stat_synthesize_config Jiri Olsa
2018-09-06 13:27   ` [tip:perf/core] perf stat: Add 'perf_event__handler_t' argument to perf_stat_synthesize_config() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 14/43] perf stat: Move perf_stat_synthesize_config into stat.c Jiri Olsa
2018-09-06 13:28   ` [tip:perf/core] perf stat: Move perf_stat_synthesize_config() to stat.c tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 15/43] perf stat: Add perf_evlist__print_counters function Jiri Olsa
2018-09-06 13:28   ` [tip:perf/core] perf stat: Introduce perf_evlist__print_counters() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 16/43] perf stat: Move STAT_RECORD out of perf_evlist__print_counters Jiri Olsa
2018-09-06 13:29   ` [tip:perf/core] perf stat: Move STAT_RECORD out of perf_evlist__print_counters() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 17/43] perf stat: Add stat_config argument to perf_evlist__print_counters Jiri Olsa
2018-09-06 13:29   ` [tip:perf/core] perf stat: Add 'struct perf_stat_config' argument to perf_evlist__print_counters() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 18/43] perf stat: Pass stat_config argument to local print functions Jiri Olsa
2018-09-06 13:30   ` [tip:perf/core] perf stat: Pass 'struct perf_stat_config' " tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 19/43] perf stat: Pass stat_config argument to global " Jiri Olsa
2018-09-06 13:30   ` [tip:perf/core] perf stat: Pass a 'struct perf_stat_config' " tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 20/43] perf stat: Move csv_* into struct perf_stat_config Jiri Olsa
2018-09-06 13:31   ` [tip:perf/core] perf stat: Move csv_* to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 21/43] perf stat: Move interval_clear into struct perf_stat_config Jiri Olsa
2018-09-06 13:31   ` [tip:perf/core] perf stat: Move 'interval_clear' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 22/43] perf stat: Move metric_only into struct perf_stat_config Jiri Olsa
2018-09-06 13:32   ` [tip:perf/core] perf stat: Move 'metric_only' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 23/43] perf stat: Move unit_width into struct perf_stat_config Jiri Olsa
2018-09-06 13:33   ` [tip:perf/core] perf stat: Move 'unit_width' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 24/43] perf stat: Add target argument to perf_evlist__print_counters Jiri Olsa
2018-09-06 13:33   ` [tip:perf/core] perf stat: Add 'target' argument to perf_evlist__print_counters() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 25/43] perf stat: Pass evlist argument to print functions Jiri Olsa
2018-09-06 13:34   ` [tip:perf/core] perf stat: Pass 'evlist' " tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 26/43] perf stat: Use evsel->evlist instead of evsel_list in collect_all_aliases Jiri Olsa
2018-09-06 13:34   ` [tip:perf/core] perf stat: Use 'evsel->evlist' instead of 'evsel_list' in collect_all_aliases() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 27/43] perf stat: Move run_count into struct perf_stat_config Jiri Olsa
2018-09-06 13:35   ` [tip:perf/core] perf stat: Move 'run_count' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 28/43] perf stat: Move metric_only_len into struct perf_stat_config Jiri Olsa
2018-09-06 13:35   ` [tip:perf/core] perf stat: Move 'metric_only_len' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 29/43] perf stat: Pass stat_config to first_shadow_cpu Jiri Olsa
2018-09-06 13:36   ` [tip:perf/core] perf stat: Pass 'struct perf_stat_config' to first_shadow_cpu() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 30/43] perf stat: Pass evlist to aggr_update_shadow Jiri Olsa
2018-09-06 13:37   ` [tip:perf/core] perf stat: Pass 'evlist' to aggr_update_shadow() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 31/43] perf stat: Add walltime_nsecs_stats pointer into struct perf_stat_config Jiri Olsa
2018-09-06 13:37   ` [tip:perf/core] perf stat: Add 'walltime_nsecs_stats' pointer to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 32/43] perf stat: Move null_run into struct perf_stat_config Jiri Olsa
2018-09-06 13:38   ` [tip:perf/core] perf stat: Move 'null_run' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 33/43] perf stat: Move print_free_counters_hint into struct perf_stat_config Jiri Olsa
2018-09-06 13:38   ` [tip:perf/core] perf stat: Move 'print_free_counters_hint' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 34/43] perf stat: Move print_mixed_hw_group_error into struct perf_stat_config Jiri Olsa
2018-09-06 13:39   ` [tip:perf/core] perf stat: Move 'print_mixed_hw_group_error' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 35/43] perf stat: Move ru_* data into struct perf_stat_config Jiri Olsa
2018-09-06 13:39   ` [tip:perf/core] perf stat: Move ru_* data to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` Jiri Olsa [this message]
2018-09-06 13:40   ` [tip:perf/core] perf stat: Move *_aggr_* " tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 37/43] perf stat: Do not use glovab evsel_list in print functions Jiri Olsa
2018-09-06 13:40   ` [tip:perf/core] perf stat: Do not use the global 'evsel_list' " tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 38/43] perf stat: Move big_num data into struct perf_stat_config Jiri Olsa
2018-09-06 13:41   ` [tip:perf/core] perf stat: Move 'big_num' data to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 39/43] perf stat: Move no_merge data into struct perf_stat_config Jiri Olsa
2018-09-06 13:42   ` [tip:perf/core] perf stat: Move 'no_merge' data to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 40/43] perf stat: Propagate struct target arg to sort_aggr_thread Jiri Olsa
2018-09-06 13:42   ` [tip:perf/core] perf stat: Propagate 'struct target' arg to sort_aggr_thread() tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 41/43] perf stat: Move walltime_* data into struct perf_stat_config Jiri Olsa
2018-09-06 13:43   ` [tip:perf/core] perf stat: Move 'walltime_*' data to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 42/43] perf stat: Move metric_events into struct perf_stat_config Jiri Olsa
2018-09-06 13:43   ` [tip:perf/core] perf stat: Move 'metric_events' to 'struct perf_stat_config' tip-bot for Jiri Olsa
2018-08-30  6:32 ` [PATCH 43/43] perf stat: Move display functions into stat-display.c Jiri Olsa
2018-09-06 13:44   ` [tip:perf/core] perf stat: Move the display functions to stat-display.c tip-bot for Jiri Olsa
2018-08-30 17:54 ` [PATCH 00/43] perf stat: Make some of the stat code generic Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180830063252.23729-37-jolsa@kernel.org \
    --to=jolsa@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=andi@firstfloor.org \
    --cc=dsahern@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.