From: Sukadev Bhattiprolu <suka...@linux.vnet.ibm.com>

Separate the event parsing code in perf_pmu__new_alias() out into a
separate function __perf_pmu__new_alias() so that code can be called
indepdently.

This is based on an earlier patch from Andi Kleen.

Signed-off-by: Sukadev Bhattiprolu <suka...@linux.vnet.ibm.com>
Acked-by: Jiri Olsa <jo...@redhat.com>
Cc: Andi Kleen <a...@linux.intel.com>
Cc: Madhavan Srinivasan <ma...@linux.vnet.ibm.com>
Cc: Michael Ellerman <m...@ellerman.id.au>
Cc: Namhyung Kim <namhy...@kernel.org>
Cc: linuxppc-dev@lists.ozlabs.org
Link: 
http://lkml.kernel.org/r/1433921123-25327-5-git-send-email-suka...@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
---
 tools/perf/util/pmu.c | 42 +++++++++++++++++++++++++++---------------
 1 file changed, 27 insertions(+), 15 deletions(-)

diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index c6b16b1db6d0..7bcb8c315615 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -206,17 +206,12 @@ static int perf_pmu__parse_snapshot(struct perf_pmu_alias 
*alias,
        return 0;
 }
 
-static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, 
FILE *file)
+static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name,
+                                char *desc __maybe_unused, char *val)
 {
        struct perf_pmu_alias *alias;
-       char buf[256];
        int ret;
 
-       ret = fread(buf, 1, sizeof(buf), file);
-       if (ret == 0)
-               return -EINVAL;
-       buf[ret] = 0;
-
        alias = malloc(sizeof(*alias));
        if (!alias)
                return -ENOMEM;
@@ -226,26 +221,43 @@ static int perf_pmu__new_alias(struct list_head *list, 
char *dir, char *name, FI
        alias->unit[0] = '\0';
        alias->per_pkg = false;
 
-       ret = parse_events_terms(&alias->terms, buf);
+       ret = parse_events_terms(&alias->terms, val);
        if (ret) {
+               pr_err("Cannot parse alias %s: %d\n", val, ret);
                free(alias);
                return ret;
        }
 
        alias->name = strdup(name);
-       /*
-        * load unit name and scale if available
-        */
-       perf_pmu__parse_unit(alias, dir, name);
-       perf_pmu__parse_scale(alias, dir, name);
-       perf_pmu__parse_per_pkg(alias, dir, name);
-       perf_pmu__parse_snapshot(alias, dir, name);
+       if (dir) {
+               /*
+                * load unit name and scale if available
+                */
+               perf_pmu__parse_unit(alias, dir, name);
+               perf_pmu__parse_scale(alias, dir, name);
+               perf_pmu__parse_per_pkg(alias, dir, name);
+               perf_pmu__parse_snapshot(alias, dir, name);
+       }
 
        list_add_tail(&alias->list, list);
 
        return 0;
 }
 
+static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, 
FILE *file)
+{
+       char buf[256];
+       int ret;
+
+       ret = fread(buf, 1, sizeof(buf), file);
+       if (ret == 0)
+               return -EINVAL;
+
+       buf[ret] = 0;
+
+       return __perf_pmu__new_alias(list, dir, name, NULL, buf);
+}
+
 static inline bool pmu_alias_info_file(char *name)
 {
        size_t len;
-- 
2.1.0

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to