@@ -454,12 +454,12 @@ static int __open_primary(int dir)
int len;
fd = openat(dir, "dev", O_RDONLY);
- if (fd < 0)
+ if (igt_debug_on(fd < 0))
return dir;
len = read(fd, buf, sizeof(buf) - 1);
close(fd);
- if (len <= 0)
+ if (igt_debug_on(len <= 0))
return dir;
buf[len] = '\0';
@@ -467,7 +467,7 @@ static int __open_primary(int dir)
if (minor < 64)
return dir;
- if (readlinkat(dir, "device", target, sizeof(target)) < 0)
+ if (igt_debug_on(readlinkat(dir, "device", target, sizeof(target)) < 0))
return dir;
fd = openat(dir, "..", O_RDONLY);
@@ -500,24 +500,27 @@ static FILE *__open_attr(int dir, const char *mode, ...)
va_list ap;
/* The attributes are not to be found on render nodes */
- dir = __open_primary(dir);
+ igt_debug_on((dir = __open_primary(dir)) < 0);
va_start(ap, mode);
while (dir >= 0 && (path = va_arg(ap, const char *))) {
int fd;
- fd = openat(dir, path, O_RDONLY);
+ igt_debug_on_f((fd = openat(dir, path, O_RDONLY)) < 0,
+ "failed component: %s", path);
close(dir);
dir = fd;
}
va_end(ap);
+ if (dir < 0)
+ return NULL;
if (*mode != 'r') /* clumsy, but fun */
- dir = reopen(dir, O_RDWR);
+ igt_debug_on((dir = reopen(dir, O_RDWR)) < 0);
file = fdopen(dir, mode);
- if (!file) {
+ if (igt_debug_on(!file)) {
close(dir);
return NULL;
}
@@ -554,7 +557,7 @@ int gem_engine_property_printf(int i915, const char *engine, const char *attr,
file = __open_attr(igt_sysfs_open(i915), "w",
"engine", engine, attr, NULL);
- if (!file)
+ if (igt_debug_on(!file))
return -1;
va_start(ap, fmt);
@@ -186,7 +186,7 @@ char *igt_sysfs_path(int device, char *path, int pathlen)
snprintf(path, pathlen, "/sys/dev/char/%d:%d",
major(st.st_rdev), minor(st.st_rdev));
- if (access(path, F_OK))
+ if (igt_debug_on(access(path, F_OK)))
return NULL;
return path;
@@ -206,7 +206,7 @@ int igt_sysfs_open(int device)
{
char path[80];
- if (!igt_sysfs_path(device, path, sizeof(path)))
+ if (igt_debug_on(!igt_sysfs_path(device, path, sizeof(path))))
return -1;
return open(path, O_RDONLY);
On an attempt to resolve the issue of mysteriously failing updates of sysfs entries representing engine preempt timeout values, add debug messages to error paths of involved library functions. v2: No changes. v3: Add still more debug messages. Link: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/6268 Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com> --- lib/i915/gem_engine_topology.c | 19 +++++++++++-------- lib/igt_sysfs.c | 4 ++-- 2 files changed, 13 insertions(+), 10 deletions(-)