Messages in this thread Patch in this message | | | From | Jiri Olsa <> | Subject | [PATCH 4/8] perf tools: Add pmu interface to parse single file of aliases | Date | Sat, 26 Jan 2013 21:04:06 +0100 |
| |
Adding pmu_aliases_parse_multi function to parse and add aliases from single file. The file format follows the alias format, each line for single alias. Each line must contains 'name' term, like:
name=BR_MISP_EXEC.ALL_BRANCHES,event=0x89,umask=0xff name=BR_MISP_EXEC.COND,event=0x89,umask=0x1
Signed-off-by: Jiri Olsa <jolsa@redhat.com> Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Stephane Eranian <eranian@google.com> --- tools/perf/util/pmu.c | 23 +++++++++++++++++++++++ tools/perf/util/pmu.h | 2 ++ 2 files changed, 25 insertions(+)
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index 0d45ccd..68d6c86 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -146,11 +146,34 @@ static int perf_pmu__new_alias(struct list_head *list, char *name, char *data) } } + pr_debug3("adding alias '%s' => '%s'\n", name, data); + alias->name = strdup(name); list_add_tail(&alias->list, list); return 0; } +int pmu_aliases_parse_multi(char *path, struct list_head *head) +{ + FILE *file; + char *data = NULL; + size_t len; + int ret = -EINVAL; + + file = fopen(path, "r"); + if (!file) + return -EINVAL; + + while ((getline(&data, &len, file)) != -1) { + ret = perf_pmu__new_alias(head, NULL, data); + free(data); + data = NULL; + } + + fclose(file); + return ret; +} + /* * Process all the sysfs attributes located under the directory * specified in 'dir' parameter. diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 54cd809..add249b 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -43,5 +43,7 @@ struct perf_pmu *perf_pmu__scan(struct perf_pmu *pmu); char *perf_pmu__event_name(struct list_head *head_terms, bool remove); +int pmu_aliases_parse_multi(char *path, struct list_head *head); + int perf_pmu__test(void); #endif /* __PMU_H */ -- 1.7.11.7
| |