aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/lib
diff options
context:
space:
mode:
authorJiri Olsa <jolsa@kernel.org>2019-07-21 07:24:19 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2019-07-29 17:34:44 -0400
commit4b49cce25e719587e934b745fe9bbb5bc8c4ba29 (patch)
treed5ec29f16b67c2508a62860243ce3eb1e8c56798 /tools/perf/lib
parent07acd22677ac6bb2db404d1d258e8c7d06ca7706 (diff)
libperf: Add perf_thread_map__new_dummy() function
Moving the following functions: thread_map__new_dummy() thread_map__realloc() thread_map__set_pid() to libperf with the following names: perf_thread_map__new_dummy() perf_thread_map__realloc() perf_thread_map__set_pid() the other 2 functions are dependencies of the perf_thread_map__new_dummy() function. The perf_thread_map__realloc() function is not exported. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Alexey Budankov <alexey.budankov@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Michael Petlan <mpetlan@redhat.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20190721112506.12306-33-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/lib')
-rw-r--r--tools/perf/lib/include/internal/threadmap.h2
-rw-r--r--tools/perf/lib/include/perf/threadmap.h7
-rw-r--r--tools/perf/lib/libperf.map2
-rw-r--r--tools/perf/lib/threadmap.c43
4 files changed, 54 insertions, 0 deletions
diff --git a/tools/perf/lib/include/internal/threadmap.h b/tools/perf/lib/include/internal/threadmap.h
index c8088005a9ab..df748baf9eda 100644
--- a/tools/perf/lib/include/internal/threadmap.h
+++ b/tools/perf/lib/include/internal/threadmap.h
@@ -18,4 +18,6 @@ struct perf_thread_map {
18 struct thread_map_data map[]; 18 struct thread_map_data map[];
19}; 19};
20 20
21struct perf_thread_map *perf_thread_map__realloc(struct perf_thread_map *map, int nr);
22
21#endif /* __LIBPERF_INTERNAL_THREADMAP_H */ 23#endif /* __LIBPERF_INTERNAL_THREADMAP_H */
diff --git a/tools/perf/lib/include/perf/threadmap.h b/tools/perf/lib/include/perf/threadmap.h
index dc3a3837b56f..34ed7f587101 100644
--- a/tools/perf/lib/include/perf/threadmap.h
+++ b/tools/perf/lib/include/perf/threadmap.h
@@ -2,6 +2,13 @@
2#ifndef __LIBPERF_THREADMAP_H 2#ifndef __LIBPERF_THREADMAP_H
3#define __LIBPERF_THREADMAP_H 3#define __LIBPERF_THREADMAP_H
4 4
5#include <perf/core.h>
6#include <sys/types.h>
7
5struct perf_thread_map; 8struct perf_thread_map;
6 9
10LIBPERF_API struct perf_thread_map *perf_thread_map__new_dummy(void);
11
12LIBPERF_API void perf_thread_map__set_pid(struct perf_thread_map *map, int thread, pid_t pid);
13
7#endif /* __LIBPERF_THREADMAP_H */ 14#endif /* __LIBPERF_THREADMAP_H */
diff --git a/tools/perf/lib/libperf.map b/tools/perf/lib/libperf.map
index 76ce3bc59dd8..6b4ec1c4d3f3 100644
--- a/tools/perf/lib/libperf.map
+++ b/tools/perf/lib/libperf.map
@@ -4,6 +4,8 @@ LIBPERF_0.0.1 {
4 perf_cpu_map__dummy_new; 4 perf_cpu_map__dummy_new;
5 perf_cpu_map__get; 5 perf_cpu_map__get;
6 perf_cpu_map__put; 6 perf_cpu_map__put;
7 perf_thread_map__new_dummy;
8 perf_thread_map__set_pid;
7 local: 9 local:
8 *; 10 *;
9}; 11};
diff --git a/tools/perf/lib/threadmap.c b/tools/perf/lib/threadmap.c
index 163dc609b909..23e628a1437a 100644
--- a/tools/perf/lib/threadmap.c
+++ b/tools/perf/lib/threadmap.c
@@ -3,3 +3,46 @@
3#include <stdlib.h> 3#include <stdlib.h>
4#include <linux/refcount.h> 4#include <linux/refcount.h>
5#include <internal/threadmap.h> 5#include <internal/threadmap.h>
6#include <string.h>
7
8static void perf_thread_map__reset(struct perf_thread_map *map, int start, int nr)
9{
10 size_t size = (nr - start) * sizeof(map->map[0]);
11
12 memset(&map->map[start], 0, size);
13 map->err_thread = -1;
14}
15
16struct perf_thread_map *perf_thread_map__realloc(struct perf_thread_map *map, int nr)
17{
18 size_t size = sizeof(*map) + sizeof(map->map[0]) * nr;
19 int start = map ? map->nr : 0;
20
21 map = realloc(map, size);
22 /*
23 * We only realloc to add more items, let's reset new items.
24 */
25 if (map)
26 perf_thread_map__reset(map, start, nr);
27
28 return map;
29}
30
31#define thread_map__alloc(__nr) perf_thread_map__realloc(NULL, __nr)
32
33void perf_thread_map__set_pid(struct perf_thread_map *map, int thread, pid_t pid)
34{
35 map->map[thread].pid = pid;
36}
37
38struct perf_thread_map *perf_thread_map__new_dummy(void)
39{
40 struct perf_thread_map *threads = thread_map__alloc(1);
41
42 if (threads != NULL) {
43 perf_thread_map__set_pid(threads, 0, -1);
44 threads->nr = 1;
45 refcount_set(&threads->refcnt, 1);
46 }
47 return threads;
48}