diff options
Diffstat (limited to 'tools/perf/builtin-inject.c')
-rw-r--r-- | tools/perf/builtin-inject.c | 90 |
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 @@ | |||
16 | static char const *input_name = "-"; | 16 | static char const *input_name = "-"; |
17 | static bool inject_build_ids; | 17 | static bool inject_build_ids; |
18 | 18 | ||
19 | static int event__repipe(event_t *event __used, | 19 | static 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 | ||
39 | static int event__repipe_mmap(event_t *self, struct perf_session *session) | 39 | static 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 | |||
46 | static 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 | |||
54 | static 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 | ||
49 | static int event__repipe_task(event_t *self, struct perf_session *session) | 66 | static 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 | ||
59 | static int event__repipe_tracing_data(event_t *self, | 78 | static 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 | ||
114 | static int event__inject_buildid(event_t *event, struct perf_session *session) | 133 | static 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 | ||
148 | repipe: | 170 | repipe: |
149 | event__repipe(event, session); | 171 | perf_event__repipe(event, sample, session); |
150 | return 0; | 172 | return 0; |
151 | } | 173 | } |
152 | 174 | ||
153 | struct perf_event_ops inject_ops = { | 175 | struct 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 | ||
169 | extern volatile int session_done; | 191 | extern 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 | ||