From 6b606771b53c6547eaed13fa251f68d76180eae8 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Mon, 26 Jul 2021 00:10:41 +0430 Subject: [PATCH] Kernel: Reset on panic in self-test mode This makes a kernel panic immediately fail the on-target CI job. Otherwise the failed job looks like a test timeout unless one digs into the details of the job. --- Kernel/Panic.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Kernel/Panic.cpp b/Kernel/Panic.cpp index d1cb615973..5e754b7c32 100644 --- a/Kernel/Panic.cpp +++ b/Kernel/Panic.cpp @@ -6,16 +6,29 @@ #include #include +#include #include #include namespace Kernel { +[[noreturn]] static void __reset() +{ + // FIXME: This works for i686/x86_64, but needs to be ported to any other arch when needed. + asm( + "lidt 0\n" + "movl $0, 0\n"); + + __builtin_unreachable(); +} + void __panic(const char* file, unsigned int line, const char* function) { critical_dmesgln("at {}:{} in {}", file, line, function); dump_backtrace(); - Processor::halt(); + if (kernel_command_line().boot_mode() == BootMode::SelfTest) + __reset(); + else + Processor::halt(); } - }