diff --git a/kernel/include/kernel/Panic.h b/kernel/include/kernel/Panic.h index ff70ceac83..45a05d490e 100644 --- a/kernel/include/kernel/Panic.h +++ b/kernel/include/kernel/Panic.h @@ -17,7 +17,11 @@ namespace Kernel static void panic_impl(const char* location, const char* message, Args&&... args) { asm volatile("cli"); + + const bool had_debug_lock = Debug::s_debug_lock.current_processor_has_lock(); derrorln("Kernel panic at {}", location); + if (had_debug_lock) + derrorln(" while having debug lock..."); derrorln(message, BAN::forward(args)...); if (!g_paniced) { diff --git a/kernel/kernel/IDT.cpp b/kernel/kernel/IDT.cpp index df5214fa43..98236ced4d 100644 --- a/kernel/kernel/IDT.cpp +++ b/kernel/kernel/IDT.cpp @@ -360,6 +360,8 @@ done: { if (g_paniced) { + while (Debug::s_debug_lock.current_processor_has_lock()) + Debug::s_debug_lock.unlock(InterruptState::Disabled); dprintln("Processor {} halted", Processor::current_id()); if (InterruptController::is_initialized()) InterruptController::get().broadcast_ipi();