diff options
author | Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com> | 2020-12-03 19:20:05 +0100 |
---|---|---|
committer | Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com> | 2020-12-07 14:14:02 +0100 |
commit | b1015a3267bbccb985b2fa7e3accb778c7bff0ed (patch) | |
tree | a5a3d07eceee5fdc80575b3dc1463ec32920e52f | |
parent | 02244f60c98b4e4106b1099ade3439b159ac848e (diff) |
runner: Don't kill a test on taint if watching timeouts
We may still be interested in results of a test even if it has tainted
the kernel. On the other hand, we need to kill the test on taint if no
other means of killing it on a jam is active.
If abort on both kernel taint or a timeout is requested, decrease all
potential timeouts significantly while the taint is detected instead of
aborting immediately. However, report the taint as the reason of the
abort if a timeout decreased by the taint expires.
v2: Fix missing show_kernel_task_state() lost on rebase conflict
resolution (Chris - thanks!)
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
Reviewed-by: Petri Latvala <petri.latvala@intel.com>
-rw-r--r-- | runner/executor.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/runner/executor.c b/runner/executor.c index 1688ae41..faf272d8 100644 --- a/runner/executor.c +++ b/runner/executor.c @@ -726,6 +726,8 @@ static const char *need_to_timeout(struct settings *settings, double time_since_kill, size_t disk_usage) { + int decrease = 1; + if (killed) { /* * Timeout after being killed is a hardcoded amount @@ -753,20 +755,32 @@ static const char *need_to_timeout(struct settings *settings, } /* - * If we're configured to care about taints, kill the - * test if there's a taint. + * If we're configured to care about taints, + * decrease timeouts in use if there's a taint, + * or kill the test if no timeouts have been requested. */ if (settings->abort_mask & ABORT_TAINT && - is_tainted(taints)) - return "Killing the test because the kernel is tainted.\n"; + is_tainted(taints)) { + /* list of timeouts that may postpone immediate kill on taint */ + if (settings->per_test_timeout || settings->inactivity_timeout) + decrease = 10; + else + return "Killing the test because the kernel is tainted.\n"; + } if (settings->per_test_timeout != 0 && - time_since_subtest > settings->per_test_timeout) + time_since_subtest > settings->per_test_timeout / decrease) { + if (decrease > 1) + return "Killing the test because the kernel is tainted.\n"; return show_kernel_task_state("Per-test timeout exceeded. Killing the current test with SIGQUIT.\n"); + } if (settings->inactivity_timeout != 0 && - time_since_activity > settings->inactivity_timeout) + time_since_activity > settings->inactivity_timeout / decrease ) { + if (decrease > 1) + return "Killing the test because the kernel is tainted.\n"; return show_kernel_task_state("Inactivity timeout exceeded. Killing the current test with SIGQUIT.\n"); + } if (disk_usage_limit_exceeded(settings, disk_usage)) return "Disk usage limit exceeded.\n"; |