From 925fbed79fd71ff998a962f12f7a8bb18c06abd7 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Mon, 3 Sep 2018 13:47:49 +0100 Subject: lib/pm: Wait a little for sound module load to complete Sometimes we may probe the sound module as it is still being registered and its debugfs not yet fully populated. If we do not find a file we expect to exist, sleep a little and check again. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107801 Signed-off-by: Chris Wilson Cc: Imre Deak Reviewed-by: Imre Deak --- lib/igt_pm.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'lib/igt_pm.c') diff --git a/lib/igt_pm.c b/lib/igt_pm.c index b1f359d8..e86fa4a4 100644 --- a/lib/igt_pm.c +++ b/lib/igt_pm.c @@ -154,20 +154,28 @@ static int __igt_pm_enable_audio_runtime_pm(void) while ((de = readdir(dir))) { const char *match = "hwC"; char buf[32] = { }; /* for Valgrind */ - char *tmp; + int loops = 500; + int base; int ret; if (de->d_type != DT_LNK || strncmp(de->d_name, match, strlen(match))) continue; - igt_assert(asprintf(&tmp, - "/sys/class/sound/%s/vendor_name", - de->d_name)); + base = openat(dirfd(dir), de->d_name, O_RDONLY); + igt_assert_fd(base); + + do { + fd = openat(base, "vendor_name", O_RDONLY); + if (fd < 0) /* module is still loading? */ + usleep(1000); + else + break; + } while (--loops); + close(base); + if (fd < 0) + continue; - fd = open(tmp, O_RDONLY); - free(tmp); - igt_assert_fd(fd); ret = read(fd, buf, sizeof(buf)); close(fd); igt_assert(ret > 0); -- cgit v1.2.3