diff options
author | Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> | 2015-06-10 03:25:08 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2015-06-23 17:21:30 -0400 |
commit | 70c646e0e47b51c8fa431f9ec1962f7d6e512860 (patch) | |
tree | f94a48caa2eb22e1d2c2a71debe1bc8eb613327e | |
parent | c5de47f2e803c7e6ffc0a34b174d4d009c8bd8e1 (diff) |
perf pmu: Split perf_pmu__new_alias()
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 <sukadev@linux.vnet.ibm.com>
Acked-by: Jiri Olsa <jolsa@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lkml.kernel.org/r/1433921123-25327-5-git-send-email-sukadev@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r-- | tools/perf/util/pmu.c | 42 |
1 files 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, | |||
206 | return 0; | 206 | return 0; |
207 | } | 207 | } |
208 | 208 | ||
209 | static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FILE *file) | 209 | static int __perf_pmu__new_alias(struct list_head *list, char *dir, char *name, |
210 | char *desc __maybe_unused, char *val) | ||
210 | { | 211 | { |
211 | struct perf_pmu_alias *alias; | 212 | struct perf_pmu_alias *alias; |
212 | char buf[256]; | ||
213 | int ret; | 213 | int ret; |
214 | 214 | ||
215 | ret = fread(buf, 1, sizeof(buf), file); | ||
216 | if (ret == 0) | ||
217 | return -EINVAL; | ||
218 | buf[ret] = 0; | ||
219 | |||
220 | alias = malloc(sizeof(*alias)); | 215 | alias = malloc(sizeof(*alias)); |
221 | if (!alias) | 216 | if (!alias) |
222 | return -ENOMEM; | 217 | return -ENOMEM; |
@@ -226,26 +221,43 @@ static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FI | |||
226 | alias->unit[0] = '\0'; | 221 | alias->unit[0] = '\0'; |
227 | alias->per_pkg = false; | 222 | alias->per_pkg = false; |
228 | 223 | ||
229 | ret = parse_events_terms(&alias->terms, buf); | 224 | ret = parse_events_terms(&alias->terms, val); |
230 | if (ret) { | 225 | if (ret) { |
226 | pr_err("Cannot parse alias %s: %d\n", val, ret); | ||
231 | free(alias); | 227 | free(alias); |
232 | return ret; | 228 | return ret; |
233 | } | 229 | } |
234 | 230 | ||
235 | alias->name = strdup(name); | 231 | alias->name = strdup(name); |
236 | /* | 232 | if (dir) { |
237 | * load unit name and scale if available | 233 | /* |
238 | */ | 234 | * load unit name and scale if available |
239 | perf_pmu__parse_unit(alias, dir, name); | 235 | */ |
240 | perf_pmu__parse_scale(alias, dir, name); | 236 | perf_pmu__parse_unit(alias, dir, name); |
241 | perf_pmu__parse_per_pkg(alias, dir, name); | 237 | perf_pmu__parse_scale(alias, dir, name); |
242 | perf_pmu__parse_snapshot(alias, dir, name); | 238 | perf_pmu__parse_per_pkg(alias, dir, name); |
239 | perf_pmu__parse_snapshot(alias, dir, name); | ||
240 | } | ||
243 | 241 | ||
244 | list_add_tail(&alias->list, list); | 242 | list_add_tail(&alias->list, list); |
245 | 243 | ||
246 | return 0; | 244 | return 0; |
247 | } | 245 | } |
248 | 246 | ||
247 | static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FILE *file) | ||
248 | { | ||
249 | char buf[256]; | ||
250 | int ret; | ||
251 | |||
252 | ret = fread(buf, 1, sizeof(buf), file); | ||
253 | if (ret == 0) | ||
254 | return -EINVAL; | ||
255 | |||
256 | buf[ret] = 0; | ||
257 | |||
258 | return __perf_pmu__new_alias(list, dir, name, NULL, buf); | ||
259 | } | ||
260 | |||
249 | static inline bool pmu_alias_info_file(char *name) | 261 | static inline bool pmu_alias_info_file(char *name) |
250 | { | 262 | { |
251 | size_t len; | 263 | size_t len; |