summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanusz Krzysztofik <janusz.krzysztofik@linux.intel.com>2020-12-03 19:20:05 +0100
committerJanusz Krzysztofik <janusz.krzysztofik@linux.intel.com>2020-12-07 14:14:02 +0100
commitb1015a3267bbccb985b2fa7e3accb778c7bff0ed (patch)
treea5a3d07eceee5fdc80575b3dc1463ec32920e52f
parent02244f60c98b4e4106b1099ade3439b159ac848e (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.c26
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";