Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Namhyung Kim and committed by
Arnaldo Carvalho de Melo
e7895e42 b02137cc

+36 -4
+36 -4
tools/perf/util/probe-file.c
··· 275 275 return ret; 276 276 } 277 277 278 - int probe_file__del_events(int fd, struct strfilter *filter) 278 + static int probe_file__get_events(int fd, struct strfilter *filter, 279 + struct strlist *plist) 279 280 { 280 281 struct strlist *namelist; 281 282 struct str_node *ent; ··· 291 290 p = strchr(ent->s, ':'); 292 291 if ((p && strfilter__compare(filter, p + 1)) || 293 292 strfilter__compare(filter, ent->s)) { 294 - ret = __del_trace_probe_event(fd, ent); 295 - if (ret < 0) 296 - break; 293 + strlist__add(plist, ent->s); 294 + ret = 0; 297 295 } 298 296 } 297 + strlist__delete(namelist); 298 + 299 + return ret; 300 + } 301 + 302 + static int probe_file__del_strlist(int fd, struct strlist *namelist) 303 + { 304 + int ret = 0; 305 + struct str_node *ent; 306 + 307 + strlist__for_each(ent, namelist) { 308 + ret = __del_trace_probe_event(fd, ent); 309 + if (ret < 0) 310 + break; 311 + } 312 + return ret; 313 + } 314 + 315 + int probe_file__del_events(int fd, struct strfilter *filter) 316 + { 317 + struct strlist *namelist; 318 + int ret; 319 + 320 + namelist = strlist__new(NULL, NULL); 321 + if (!namelist) 322 + return -ENOMEM; 323 + 324 + ret = probe_file__get_events(fd, filter, namelist); 325 + if (ret < 0) 326 + return ret; 327 + 328 + ret = probe_file__del_strlist(fd, namelist); 299 329 strlist__delete(namelist); 300 330 301 331 return ret;