perf tools: Dont stop PMU parsing on alias parse error
[ Upstream commit 940db6dcd3
]
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: Andi 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.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
wifi-calibration
parent
fb1840e257
commit
a6455f2f43
|
@ -263,13 +263,12 @@ static int pmu_aliases_parse(char *dir, struct list_head *head)
|
|||
{
|
||||
struct dirent *evt_ent;
|
||||
DIR *event_dir;
|
||||
int ret = 0;
|
||||
|
||||
event_dir = opendir(dir);
|
||||
if (!event_dir)
|
||||
return -EINVAL;
|
||||
|
||||
while (!ret && (evt_ent = readdir(event_dir))) {
|
||||
while ((evt_ent = readdir(event_dir))) {
|
||||
char path[PATH_MAX];
|
||||
char *name = evt_ent->d_name;
|
||||
FILE *file;
|
||||
|
@ -285,17 +284,19 @@ static int pmu_aliases_parse(char *dir, struct list_head *head)
|
|||
|
||||
snprintf(path, PATH_MAX, "%s/%s", dir, name);
|
||||
|
||||
ret = -EINVAL;
|
||||
file = fopen(path, "r");
|
||||
if (!file)
|
||||
break;
|
||||
if (!file) {
|
||||
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);
|
||||
}
|
||||
|
||||
closedir(event_dir);
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue