ktest: Add BISECT_TRIES to bisect test
For those cases that it takes several tries to hit a bug, it would be useful for ktest.pl to try a test multiple times before it considers the test as a pass. To accomplish this, BISECT_TRIES ktest config option has been added. It is default to one, as most of the time a bisect only needs to try a test once. But the user can now up this to make ktest run a given test multiple times. The first failure that is detected will set a bisect bad. It only repeats on success. Note, as with all race bugs, there's no guarantee that if it succeeds, it is really a good bisect. But it helps in case the bug is somewhat reliable. You can set BISECT_TRIES to zero, and all tests will be considered good, unless you also set BISECT_MANUAL. Suggested-by: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
c75d22d9c6
commit
961d9cacee
2 changed files with 36 additions and 2 deletions
|
@ -41,6 +41,7 @@ my %default = (
|
||||||
"CLEAR_LOG" => 0,
|
"CLEAR_LOG" => 0,
|
||||||
"BISECT_MANUAL" => 0,
|
"BISECT_MANUAL" => 0,
|
||||||
"BISECT_SKIP" => 1,
|
"BISECT_SKIP" => 1,
|
||||||
|
"BISECT_TRIES" => 1,
|
||||||
"MIN_CONFIG_TYPE" => "boot",
|
"MIN_CONFIG_TYPE" => "boot",
|
||||||
"SUCCESS_LINE" => "login:",
|
"SUCCESS_LINE" => "login:",
|
||||||
"DETECT_TRIPLE_FAULT" => 1,
|
"DETECT_TRIPLE_FAULT" => 1,
|
||||||
|
@ -139,6 +140,7 @@ my $bisect_bad_commit = "";
|
||||||
my $reverse_bisect;
|
my $reverse_bisect;
|
||||||
my $bisect_manual;
|
my $bisect_manual;
|
||||||
my $bisect_skip;
|
my $bisect_skip;
|
||||||
|
my $bisect_tries;
|
||||||
my $config_bisect_good;
|
my $config_bisect_good;
|
||||||
my $bisect_ret_good;
|
my $bisect_ret_good;
|
||||||
my $bisect_ret_bad;
|
my $bisect_ret_bad;
|
||||||
|
@ -276,6 +278,7 @@ my %option_map = (
|
||||||
"IGNORE_ERRORS" => \$ignore_errors,
|
"IGNORE_ERRORS" => \$ignore_errors,
|
||||||
"BISECT_MANUAL" => \$bisect_manual,
|
"BISECT_MANUAL" => \$bisect_manual,
|
||||||
"BISECT_SKIP" => \$bisect_skip,
|
"BISECT_SKIP" => \$bisect_skip,
|
||||||
|
"BISECT_TRIES" => \$bisect_tries,
|
||||||
"CONFIG_BISECT_GOOD" => \$config_bisect_good,
|
"CONFIG_BISECT_GOOD" => \$config_bisect_good,
|
||||||
"BISECT_RET_GOOD" => \$bisect_ret_good,
|
"BISECT_RET_GOOD" => \$bisect_ret_good,
|
||||||
"BISECT_RET_BAD" => \$bisect_ret_bad,
|
"BISECT_RET_BAD" => \$bisect_ret_bad,
|
||||||
|
@ -2584,12 +2587,29 @@ sub run_bisect {
|
||||||
$buildtype = "useconfig:$minconfig";
|
$buildtype = "useconfig:$minconfig";
|
||||||
}
|
}
|
||||||
|
|
||||||
my $ret = run_bisect_test $type, $buildtype;
|
# If the user sets bisect_tries to less than 1, then no tries
|
||||||
|
# is a success.
|
||||||
|
my $ret = 1;
|
||||||
|
|
||||||
if ($bisect_manual) {
|
# Still let the user manually decide that though.
|
||||||
|
if ($bisect_tries < 1 && $bisect_manual) {
|
||||||
$ret = answer_bisect;
|
$ret = answer_bisect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (my $i = 0; $i < $bisect_tries; $i++) {
|
||||||
|
if ($bisect_tries > 1) {
|
||||||
|
my $t = $i + 1;
|
||||||
|
doprint("Running bisect trial $t of $bisect_tries:\n");
|
||||||
|
}
|
||||||
|
$ret = run_bisect_test $type, $buildtype;
|
||||||
|
|
||||||
|
if ($bisect_manual) {
|
||||||
|
$ret = answer_bisect;
|
||||||
|
}
|
||||||
|
|
||||||
|
last if (!$ret);
|
||||||
|
}
|
||||||
|
|
||||||
# Are we looking for where it worked, not failed?
|
# Are we looking for where it worked, not failed?
|
||||||
if ($reverse_bisect && $ret >= 0) {
|
if ($reverse_bisect && $ret >= 0) {
|
||||||
$ret = !$ret;
|
$ret = !$ret;
|
||||||
|
|
|
@ -1028,6 +1028,20 @@
|
||||||
# BISECT_BAD with BISECT_CHECK = good or
|
# BISECT_BAD with BISECT_CHECK = good or
|
||||||
# BISECT_CHECK = bad, respectively.
|
# BISECT_CHECK = bad, respectively.
|
||||||
#
|
#
|
||||||
|
# BISECT_TRIES = 5 (optional, default 1)
|
||||||
|
#
|
||||||
|
# For those cases that it takes several tries to hit a bug,
|
||||||
|
# the BISECT_TRIES is useful. It is the number of times the
|
||||||
|
# test is ran before it says the kernel is good. The first failure
|
||||||
|
# will stop trying and mark the current SHA1 as bad.
|
||||||
|
#
|
||||||
|
# Note, as with all race bugs, there's no guarantee that if
|
||||||
|
# it succeeds, it is really a good bisect. But it helps in case
|
||||||
|
# the bug is some what reliable.
|
||||||
|
#
|
||||||
|
# You can set BISECT_TRIES to zero, and all tests will be considered
|
||||||
|
# good, unless you also set BISECT_MANUAL.
|
||||||
|
#
|
||||||
# BISECT_RET_GOOD = 0 (optional, default undefined)
|
# BISECT_RET_GOOD = 0 (optional, default undefined)
|
||||||
#
|
#
|
||||||
# In case the specificed test returns something other than just
|
# In case the specificed test returns something other than just
|
||||||
|
|
Loading…
Reference in a new issue