Commit a6455f2f authored by Andi Kleen's avatar Andi Kleen Committed by Sasha Levin

perf tools: Dont stop PMU parsing on alias parse error

[ Upstream commit 940db6dc ]

When an error happens during alias parsing currently the complete
parsing of all attributes of the PMU is stopped. This is breaks old perf
on a newer kernel that may have not-yet-know alias attributes (such as
.scale or .per-pkg).

Continue when some attribute is unparseable.

This is IMHO a stable candidate and should be backported to older
versions to avoid problems with newer kernels.

v2: Print warnings when something goes wrong.
v3: Change warning to debug output
Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: stable@vger.kernel.org # v3.6+
Link: http://lkml.kernel.org/r/1455749095-18358-1-git-send-email-andi@firstfloor.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
parent fb1840e2
...@@ -263,13 +263,12 @@ static int pmu_aliases_parse(char *dir, struct list_head *head) ...@@ -263,13 +263,12 @@ static int pmu_aliases_parse(char *dir, struct list_head *head)
{ {
struct dirent *evt_ent; struct dirent *evt_ent;
DIR *event_dir; DIR *event_dir;
int ret = 0;
event_dir = opendir(dir); event_dir = opendir(dir);
if (!event_dir) if (!event_dir)
return -EINVAL; return -EINVAL;
while (!ret && (evt_ent = readdir(event_dir))) { while ((evt_ent = readdir(event_dir))) {
char path[PATH_MAX]; char path[PATH_MAX];
char *name = evt_ent->d_name; char *name = evt_ent->d_name;
FILE *file; FILE *file;
...@@ -285,17 +284,19 @@ static int pmu_aliases_parse(char *dir, struct list_head *head) ...@@ -285,17 +284,19 @@ static int pmu_aliases_parse(char *dir, struct list_head *head)
snprintf(path, PATH_MAX, "%s/%s", dir, name); snprintf(path, PATH_MAX, "%s/%s", dir, name);
ret = -EINVAL;
file = fopen(path, "r"); file = fopen(path, "r");
if (!file) if (!file) {
break; pr_debug("Cannot open %s\n", path);
continue;
}
ret = perf_pmu__new_alias(head, dir, name, file); if (perf_pmu__new_alias(head, dir, name, file) < 0)
pr_debug("Cannot set up %s\n", name);
fclose(file); fclose(file);
} }
closedir(event_dir); closedir(event_dir);
return ret; return 0;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment