diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2017-08-09 14:40:46 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2017-11-16 10:39:03 +0000 |
commit | 504f065fe20c6db0f4419dd3ef990d2a61df37c3 (patch) | |
tree | f1a3f443f4e3dec873a8f8fec85faa1226406b00 /lib/igt_debugfs.c | |
parent | 88d6550795fad3974d77e4db2f563c5e2e8872e1 (diff) |
lib/debugfs: Make is_mountpoint() non-fatal
is_mountpoint() asserts rather than report the error. Normally this
isn't a problem, except for atypical selftests.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Diffstat (limited to 'lib/igt_debugfs.c')
-rw-r--r-- | lib/igt_debugfs.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/lib/igt_debugfs.c b/lib/igt_debugfs.c index 63a0989e..40cfd87a 100644 --- a/lib/igt_debugfs.c +++ b/lib/igt_debugfs.c @@ -88,18 +88,26 @@ static bool is_mountpoint(const char *path) { char buf[strlen(path) + 4]; - dev_t dot_dev, dotdot_dev; struct stat st; + dev_t dev; igt_assert_lt(snprintf(buf, sizeof(buf), "%s/.", path), sizeof(buf)); - igt_assert_eq(stat(buf, &st), 0); - dot_dev = st.st_dev; + if (stat(buf, &st)) + return false; + + if (!S_ISDIR(st.st_mode)) + return false; + + dev = st.st_dev; igt_assert_lt(snprintf(buf, sizeof(buf), "%s/..", path), sizeof(buf)); - igt_assert_eq(stat(buf, &st), 0); - dotdot_dev = st.st_dev; + if (stat(buf, &st)) + return false; + + if (!S_ISDIR(st.st_mode)) + return false; - return dot_dev != dotdot_dev; + return dev != st.st_dev; } /** @@ -113,16 +121,14 @@ static bool is_mountpoint(const char *path) */ const char *igt_debugfs_mount(void) { - struct stat st; + if (is_mountpoint("/sys/kernel/debug")) + return "/sys/kernel/debug"; - if (stat("/debug/dri", &st) == 0) + if (is_mountpoint("/debug")) return "/debug"; - if (stat("/sys/kernel/debug/dri", &st) == 0) - return "/sys/kernel/debug"; - - igt_assert(is_mountpoint("/sys/kernel/debug") || - mount("debug", "/sys/kernel/debug", "debugfs", 0, 0) == 0); + if (mount("debug", "/sys/kernel/debug", "debugfs", 0, 0)) + return NULL; return "/sys/kernel/debug"; } @@ -155,6 +161,7 @@ char *igt_debugfs_path(int device, char *path, int pathlen) } debugfs_root = igt_debugfs_mount(); + igt_assert(debugfs_root); idx = minor(st.st_rdev); snprintf(path, pathlen, "%s/dri/%d/name", debugfs_root, idx); |