]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ktest: Stop dropping console output during power-cycle reboot
authorRicardo B. Marlière <rbm@suse.com>
Sat, 7 Mar 2026 22:08:01 +0000 (19:08 -0300)
committerSteven Rostedt <rostedt@goodmis.org>
Mon, 9 Mar 2026 14:32:07 +0000 (10:32 -0400)
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.

Cc: John Hawley <warthog9@eaglescrag.net>
Cc: Andrea Righi <arighi@nvidia.com>
Cc: Marcos Paulo de Souza <mpdesouza@suse.com>
Cc: Matthieu Baerts <matttbe@kernel.org>
Cc: Fernando Fernandez Mancera <fmancera@suse.de>
Cc: Pedro Falcato <pfalcato@suse.de>
Link: https://patch.msgid.link/20260307-ktest-fixes-v1-6-565d412f4925@suse.com
Signed-off-by: Ricardo B. Marlière <rbm@suse.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
tools/testing/ktest/ktest.pl

index 9d6f50045dbd2c54ac788607c71c09bb43b872e1..bd2e2311884c4cd635a1fca4b19264d20cd4cdef 100755 (executable)
@@ -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