"CLEAR_LOG"                        => 0,
     "BISECT_MANUAL"            => 0,
     "BISECT_SKIP"              => 1,
+    "BISECT_TRIES"             => 1,
     "MIN_CONFIG_TYPE"          => "boot",
     "SUCCESS_LINE"             => "login:",
     "DETECT_TRIPLE_FAULT"      => 1,
 my $reverse_bisect;
 my $bisect_manual;
 my $bisect_skip;
+my $bisect_tries;
 my $config_bisect_good;
 my $bisect_ret_good;
 my $bisect_ret_bad;
     "IGNORE_ERRORS"            => \$ignore_errors,
     "BISECT_MANUAL"            => \$bisect_manual,
     "BISECT_SKIP"              => \$bisect_skip,
+    "BISECT_TRIES"             => \$bisect_tries,
     "CONFIG_BISECT_GOOD"       => \$config_bisect_good,
     "BISECT_RET_GOOD"          => \$bisect_ret_good,
     "BISECT_RET_BAD"           => \$bisect_ret_bad,
        $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;
     }
 
+    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?
     if ($reverse_bisect && $ret >= 0) {
        $ret = !$ret;
 
 #   BISECT_BAD with BISECT_CHECK = good or
 #   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)
 #
 #   In case the specificed test returns something other than just