aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-inject.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2011-11-25 05:19:45 -0500
committerArnaldo Carvalho de Melo <acme@redhat.com>2011-11-28 07:38:56 -0500
commitd20deb64e0490ee9442b5181bc08a62d2cadcb90 (patch)
treeafdb3f6fc9abbce9d0a96b7049d1f8121178a356 /tools/perf/builtin-inject.c
parent7009cc34b964939815160d7de64cf0215cdbf8bb (diff)
perf tools: Pass tool context in the the perf_event_ops functions
So that we don't need to have that many globals. Next steps will remove the 'session' pointer, that in most cases is not needed. Then we can rename perf_event_ops to 'perf_tool' that better describes this class hierarchy. Cc: David Ahern <dsahern@gmail.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lkml.kernel.org/n/tip-wp4djox7x6w1i2bab1pt4xxp@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
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;