aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-inject.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-inject.c')
-rw-r--r--tools/perf/builtin-inject.c90
1 files changed, 56 insertions, 34 deletions
diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c
index 8e3e47b064ce..8dfc12bb119b 100644
--- a/tools/perf/builtin-inject.c
+++ b/tools/perf/builtin-inject.c
@@ -16,8 +16,8 @@
16static char const *input_name = "-"; 16static char const *input_name = "-";
17static bool inject_build_ids; 17static bool inject_build_ids;
18 18
19static int event__repipe(event_t *event __used, 19static int perf_event__repipe_synth(union perf_event *event,
20 struct perf_session *session __used) 20 struct perf_session *session __used)
21{ 21{
22 uint32_t size; 22 uint32_t size;
23 void *buf = event; 23 void *buf = event;
@@ -36,33 +36,52 @@ static int event__repipe(event_t *event __used,
36 return 0; 36 return 0;
37} 37}
38 38
39static int event__repipe_mmap(event_t *self, struct perf_session *session) 39static int perf_event__repipe(union perf_event *event,
40 struct perf_sample *sample __used,
41 struct perf_session *session)
42{
43 return perf_event__repipe_synth(event, session);
44}
45
46static int perf_event__repipe_sample(union perf_event *event,
47 struct perf_sample *sample __used,
48 struct perf_evsel *evsel __used,
49 struct perf_session *session)
50{
51 return perf_event__repipe_synth(event, session);
52}
53
54static int perf_event__repipe_mmap(union perf_event *event,
55 struct perf_sample *sample,
56 struct perf_session *session)
40{ 57{
41 int err; 58 int err;
42 59
43 err = event__process_mmap(self, session); 60 err = perf_event__process_mmap(event, sample, session);
44 event__repipe(self, session); 61 perf_event__repipe(event, sample, session);
45 62
46 return err; 63 return err;
47} 64}
48 65
49static int event__repipe_task(event_t *self, struct perf_session *session) 66static int perf_event__repipe_task(union perf_event *event,
67 struct perf_sample *sample,
68 struct perf_session *session)
50{ 69{
51 int err; 70 int err;
52 71
53 err = event__process_task(self, session); 72 err = perf_event__process_task(event, sample, session);
54 event__repipe(self, session); 73 perf_event__repipe(event, sample, session);
55 74
56 return err; 75 return err;
57} 76}
58 77
59static int event__repipe_tracing_data(event_t *self, 78static int perf_event__repipe_tracing_data(union perf_event *event,
60 struct perf_session *session) 79 struct perf_session *session)
61{ 80{
62 int err; 81 int err;
63 82
64 event__repipe(self, session); 83 perf_event__repipe_synth(event, session);
65 err = event__process_tracing_data(self, session); 84 err = perf_event__process_tracing_data(event, session);
66 85
67 return err; 86 return err;
68} 87}
@@ -101,8 +120,8 @@ static int dso__inject_build_id(struct dso *self, struct perf_session *session)
101 if (self->kernel) 120 if (self->kernel)
102 misc = PERF_RECORD_MISC_KERNEL; 121 misc = PERF_RECORD_MISC_KERNEL;
103 122
104 err = event__synthesize_build_id(self, misc, event__repipe, 123 err = perf_event__synthesize_build_id(self, misc, perf_event__repipe,
105 machine, session); 124 machine, session);
106 if (err) { 125 if (err) {
107 pr_err("Can't synthesize build_id event for %s\n", self->long_name); 126 pr_err("Can't synthesize build_id event for %s\n", self->long_name);
108 return -1; 127 return -1;
@@ -111,7 +130,10 @@ static int dso__inject_build_id(struct dso *self, struct perf_session *session)
111 return 0; 130 return 0;
112} 131}
113 132
114static int event__inject_buildid(event_t *event, struct perf_session *session) 133static int perf_event__inject_buildid(union perf_event *event,
134 struct perf_sample *sample,
135 struct perf_evsel *evsel __used,
136 struct perf_session *session)
115{ 137{
116 struct addr_location al; 138 struct addr_location al;
117 struct thread *thread; 139 struct thread *thread;
@@ -146,24 +168,24 @@ static int event__inject_buildid(event_t *event, struct perf_session *session)
146 } 168 }
147 169
148repipe: 170repipe:
149 event__repipe(event, session); 171 perf_event__repipe(event, sample, session);
150 return 0; 172 return 0;
151} 173}
152 174
153struct perf_event_ops inject_ops = { 175struct perf_event_ops inject_ops = {
154 .sample = event__repipe, 176 .sample = perf_event__repipe_sample,
155 .mmap = event__repipe, 177 .mmap = perf_event__repipe,
156 .comm = event__repipe, 178 .comm = perf_event__repipe,
157 .fork = event__repipe, 179 .fork = perf_event__repipe,
158 .exit = event__repipe, 180 .exit = perf_event__repipe,
159 .lost = event__repipe, 181 .lost = perf_event__repipe,
160 .read = event__repipe, 182 .read = perf_event__repipe,
161 .throttle = event__repipe, 183 .throttle = perf_event__repipe,
162 .unthrottle = event__repipe, 184 .unthrottle = perf_event__repipe,
163 .attr = event__repipe, 185 .attr = perf_event__repipe_synth,
164 .event_type = event__repipe, 186 .event_type = perf_event__repipe_synth,
165 .tracing_data = event__repipe, 187 .tracing_data = perf_event__repipe_synth,
166 .build_id = event__repipe, 188 .build_id = perf_event__repipe_synth,
167}; 189};
168 190
169extern volatile int session_done; 191extern volatile int session_done;
@@ -181,13 +203,13 @@ static int __cmd_inject(void)
181 signal(SIGINT, sig_handler); 203 signal(SIGINT, sig_handler);
182 204
183 if (inject_build_ids) { 205 if (inject_build_ids) {
184 inject_ops.sample = event__inject_buildid; 206 inject_ops.sample = perf_event__inject_buildid;
185 inject_ops.mmap = event__repipe_mmap; 207 inject_ops.mmap = perf_event__repipe_mmap;
186 inject_ops.fork = event__repipe_task; 208 inject_ops.fork = perf_event__repipe_task;
187 inject_ops.tracing_data = event__repipe_tracing_data; 209 inject_ops.tracing_data = perf_event__repipe_tracing_data;
188 } 210 }
189 211
190 session = perf_session__new(input_name, O_RDONLY, false, true); 212 session = perf_session__new(input_name, O_RDONLY, false, true, &inject_ops);
191 if (session == NULL) 213 if (session == NULL)
192 return -ENOMEM; 214 return -ENOMEM;
193 215