Merge tag 'freevxfs-for-4.8' of git://git.infradead.org/users/hch/freevxfs
[deliverable/linux.git] / tools / perf / builtin-probe.c
index 6d7ab43164495714f129b40c24d02b019bd22106..ee5b42173ba374e066551f32eba24be8c863aebc 100644 (file)
@@ -44,7 +44,7 @@
 
 #define DEFAULT_VAR_FILTER "!__k???tab_* & !__crc_*"
 #define DEFAULT_FUNC_FILTER "!_*"
-#define DEFAULT_LIST_FILTER "*:*"
+#define DEFAULT_LIST_FILTER "*"
 
 /* Session management structure */
 static struct {
@@ -308,7 +308,7 @@ static void pr_err_with_code(const char *msg, int err)
 
        pr_err("%s", msg);
        pr_debug(" Reason: %s (Code: %d)",
-                strerror_r(-err, sbuf, sizeof(sbuf)), err);
+                str_error_r(-err, sbuf, sizeof(sbuf)), err);
        pr_err("\n");
 }
 
@@ -363,6 +363,32 @@ out_cleanup:
        return ret;
 }
 
+static int del_perf_probe_caches(struct strfilter *filter)
+{
+       struct probe_cache *cache;
+       struct strlist *bidlist;
+       struct str_node *nd;
+       int ret;
+
+       bidlist = build_id_cache__list_all(false);
+       if (!bidlist) {
+               ret = -errno;
+               pr_debug("Failed to get buildids: %d\n", ret);
+               return ret ?: -ENOMEM;
+       }
+
+       strlist__for_each_entry(nd, bidlist) {
+               cache = probe_cache__new(nd->s);
+               if (!cache)
+                       continue;
+               if (probe_cache__filter_purge(cache, filter) < 0 ||
+                   probe_cache__commit(cache) < 0)
+                       pr_warning("Failed to remove entries for %s\n", nd->s);
+               probe_cache__delete(cache);
+       }
+       return 0;
+}
+
 static int perf_del_probe_events(struct strfilter *filter)
 {
        int ret, ret2, ufd = -1, kfd = -1;
@@ -375,6 +401,9 @@ static int perf_del_probe_events(struct strfilter *filter)
 
        pr_debug("Delete filter: \'%s\'\n", str);
 
+       if (probe_conf.cache)
+               return del_perf_probe_caches(filter);
+
        /* Get current event names */
        ret = probe_file__open_both(&kfd, &ufd, PF_FL_RW);
        if (ret < 0)
@@ -389,7 +418,7 @@ static int perf_del_probe_events(struct strfilter *filter)
 
        ret = probe_file__get_events(kfd, filter, klist);
        if (ret == 0) {
-               strlist__for_each(ent, klist)
+               strlist__for_each_entry(ent, klist)
                        pr_info("Removed event: %s\n", ent->s);
 
                ret = probe_file__del_strlist(kfd, klist);
@@ -399,7 +428,7 @@ static int perf_del_probe_events(struct strfilter *filter)
 
        ret2 = probe_file__get_events(ufd, filter, ulist);
        if (ret2 == 0) {
-               strlist__for_each(ent, ulist)
+               strlist__for_each_entry(ent, ulist)
                        pr_info("Removed event: %s\n", ent->s);
 
                ret2 = probe_file__del_strlist(ufd, ulist);
This page took 0.055621 seconds and 5 git commands to generate.