aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>2015-06-10 03:25:08 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2015-06-23 17:21:30 -0400
commit70c646e0e47b51c8fa431f9ec1962f7d6e512860 (patch)
treef94a48caa2eb22e1d2c2a71debe1bc8eb613327e
parentc5de47f2e803c7e6ffc0a34b174d4d009c8bd8e1 (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.c42
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
209static int perf_pmu__new_alias(struct list_head *list, char *dir, char *name, FILE *file) 209static 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
247static 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
249static inline bool pmu_alias_info_file(char *name) 261static inline bool pmu_alias_info_file(char *name)
250{ 262{
251 size_t len; 263 size_t len;