[igt-dev] [PATCH i-g-t] runner: Make sure output is still collected when killing test due to taint

Chris Wilson chris at chris-wilson.co.uk
Tue Jan 28 12:01:15 UTC 2020


Quoting Petri Latvala (2020-01-28 11:48:01)
> If the kernel is tainted, it stays tainted, so make sure the execution
> monitoring still reaches the output collectors and other fd change
> handlers.
> 
> Reported-by: Chris Wilson <chris at chris-wilson.co.uk>
> Signed-off-by: Petri Latvala <petri.latvala at intel.com>
> ---
>  runner/executor.c | 45 +++++++++++++++++++++++++++++----------------
>  1 file changed, 29 insertions(+), 16 deletions(-)
> 
> diff --git a/runner/executor.c b/runner/executor.c
> index 0927d1fd..ca9a12e3 100644
> --- a/runner/executor.c
> +++ b/runner/executor.c
> @@ -759,28 +759,41 @@ static int monitor_output(pid_t child,
>                         return -1;
>                 }
>  
> -               if (settings->abort_mask & ABORT_TAINT && tainted(&taints)) /* cancel children after a kernel OOPS */
> -                       n = 0, intervals_left = 1;
> +               /*
> +                * If we're configured to care about taints, kill the
> +                * test if there's a taint. But only if we didn't
> +                * already kill it, and make sure we still process the
> +                * fds select() marked for us.
> +                */
> +               if (settings->abort_mask & ABORT_TAINT &&
> +                   tainted(&taints) &&
> +                   killed == 0) {
> +                       if (settings->log_level >= LOG_LEVEL_NORMAL) {
> +                               outf("Killing the test because the kernel is tainted.\n");
> +                               fflush(stdout);
> +                       }
>  
> -               if (n == 0) {
> +                       killed = SIGQUIT;
> +                       if (!kill_child(killed, child))
> +                               return -1;
> +
> +                       /*
> +                        * Now continue the loop and let the
> +                        * dying child be handled normally.
> +                        */
> +                       timeout = 20;
> +                       watchdogs_set_timeout(120);
> +                       intervals_left = timeout_intervals = 1;

Ok, that seems to be equivalent to what went before (the attempt to
suppress show_kernel_task_state()), with the new feature of killing if we
ever wake up and see the system tainted (for the first time).

Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris


More information about the igt-dev mailing list