On Fri,  8 Sep 2023 14:32:45 +0200
Janusz Krzysztofik <[email protected]> wrote:

> Similar to how igt_kselftest() handles kernel taints, fail current dynamic
> sub-subtest and skip remaining ones when a kernel taint is detected during
> execution of kunit test cases.
> 
> Signed-off-by: Janusz Krzysztofik <[email protected]>

Yeah, makes sense to me.

Reviewed-by: Mauro Carvalho Chehab <[email protected]>

> ---
>  lib/igt_kmod.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/igt_kmod.c b/lib/igt_kmod.c
> index 020df286b8..988ac164cb 100644
> --- a/lib/igt_kmod.c
> +++ b/lib/igt_kmod.c
> @@ -761,6 +761,7 @@ static void __igt_kunit(struct igt_ktest *tst, const char 
> *opts)
>       bool is_builtin;
>       struct ktap_test_results *results;
>       struct ktap_test_results_element *temp;
> +     unsigned long taints;
>       int flags, ret;
>  
>       igt_skip_on_f(tst->kmsg < 0, "Could not open /dev/kmsg\n");
> @@ -785,12 +786,20 @@ static void __igt_kunit(struct igt_ktest *tst, const 
> char *opts)
>  
>       while (READ_ONCE(results->still_running) || READ_ONCE(results->head) != 
> NULL)
>       {
> +             if (igt_kernel_tainted(&taints)) {
> +                     ktap_parser_cancel();
> +                     break;
> +             }
> +
>               if (READ_ONCE(results->head) != NULL) {
>                       pthread_mutex_lock(&results->mutex);
>  
> -                     igt_dynamic(results->head->test_name)
> +                     igt_dynamic(results->head->test_name) {
>                               igt_assert(READ_ONCE(results->head->passed));
>  
> +                             igt_fail_on(igt_kernel_tainted(&taints));
> +                     }
> +
>                       temp = results->head;
>                       results->head = results->head->next;
>                       free(temp);
> @@ -801,6 +810,7 @@ static void __igt_kunit(struct igt_ktest *tst, const char 
> *opts)
>  
>       ret = ktap_parser_stop();
>  
> +     igt_skip_on(igt_kernel_tainted(&taints));
>       igt_skip_on_f(ret, "KTAP parser failed\n");
>  }
>  

Reply via email to