Message ID | 20180903125110.26306-1-chris@chris-wilson.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [i-g-t] lib/pm: Wait a little for sound module load to complete | expand |
Quoting Chris Wilson (2018-09-03 13:51:10) > 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 <chris@chris-wilson.co.uk> > Cc: Imre Deak <imre.deak@linux.com> > --- > lib/igt_pm.c | 22 +++++++++++++++------- > 1 file changed, 15 insertions(+), 7 deletions(-) > > diff --git a/lib/igt_pm.c b/lib/igt_pm.c > index 339a51e6f..e383f18b5 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(dir, de->d_name, O_RDONLY); s/dir/dirfd(dir)/ -Chris
diff --git a/lib/igt_pm.c b/lib/igt_pm.c index 339a51e6f..e383f18b5 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(dir, de->d_name, O_RDONLY); + igt_assert_fd(base); + + do { + fd = open(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);
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 <chris@chris-wilson.co.uk> Cc: Imre Deak <imre.deak@linux.com> --- lib/igt_pm.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)