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.c55
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 @@
16static char const *input_name = "-"; 16static char const *input_name = "-";
17static bool inject_build_ids; 17static bool inject_build_ids;
18 18
19static int perf_event__repipe_synth(union perf_event *event, 19static 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
40static 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
39static int perf_event__repipe_attr(union perf_event *event, 46static 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
45static int perf_event__repipe(union perf_event *event, 52static 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
52static int perf_event__repipe_sample(union perf_event *event, 60static 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
60static int perf_event__repipe_mmap(union perf_event *event, 69static 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
72static int perf_event__repipe_task(union perf_event *event, 82static 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
109static int dso__inject_build_id(struct dso *self, struct perf_session *session) 120static 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
139static int perf_event__inject_buildid(union perf_event *event, 151static 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
176repipe: 189repipe:
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
197extern volatile int session_done; 210extern volatile int session_done;