aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/probe-file.c
diff options
context:
space:
mode:
authorNamhyung Kim <namhyung@kernel.org>2015-09-04 08:16:02 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-09-04 11:43:19 -0400
commite7895e422e4da63daedacad0a2ed1a5a6b502d66 (patch)
tree3198684eedba8f26caf509e2f0aac4e3c1d442b8 /tools/perf/util/probe-file.c
parentb02137cc6550c1fa28e9a7c943a79fe6e4c4378d (diff)
perf probe: Split del_perf_probe_events()
The del_perf_probe_events() does 2 things: 1. find existing events which match to filter 2. delete such trace events from kernel But sometimes we need to do something with the trace events. So split the funtion into two, so that it can access intermediate trace events name using strlist if needed. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Wang Nan <wangnan0@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1441368963-11565-4-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/util/probe-file.c')
-rw-r--r--tools/perf/util/probe-file.c40
1 files changed, 36 insertions, 4 deletions
diff --git a/tools/perf/util/probe-file.c b/tools/perf/util/probe-file.c
index bbb243717ec8..f00b0df56dfe 100644
--- a/tools/perf/util/probe-file.c
+++ b/tools/perf/util/probe-file.c
@@ -275,7 +275,8 @@ error:
275 return ret; 275 return ret;
276} 276}
277 277
278int probe_file__del_events(int fd, struct strfilter *filter) 278static int probe_file__get_events(int fd, struct strfilter *filter,
279 struct strlist *plist)
279{ 280{
280 struct strlist *namelist; 281 struct strlist *namelist;
281 struct str_node *ent; 282 struct str_node *ent;
@@ -290,12 +291,43 @@ int probe_file__del_events(int fd, struct strfilter *filter)
290 p = strchr(ent->s, ':'); 291 p = strchr(ent->s, ':');
291 if ((p && strfilter__compare(filter, p + 1)) || 292 if ((p && strfilter__compare(filter, p + 1)) ||
292 strfilter__compare(filter, ent->s)) { 293 strfilter__compare(filter, ent->s)) {
293 ret = __del_trace_probe_event(fd, ent); 294 strlist__add(plist, ent->s);
294 if (ret < 0) 295 ret = 0;
295 break;
296 } 296 }
297 } 297 }
298 strlist__delete(namelist); 298 strlist__delete(namelist);
299 299
300 return ret; 300 return ret;
301} 301}
302
303static int probe_file__del_strlist(int fd, struct strlist *namelist)
304{
305 int ret = 0;
306 struct str_node *ent;
307
308 strlist__for_each(ent, namelist) {
309 ret = __del_trace_probe_event(fd, ent);
310 if (ret < 0)
311 break;
312 }
313 return ret;
314}
315
316int probe_file__del_events(int fd, struct strfilter *filter)
317{
318 struct strlist *namelist;
319 int ret;
320
321 namelist = strlist__new(NULL, NULL);
322 if (!namelist)
323 return -ENOMEM;
324
325 ret = probe_file__get_events(fd, filter, namelist);
326 if (ret < 0)
327 return ret;
328
329 ret = probe_file__del_strlist(fd, namelist);
330 strlist__delete(namelist);
331
332 return ret;
333}