diff options
author | Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com> | 2022-02-21 12:26:28 +0200 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2022-02-23 14:40:23 -0300 |
commit | 56dce868198cd01b023e05d72bbbba7c87cc384d (patch) | |
tree | 287744573d74ffa37a015d1f0398f4e63fe15d86 /tools/lib/perf/threadmap.c | |
parent | libperf: Rename arguments of perf_thread_map APIs (diff) | |
download | wireguard-linux-56dce868198cd01b023e05d72bbbba7c87cc384d.tar.xz wireguard-linux-56dce868198cd01b023e05d72bbbba7c87cc384d.zip |
libperf: Add API for allocating new thread map array
The existing API perf_thread_map__new_dummy() allocates new thread map
for one thread. I couldn't find a way to reallocate the map with more
threads, or to allocate a new map for more than one thread.
Having multiple threads in a thread map is essential for some use cases.
That's why a new API is proposed, which allocates a new thread map for
given number of threads: perf_thread_map__new_array()
Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@gmail.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/linux-perf-users/20220221102628.43904-1-tz.stoyanov@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/lib/perf/threadmap.c')
-rw-r--r-- | tools/lib/perf/threadmap.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/tools/lib/perf/threadmap.c b/tools/lib/perf/threadmap.c index 84fa07c79d00..07968f3ea093 100644 --- a/tools/lib/perf/threadmap.c +++ b/tools/lib/perf/threadmap.c @@ -42,18 +42,28 @@ char *perf_thread_map__comm(struct perf_thread_map *map, int idx) return map->map[idx].comm; } -struct perf_thread_map *perf_thread_map__new_dummy(void) +struct perf_thread_map *perf_thread_map__new_array(int nr_threads, pid_t *array) { - struct perf_thread_map *threads = thread_map__alloc(1); + struct perf_thread_map *threads = thread_map__alloc(nr_threads); + int i; + + if (!threads) + return NULL; + + for (i = 0; i < nr_threads; i++) + perf_thread_map__set_pid(threads, i, array ? array[i] : -1); + + threads->nr = nr_threads; + refcount_set(&threads->refcnt, 1); - if (threads != NULL) { - perf_thread_map__set_pid(threads, 0, -1); - threads->nr = 1; - refcount_set(&threads->refcnt, 1); - } return threads; } +struct perf_thread_map *perf_thread_map__new_dummy(void) +{ + return perf_thread_map__new_array(1, NULL); +} + static void perf_thread_map__delete(struct perf_thread_map *threads) { if (threads) { |