diff options
Diffstat (limited to 'tools/perf/builtin-inject.c')
-rw-r--r-- | tools/perf/builtin-inject.c | 55 |
1 files changed, 34 insertions, 21 deletions
diff --git a/tools/perf/builtin-inject.c b/tools/perf/builtin-inject.c index 978751ec64ce..6ce6d80b59db 100644 --- a/tools/perf/builtin-inject.c +++ b/tools/perf/builtin-inject.c | |||
@@ -16,7 +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 perf_event__repipe_synth(union perf_event *event, | 19 | static int perf_event__repipe_synth(struct perf_event_ops *ops __used, |
20 | union perf_event *event, | ||
20 | struct perf_session *session __used) | 21 | struct perf_session *session __used) |
21 | { | 22 | { |
22 | uint32_t size; | 23 | uint32_t size; |
@@ -36,47 +37,57 @@ static int perf_event__repipe_synth(union perf_event *event, | |||
36 | return 0; | 37 | return 0; |
37 | } | 38 | } |
38 | 39 | ||
40 | static int perf_event__repipe_tracing_data_synth(union perf_event *event, | ||
41 | struct perf_session *session) | ||
42 | { | ||
43 | return perf_event__repipe_synth(NULL, event, session); | ||
44 | } | ||
45 | |||
39 | static int perf_event__repipe_attr(union perf_event *event, | 46 | static int perf_event__repipe_attr(union perf_event *event, |
40 | struct perf_evlist **pevlist __used) | 47 | struct perf_evlist **pevlist __used) |
41 | { | 48 | { |
42 | return perf_event__repipe_synth(event, NULL); | 49 | return perf_event__repipe_synth(NULL, event, NULL); |
43 | } | 50 | } |
44 | 51 | ||
45 | static int perf_event__repipe(union perf_event *event, | 52 | static int perf_event__repipe(struct perf_event_ops *ops, |
53 | union perf_event *event, | ||
46 | struct perf_sample *sample __used, | 54 | struct perf_sample *sample __used, |
47 | struct perf_session *session) | 55 | struct perf_session *session) |
48 | { | 56 | { |
49 | return perf_event__repipe_synth(event, session); | 57 | return perf_event__repipe_synth(ops, event, session); |
50 | } | 58 | } |
51 | 59 | ||
52 | static int perf_event__repipe_sample(union perf_event *event, | 60 | static int perf_event__repipe_sample(struct perf_event_ops *ops, |
61 | union perf_event *event, | ||
53 | struct perf_sample *sample __used, | 62 | struct perf_sample *sample __used, |
54 | struct perf_evsel *evsel __used, | 63 | struct perf_evsel *evsel __used, |
55 | struct perf_session *session) | 64 | struct perf_session *session) |
56 | { | 65 | { |
57 | return perf_event__repipe_synth(event, session); | 66 | return perf_event__repipe_synth(ops, event, session); |
58 | } | 67 | } |
59 | 68 | ||
60 | static int perf_event__repipe_mmap(union perf_event *event, | 69 | static int perf_event__repipe_mmap(struct perf_event_ops *ops, |
70 | union perf_event *event, | ||
61 | struct perf_sample *sample, | 71 | struct perf_sample *sample, |
62 | struct perf_session *session) | 72 | struct perf_session *session) |
63 | { | 73 | { |
64 | int err; | 74 | int err; |
65 | 75 | ||
66 | err = perf_event__process_mmap(event, sample, session); | 76 | err = perf_event__process_mmap(ops, event, sample, session); |
67 | perf_event__repipe(event, sample, session); | 77 | perf_event__repipe(ops, event, sample, session); |
68 | 78 | ||
69 | return err; | 79 | return err; |
70 | } | 80 | } |
71 | 81 | ||
72 | static int perf_event__repipe_task(union perf_event *event, | 82 | static int perf_event__repipe_task(struct perf_event_ops *ops, |
83 | union perf_event *event, | ||
73 | struct perf_sample *sample, | 84 | struct perf_sample *sample, |
74 | struct perf_session *session) | 85 | struct perf_session *session) |
75 | { | 86 | { |
76 | int err; | 87 | int err; |
77 | 88 | ||
78 | err = perf_event__process_task(event, sample, session); | 89 | err = perf_event__process_task(ops, event, sample, session); |
79 | perf_event__repipe(event, sample, session); | 90 | perf_event__repipe(ops, event, sample, session); |
80 | 91 | ||
81 | return err; | 92 | return err; |
82 | } | 93 | } |
@@ -86,7 +97,7 @@ static int perf_event__repipe_tracing_data(union perf_event *event, | |||
86 | { | 97 | { |
87 | int err; | 98 | int err; |
88 | 99 | ||
89 | perf_event__repipe_synth(event, session); | 100 | perf_event__repipe_synth(NULL, event, session); |
90 | err = perf_event__process_tracing_data(event, session); | 101 | err = perf_event__process_tracing_data(event, session); |
91 | 102 | ||
92 | return err; | 103 | return err; |
@@ -106,7 +117,8 @@ static int dso__read_build_id(struct dso *self) | |||
106 | return -1; | 117 | return -1; |
107 | } | 118 | } |
108 | 119 | ||
109 | static int dso__inject_build_id(struct dso *self, struct perf_session *session) | 120 | static int dso__inject_build_id(struct dso *self, struct perf_event_ops *ops, |
121 | struct perf_session *session) | ||
110 | { | 122 | { |
111 | u16 misc = PERF_RECORD_MISC_USER; | 123 | u16 misc = PERF_RECORD_MISC_USER; |
112 | struct machine *machine; | 124 | struct machine *machine; |
@@ -126,7 +138,7 @@ static int dso__inject_build_id(struct dso *self, struct perf_session *session) | |||
126 | if (self->kernel) | 138 | if (self->kernel) |
127 | misc = PERF_RECORD_MISC_KERNEL; | 139 | misc = PERF_RECORD_MISC_KERNEL; |
128 | 140 | ||
129 | err = perf_event__synthesize_build_id(self, misc, perf_event__repipe, | 141 | err = perf_event__synthesize_build_id(ops, self, misc, perf_event__repipe, |
130 | machine, session); | 142 | machine, session); |
131 | if (err) { | 143 | if (err) { |
132 | pr_err("Can't synthesize build_id event for %s\n", self->long_name); | 144 | pr_err("Can't synthesize build_id event for %s\n", self->long_name); |
@@ -136,7 +148,8 @@ static int dso__inject_build_id(struct dso *self, struct perf_session *session) | |||
136 | return 0; | 148 | return 0; |
137 | } | 149 | } |
138 | 150 | ||
139 | static int perf_event__inject_buildid(union perf_event *event, | 151 | static int perf_event__inject_buildid(struct perf_event_ops *ops, |
152 | union perf_event *event, | ||
140 | struct perf_sample *sample, | 153 | struct perf_sample *sample, |
141 | struct perf_evsel *evsel __used, | 154 | struct perf_evsel *evsel __used, |
142 | struct perf_session *session) | 155 | struct perf_session *session) |
@@ -161,7 +174,7 @@ static int perf_event__inject_buildid(union perf_event *event, | |||
161 | if (!al.map->dso->hit) { | 174 | if (!al.map->dso->hit) { |
162 | al.map->dso->hit = 1; | 175 | al.map->dso->hit = 1; |
163 | if (map__load(al.map, NULL) >= 0) { | 176 | if (map__load(al.map, NULL) >= 0) { |
164 | dso__inject_build_id(al.map->dso, session); | 177 | dso__inject_build_id(al.map->dso, ops, session); |
165 | /* | 178 | /* |
166 | * If this fails, too bad, let the other side | 179 | * If this fails, too bad, let the other side |
167 | * account this as unresolved. | 180 | * account this as unresolved. |
@@ -174,7 +187,7 @@ static int perf_event__inject_buildid(union perf_event *event, | |||
174 | } | 187 | } |
175 | 188 | ||
176 | repipe: | 189 | repipe: |
177 | perf_event__repipe(event, sample, session); | 190 | perf_event__repipe(ops, event, sample, session); |
178 | return 0; | 191 | return 0; |
179 | } | 192 | } |
180 | 193 | ||
@@ -189,9 +202,9 @@ struct perf_event_ops inject_ops = { | |||
189 | .throttle = perf_event__repipe, | 202 | .throttle = perf_event__repipe, |
190 | .unthrottle = perf_event__repipe, | 203 | .unthrottle = perf_event__repipe, |
191 | .attr = perf_event__repipe_attr, | 204 | .attr = perf_event__repipe_attr, |
192 | .event_type = perf_event__repipe_synth, | 205 | .event_type = perf_event__repipe_synth, |
193 | .tracing_data = perf_event__repipe_synth, | 206 | .tracing_data = perf_event__repipe_tracing_data_synth, |
194 | .build_id = perf_event__repipe_synth, | 207 | .build_id = perf_event__repipe_synth, |
195 | }; | 208 | }; |
196 | 209 | ||
197 | extern volatile int session_done; | 210 | extern volatile int session_done; |