hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/tools/perf/tests/task-exit.c
....@@ -1,12 +1,18 @@
11 // SPDX-License-Identifier: GPL-2.0
2
+#include "debug.h"
23 #include "evlist.h"
34 #include "evsel.h"
5
+#include "target.h"
46 #include "thread_map.h"
5
-#include "cpumap.h"
67 #include "tests.h"
8
+#include "util/mmap.h"
79
810 #include <errno.h>
911 #include <signal.h>
12
+#include <linux/string.h>
13
+#include <perf/cpumap.h>
14
+#include <perf/evlist.h>
15
+#include <perf/mmap.h>
1016
1117 static int exited;
1218 static int nr_exit;
....@@ -37,17 +43,18 @@
3743 {
3844 int err = -1;
3945 union perf_event *event;
40
- struct perf_evsel *evsel;
41
- struct perf_evlist *evlist;
46
+ struct evsel *evsel;
47
+ struct evlist *evlist;
4248 struct target target = {
4349 .uid = UINT_MAX,
4450 .uses_mmap = true,
4551 };
4652 const char *argv[] = { "true", NULL };
4753 char sbuf[STRERR_BUFSIZE];
48
- struct cpu_map *cpus;
49
- struct thread_map *threads;
50
- struct perf_mmap *md;
54
+ struct perf_cpu_map *cpus;
55
+ struct perf_thread_map *threads;
56
+ struct mmap *md;
57
+ int retry_count = 0;
5158
5259 signal(SIGCHLD, sig_handler);
5360
....@@ -63,7 +70,7 @@
6370 * perf_evlist__prepare_workload we'll fill in the only thread
6471 * we're monitoring, the one forked there.
6572 */
66
- cpus = cpu_map__dummy_new();
73
+ cpus = perf_cpu_map__dummy_new();
6774 threads = thread_map__new_by_tid(-1);
6875 if (!cpus || !threads) {
6976 err = -ENOMEM;
....@@ -71,7 +78,7 @@
7178 goto out_free_maps;
7279 }
7380
74
- perf_evlist__set_maps(evlist, cpus, threads);
81
+ perf_evlist__set_maps(&evlist->core, cpus, threads);
7582
7683 cpus = NULL;
7784 threads = NULL;
....@@ -83,26 +90,26 @@
8390 goto out_delete_evlist;
8491 }
8592
86
- evsel = perf_evlist__first(evlist);
87
- evsel->attr.task = 1;
93
+ evsel = evlist__first(evlist);
94
+ evsel->core.attr.task = 1;
8895 #ifdef __s390x__
89
- evsel->attr.sample_freq = 1000000;
96
+ evsel->core.attr.sample_freq = 1000000;
9097 #else
91
- evsel->attr.sample_freq = 1;
98
+ evsel->core.attr.sample_freq = 1;
9299 #endif
93
- evsel->attr.inherit = 0;
94
- evsel->attr.watermark = 0;
95
- evsel->attr.wakeup_events = 1;
96
- evsel->attr.exclude_kernel = 1;
100
+ evsel->core.attr.inherit = 0;
101
+ evsel->core.attr.watermark = 0;
102
+ evsel->core.attr.wakeup_events = 1;
103
+ evsel->core.attr.exclude_kernel = 1;
97104
98
- err = perf_evlist__open(evlist);
105
+ err = evlist__open(evlist);
99106 if (err < 0) {
100107 pr_debug("Couldn't open the evlist: %s\n",
101108 str_error_r(-err, sbuf, sizeof(sbuf)));
102109 goto out_delete_evlist;
103110 }
104111
105
- if (perf_evlist__mmap(evlist, 128) < 0) {
112
+ if (evlist__mmap(evlist, 128) < 0) {
106113 pr_debug("failed to mmap events: %d (%s)\n", errno,
107114 str_error_r(errno, sbuf, sizeof(sbuf)));
108115 err = -1;
....@@ -113,20 +120,27 @@
113120
114121 retry:
115122 md = &evlist->mmap[0];
116
- if (perf_mmap__read_init(md) < 0)
123
+ if (perf_mmap__read_init(&md->core) < 0)
117124 goto out_init;
118125
119
- while ((event = perf_mmap__read_event(md)) != NULL) {
126
+ while ((event = perf_mmap__read_event(&md->core)) != NULL) {
120127 if (event->header.type == PERF_RECORD_EXIT)
121128 nr_exit++;
122129
123
- perf_mmap__consume(md);
130
+ perf_mmap__consume(&md->core);
124131 }
125
- perf_mmap__read_done(md);
132
+ perf_mmap__read_done(&md->core);
126133
127134 out_init:
128135 if (!exited || !nr_exit) {
129
- perf_evlist__poll(evlist, -1);
136
+ evlist__poll(evlist, -1);
137
+
138
+ if (retry_count++ > 1000) {
139
+ pr_debug("Failed after retrying 1000 times\n");
140
+ err = -1;
141
+ goto out_free_maps;
142
+ }
143
+
130144 goto retry;
131145 }
132146
....@@ -136,9 +150,9 @@
136150 }
137151
138152 out_free_maps:
139
- cpu_map__put(cpus);
140
- thread_map__put(threads);
153
+ perf_cpu_map__put(cpus);
154
+ perf_thread_map__put(threads);
141155 out_delete_evlist:
142
- perf_evlist__delete(evlist);
156
+ evlist__delete(evlist);
143157 return err;
144158 }