Hi Janusz, On 2023-10-09 at 14:28:00 +0200, Janusz Krzysztofik wrote: > We are going to add support for reading a list of kunit test cases > provided by a kunit test module prior to executing those test cases. That --------------------------------------------------------------------- ^^ Two spaces, use only one. > will be done by first loading kunit modules in list only mode, then > reading the list from /dev/kmsg with our KTAP parser. Since that parsing -------------------------------------------------------^^ Same here. > will be performed after the kunit test module is successfully loaded and > there will be no concurrently running modprobe thread, we need to make > synchronization of reads from /dev/kmsg with potential errors modprobe > thread optional. > > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@xxxxxxxxxxxxxxx> Reviewed-by: Kamil Konieczny <kamil.konieczny@xxxxxxxxxxxxxxx> > --- > lib/igt_kmod.c | 50 ++++++++++++++++++++++++++------------------------ > 1 file changed, 26 insertions(+), 24 deletions(-) > > diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c > index fed0855c84..ed41aa1235 100644 > --- a/lib/igt_kmod.c > +++ b/lib/igt_kmod.c > @@ -802,34 +802,36 @@ static int kunit_kmsg_result_get(struct igt_list_head *results, > if (igt_debug_on(igt_kernel_tainted(&taints))) > return -ENOTRECOVERABLE; > > - err = igt_debug_on(sigaction(SIGCHLD, &sigchld, saved)); > - if (err == -1) > - return -errno; > - else if (unlikely(err)) > - return err; > - > - err = pthread_mutex_lock(&modprobe->lock); > - switch (err) { > - case EOWNERDEAD: > - /* leave the mutex unrecoverable */ > - igt_debug_on(pthread_mutex_unlock(&modprobe->lock)); > - __attribute__ ((fallthrough)); > - case ENOTRECOVERABLE: > - igt_debug_on(sigaction(SIGCHLD, saved, NULL)); > - if (igt_debug_on(modprobe->err)) > - return modprobe->err; > - break; > - case 0: > - break; > - default: > - igt_debug("pthread_mutex_lock() error: %d\n", err); > - igt_debug_on(sigaction(SIGCHLD, saved, NULL)); > - return -err; > + if (modprobe) { > + err = igt_debug_on(sigaction(SIGCHLD, &sigchld, saved)); > + if (err == -1) > + return -errno; > + else if (unlikely(err)) > + return err; > + > + err = pthread_mutex_lock(&modprobe->lock); > + switch (err) { > + case EOWNERDEAD: > + /* leave the mutex unrecoverable */ > + igt_debug_on(pthread_mutex_unlock(&modprobe->lock)); > + __attribute__ ((fallthrough)); > + case ENOTRECOVERABLE: > + igt_debug_on(sigaction(SIGCHLD, saved, NULL)); > + if (igt_debug_on(modprobe->err)) > + return modprobe->err; > + break; > + case 0: > + break; > + default: > + igt_debug("pthread_mutex_lock() error: %d\n", err); > + igt_debug_on(sigaction(SIGCHLD, saved, NULL)); > + return -err; > + } > } > > ret = read(fd, record, BUF_LEN); > > - if (!err) { > + if (modprobe && !err) { > igt_debug_on(pthread_mutex_unlock(&modprobe->lock)); > igt_debug_on(sigaction(SIGCHLD, saved, NULL)); > } > -- > 2.42.0 >