[PATCH 6/9] ktest: Stop dropping console output during power-cycle reboot

From: Ricardo B. Marlière

Date: Sat Mar 07 2026 - 17:10:15 EST


The POWER_CYCLE fallback added to reboot() flushes monitor output at the
wrong time. In the untimed reboot path, flushing immediately after
start_monitor() can consume the first output from the new boot before
monitor() begins reading it. In the timed path, flushing after POWER_CYCLE
can eat the "Linux version" banner or REBOOT_SUCCESS_LINE from the new
kernel.

That makes ktest miss the boot it is waiting for and can trigger an
unnecessary second power cycle.

Start the monitor before POWER_CYCLE so the reference counting stays
balanced, but only flush when reboot() was asked to wait for a timed
reboot. Perform that flush before issuing POWER_CYCLE so it drains stale
output from the old kernel instead of consuming the next boot.

Signed-off-by: Ricardo B. Marlière <rbm@xxxxxxxx>
---
tools/testing/ktest/ktest.pl | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/tools/testing/ktest/ktest.pl b/tools/testing/ktest/ktest.pl
index 9d6f50045dbd..bd2e2311884c 100755
--- a/tools/testing/ktest/ktest.pl
+++ b/tools/testing/ktest/ktest.pl
@@ -1499,12 +1499,13 @@ sub reboot {
}

if ($powercycle) {
- run_command "$power_cycle";
-
start_monitor;
- # flush out current monitor
- # May contain the reboot success line
- wait_for_monitor 1;
+ if (defined($time)) {
+ # Flush stale console output from the old kernel before power-cycling.
+ wait_for_monitor 1;
+ }
+
+ run_command "$power_cycle";

} else {
# Make sure everything has been written to disk

--
2.53.0