All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Jiri Olsa <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: mingo@kernel.org, tglx@linutronix.de, dsahern@gmail.com,
	adrian.hunter@intel.com, jolsa@kernel.org, eranian@google.com,
	hpa@zytor.com, ak@linux.intel.com, namhyung@kernel.org,
	a.p.zijlstra@chello.nl, linux-kernel@vger.kernel.org,
	acme@redhat.com
Subject: [tip:perf/core] perf thread_map: Don' t access the array entries directly
Date: Thu, 25 Jun 2015 00:58:13 -0700	[thread overview]
Message-ID: <tip-e13798c77bdfed1da497f5e076b105b2be17b44f@git.kernel.org> (raw)
In-Reply-To: <1435012588-9007-2-git-send-email-jolsa@kernel.org>

Commit-ID:  e13798c77bdfed1da497f5e076b105b2be17b44f
Gitweb:     http://git.kernel.org/tip/e13798c77bdfed1da497f5e076b105b2be17b44f
Author:     Jiri Olsa <jolsa@kernel.org>
AuthorDate: Tue, 23 Jun 2015 00:36:02 +0200
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 23 Jun 2015 18:21:44 -0300

perf thread_map: Don't access the array entries directly

Instead provide a method to set the array entries, and another to access
the contents.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1435012588-9007-2-git-send-email-jolsa@kernel.org
[ Split providing the set/get accessors from transforming the entries structs ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/builtin-trace.c                  |  4 ++--
 tools/perf/tests/openat-syscall-tp-fields.c |  2 +-
 tools/perf/util/auxtrace.c                  |  4 ++--
 tools/perf/util/event.c                     |  6 +++---
 tools/perf/util/evlist.c                    |  4 ++--
 tools/perf/util/evsel.c                     |  2 +-
 tools/perf/util/thread_map.c                | 24 +++++++++++++-----------
 tools/perf/util/thread_map.h                | 10 ++++++++++
 8 files changed, 34 insertions(+), 22 deletions(-)

diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index de5d277..2bf2ca7 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -2325,7 +2325,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
 	 */
 	if (trace->filter_pids.nr > 0)
 		err = perf_evlist__set_filter_pids(evlist, trace->filter_pids.nr, trace->filter_pids.entries);
-	else if (evlist->threads->map[0] == -1)
+	else if (thread_map__pid(evlist->threads, 0) == -1)
 		err = perf_evlist__set_filter_pid(evlist, getpid());
 
 	if (err < 0) {
@@ -2343,7 +2343,7 @@ static int trace__run(struct trace *trace, int argc, const char **argv)
 	if (forks)
 		perf_evlist__start_workload(evlist);
 
-	trace->multiple_threads = evlist->threads->map[0] == -1 ||
+	trace->multiple_threads = thread_map__pid(evlist->threads, 0) == -1 ||
 				  evlist->threads->nr > 1 ||
 				  perf_evlist__first(evlist)->attr.inherit;
 again:
diff --git a/tools/perf/tests/openat-syscall-tp-fields.c b/tools/perf/tests/openat-syscall-tp-fields.c
index 6245221..01a1962 100644
--- a/tools/perf/tests/openat-syscall-tp-fields.c
+++ b/tools/perf/tests/openat-syscall-tp-fields.c
@@ -45,7 +45,7 @@ int test__syscall_openat_tp_fields(void)
 
 	perf_evsel__config(evsel, &opts);
 
-	evlist->threads->map[0] = getpid();
+	thread_map__set_pid(evlist->threads, 0, getpid());
 
 	err = perf_evlist__open(evlist);
 	if (err < 0) {
diff --git a/tools/perf/util/auxtrace.c b/tools/perf/util/auxtrace.c
index df66966..3dab006 100644
--- a/tools/perf/util/auxtrace.c
+++ b/tools/perf/util/auxtrace.c
@@ -119,12 +119,12 @@ void auxtrace_mmap_params__set_idx(struct auxtrace_mmap_params *mp,
 	if (per_cpu) {
 		mp->cpu = evlist->cpus->map[idx];
 		if (evlist->threads)
-			mp->tid = evlist->threads->map[0];
+			mp->tid = thread_map__pid(evlist->threads, 0);
 		else
 			mp->tid = -1;
 	} else {
 		mp->cpu = -1;
-		mp->tid = evlist->threads->map[idx];
+		mp->tid = thread_map__pid(evlist->threads, idx);
 	}
 }
 
diff --git a/tools/perf/util/event.c b/tools/perf/util/event.c
index d7d986d..67a977e 100644
--- a/tools/perf/util/event.c
+++ b/tools/perf/util/event.c
@@ -504,7 +504,7 @@ int perf_event__synthesize_thread_map(struct perf_tool *tool,
 	for (thread = 0; thread < threads->nr; ++thread) {
 		if (__event__synthesize_thread(comm_event, mmap_event,
 					       fork_event,
-					       threads->map[thread], 0,
+					       thread_map__pid(threads, thread), 0,
 					       process, tool, machine,
 					       mmap_data, proc_map_timeout)) {
 			err = -1;
@@ -515,12 +515,12 @@ int perf_event__synthesize_thread_map(struct perf_tool *tool,
 		 * comm.pid is set to thread group id by
 		 * perf_event__synthesize_comm
 		 */
-		if ((int) comm_event->comm.pid != threads->map[thread]) {
+		if ((int) comm_event->comm.pid != thread_map__pid(threads, thread)) {
 			bool need_leader = true;
 
 			/* is thread group leader in thread_map? */
 			for (j = 0; j < threads->nr; ++j) {
-				if ((int) comm_event->comm.pid == threads->map[j]) {
+				if ((int) comm_event->comm.pid == thread_map__pid(threads, j)) {
 					need_leader = false;
 					break;
 				}
diff --git a/tools/perf/util/evlist.c b/tools/perf/util/evlist.c
index 8366511..d29df90 100644
--- a/tools/perf/util/evlist.c
+++ b/tools/perf/util/evlist.c
@@ -548,7 +548,7 @@ static void perf_evlist__set_sid_idx(struct perf_evlist *evlist,
 	else
 		sid->cpu = -1;
 	if (!evsel->system_wide && evlist->threads && thread >= 0)
-		sid->tid = evlist->threads->map[thread];
+		sid->tid = thread_map__pid(evlist->threads, thread);
 	else
 		sid->tid = -1;
 }
@@ -1475,7 +1475,7 @@ int perf_evlist__prepare_workload(struct perf_evlist *evlist, struct target *tar
 				__func__, __LINE__);
 			goto out_close_pipes;
 		}
-		evlist->threads->map[0] = evlist->workload.pid;
+		thread_map__set_pid(evlist->threads, 0, evlist->workload.pid);
 	}
 
 	close(child_ready_pipe[1]);
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 33449de..1b56047 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -1167,7 +1167,7 @@ retry_sample_id:
 			int group_fd;
 
 			if (!evsel->cgrp && !evsel->system_wide)
-				pid = threads->map[thread];
+				pid = thread_map__pid(threads, thread);
 
 			group_fd = get_group_fd(evsel, cpu, thread);
 retry_open:
diff --git a/tools/perf/util/thread_map.c b/tools/perf/util/thread_map.c
index f4822bd..8c3c3a0 100644
--- a/tools/perf/util/thread_map.c
+++ b/tools/perf/util/thread_map.c
@@ -45,7 +45,7 @@ struct thread_map *thread_map__new_by_pid(pid_t pid)
 	threads = thread_map__alloc(items);
 	if (threads != NULL) {
 		for (i = 0; i < items; i++)
-			threads->map[i] = atoi(namelist[i]->d_name);
+			thread_map__set_pid(threads, i, atoi(namelist[i]->d_name));
 		threads->nr = items;
 	}
 
@@ -61,8 +61,8 @@ struct thread_map *thread_map__new_by_tid(pid_t tid)
 	struct thread_map *threads = thread_map__alloc(1);
 
 	if (threads != NULL) {
-		threads->map[0] = tid;
-		threads->nr	= 1;
+		thread_map__set_pid(threads, 0, tid);
+		threads->nr = 1;
 	}
 
 	return threads;
@@ -123,8 +123,10 @@ struct thread_map *thread_map__new_by_uid(uid_t uid)
 			threads = tmp;
 		}
 
-		for (i = 0; i < items; i++)
-			threads->map[threads->nr + i] = atoi(namelist[i]->d_name);
+		for (i = 0; i < items; i++) {
+			thread_map__set_pid(threads, threads->nr + i,
+					    atoi(namelist[i]->d_name));
+		}
 
 		for (i = 0; i < items; i++)
 			zfree(&namelist[i]);
@@ -201,7 +203,7 @@ static struct thread_map *thread_map__new_by_pid_str(const char *pid_str)
 		threads = nt;
 
 		for (i = 0; i < items; i++) {
-			threads->map[j++] = atoi(namelist[i]->d_name);
+			thread_map__set_pid(threads, j++, atoi(namelist[i]->d_name));
 			zfree(&namelist[i]);
 		}
 		threads->nr = total_tasks;
@@ -227,8 +229,8 @@ struct thread_map *thread_map__new_dummy(void)
 	struct thread_map *threads = thread_map__alloc(1);
 
 	if (threads != NULL) {
-		threads->map[0]	= -1;
-		threads->nr	= 1;
+		thread_map__set_pid(threads, 0, -1);
+		threads->nr = 1;
 	}
 	return threads;
 }
@@ -267,8 +269,8 @@ static struct thread_map *thread_map__new_by_tid_str(const char *tid_str)
 			goto out_free_threads;
 
 		threads = nt;
-		threads->map[ntasks - 1] = tid;
-		threads->nr		 = ntasks;
+		thread_map__set_pid(threads, ntasks - 1, tid);
+		threads->nr = ntasks;
 	}
 out:
 	return threads;
@@ -301,7 +303,7 @@ size_t thread_map__fprintf(struct thread_map *threads, FILE *fp)
 	size_t printed = fprintf(fp, "%d thread%s: ",
 				 threads->nr, threads->nr > 1 ? "s" : "");
 	for (i = 0; i < threads->nr; ++i)
-		printed += fprintf(fp, "%s%d", i ? ", " : "", threads->map[i]);
+		printed += fprintf(fp, "%s%d", i ? ", " : "", thread_map__pid(threads, i));
 
 	return printed + fprintf(fp, "\n");
 }
diff --git a/tools/perf/util/thread_map.h b/tools/perf/util/thread_map.h
index 95313f4..e225703 100644
--- a/tools/perf/util/thread_map.h
+++ b/tools/perf/util/thread_map.h
@@ -27,4 +27,14 @@ static inline int thread_map__nr(struct thread_map *threads)
 	return threads ? threads->nr : 1;
 }
 
+static inline pid_t thread_map__pid(struct thread_map *map, int thread)
+{
+	return map->map[thread];
+}
+
+static inline void
+thread_map__set_pid(struct thread_map *map, int thread, pid_t pid)
+{
+	map->map[thread] = pid;
+}
 #endif	/* __PERF_THREAD_MAP_H */

  reply	other threads:[~2015-06-25  7:58 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-22 22:36 [PATCHv4 00/27] perf stat: Introduce --per-thread option Jiri Olsa
2015-06-22 22:36 ` [PATCH 01/27] perf tools: Change thread_map::map into struct Jiri Olsa
2015-06-25  7:58   ` tip-bot for Jiri Olsa [this message]
2015-06-25  7:58   ` [tip:perf/core] perf thread_map: Change map entries into a struct tip-bot for Jiri Olsa
2015-06-22 22:36 ` [PATCH 02/27] perf tools: Add comm string into struct thread_map Jiri Olsa
2015-06-23 21:01   ` Arnaldo Carvalho de Melo
2015-06-23 21:56     ` Jiri Olsa
2015-06-25 14:39       ` Arnaldo Carvalho de Melo
2015-06-25 16:01         ` Jiri Olsa
2015-06-25 16:13           ` Arnaldo Carvalho de Melo
2015-06-22 22:36 ` [PATCH 03/27] perf tools: Add reference counting for cpu_map object Jiri Olsa
2015-06-23 21:06   ` Arnaldo Carvalho de Melo
2015-06-23 21:54     ` Jiri Olsa
2015-06-26  8:44   ` [tip:perf/urgent] " tip-bot for Jiri Olsa
2015-06-22 22:36 ` [PATCH 04/27] perf tools: Add reference counting for thread_map object Jiri Olsa
2015-06-26  8:44   ` [tip:perf/urgent] " tip-bot for Jiri Olsa
2015-06-22 22:36 ` [PATCH 05/27] perf tools: Propagate cpu maps through the evlist Jiri Olsa
2015-06-26  8:45   ` [tip:perf/urgent] perf evlist: Propagate cpu maps to evsels in an evlist tip-bot for Jiri Olsa
2015-06-22 22:36 ` [PATCH 06/27] perf tools: Propagate thread maps through the evlist Jiri Olsa
2015-06-26  8:45   ` [tip:perf/urgent] perf evlist: " tip-bot for Jiri Olsa
2015-06-22 22:36 ` [PATCH 07/27] perf tools: Make perf_evsel__(nr_)cpus generic Jiri Olsa
2015-06-26  8:45   ` [tip:perf/urgent] " tip-bot for Jiri Olsa
2015-06-22 22:36 ` [PATCH 08/27] perf tests: Add thread_map object tests Jiri Olsa
2015-06-22 22:36 ` [PATCH 09/27] perf stat: Introduce perf_counts function Jiri Olsa
2015-06-23 21:11   ` Arnaldo Carvalho de Melo
2015-06-23 22:03     ` Jiri Olsa
2015-06-22 22:36 ` [PATCH 10/27] perf stat: Use xyarray for cpu evsel counts Jiri Olsa
2015-06-22 22:36 ` [PATCH 11/27] perf stat: Make stats work over the thread dimension Jiri Olsa
2015-06-22 22:36 ` [PATCH 12/27] perf stat: Rename struct perf_counts::cpu member to values Jiri Olsa
2015-06-22 22:36 ` [PATCH 13/27] perf stat: Introduce perf_evlist__reset_stats Jiri Olsa
2015-06-22 22:36 ` [PATCH 14/27] perf stat: Move perf_evsel__(alloc|free|reset)_stat_priv into stat object Jiri Olsa
2015-06-22 22:36 ` [PATCH 15/27] perf stat: Move perf_evsel__(alloc|free)_prev_raw_counts " Jiri Olsa
2015-06-22 22:36 ` [PATCH 16/27] perf stat: Move perf_evlist__(alloc|free|reset)_stats " Jiri Olsa
2015-06-22 22:36 ` [PATCH 17/27] perf stat: Introduce perf_evsel__alloc_stats function Jiri Olsa
2015-06-22 22:36 ` [PATCH 18/27] perf stat: Introduce perf_evsel__read function Jiri Olsa
2015-06-22 22:36 ` [PATCH 19/27] perf stat: Introduce read_counters function Jiri Olsa
2015-06-22 22:36 ` [PATCH 20/27] perf stat: Separate counters reading and processing Jiri Olsa
2015-06-22 22:36 ` [PATCH 21/27] perf stat: Move zero_per_pkg into counter process code Jiri Olsa
2015-06-22 22:36 ` [PATCH 22/27] perf stat: Move perf_stat initialization " Jiri Olsa
2015-06-22 22:36 ` [PATCH 23/27] perf stat: Remove perf_evsel__read_cb function Jiri Olsa
2015-06-22 22:36 ` [PATCH 24/27] perf stat: Rename print_interval to process_interval Jiri Olsa
2015-06-22 22:36 ` [PATCH 25/27] perf stat: Using init_stats instead of memset Jiri Olsa
2015-06-22 22:36 ` [PATCH 26/27] perf stat: Introduce print_counters function Jiri Olsa
2015-06-22 22:36 ` [PATCH 27/27] perf stat: Introduce --per-thread option Jiri Olsa
2015-06-22 23:06 ` [PATCHv4 00/27] " Arnaldo Carvalho de Melo
2015-06-23  7:22   ` Jiri Olsa
2015-06-23 14:05     ` Arnaldo Carvalho de Melo
2015-06-23 14:08       ` Adrian Hunter
2015-06-23 15:06         ` 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=tip-e13798c77bdfed1da497f5e076b105b2be17b44f@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=dsahern@gmail.com \
    --cc=eranian@google.com \
    --cc=hpa@zytor.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=tglx@linutronix.de \
    /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.