diff options
author | Jiri Olsa <jolsa@kernel.org> | 2019-07-21 07:24:19 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2019-07-29 17:34:44 -0400 |
commit | 4b49cce25e719587e934b745fe9bbb5bc8c4ba29 (patch) | |
tree | d5ec29f16b67c2508a62860243ce3eb1e8c56798 /tools/perf/lib | |
parent | 07acd22677ac6bb2db404d1d258e8c7d06ca7706 (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.h | 2 | ||||
-rw-r--r-- | tools/perf/lib/include/perf/threadmap.h | 7 | ||||
-rw-r--r-- | tools/perf/lib/libperf.map | 2 | ||||
-rw-r--r-- | tools/perf/lib/threadmap.c | 43 |
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 | ||
21 | struct 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 | |||
5 | struct perf_thread_map; | 8 | struct perf_thread_map; |
6 | 9 | ||
10 | LIBPERF_API struct perf_thread_map *perf_thread_map__new_dummy(void); | ||
11 | |||
12 | LIBPERF_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 | |||
8 | static 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 | |||
16 | struct 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 | |||
33 | void perf_thread_map__set_pid(struct perf_thread_map *map, int thread, pid_t pid) | ||
34 | { | ||
35 | map->map[thread].pid = pid; | ||
36 | } | ||
37 | |||
38 | struct 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 | } | ||