Skip to main content

kernel/arch/x86_64/interrupts/exceptions/
_18_machine_check.rs

1// SPDX-License-Identifier: GPL-3.0-only
2//! Machine-check exception handler (vector 18, `#MC`).
3//!
4//! Known limitation: `kernel_panic` takes `IrqMutex` locks, so an MCE fired while
5//! one is held can deadlock (TODO #21).
6//!
7//! Authors: MarioS271
8
9use core::fmt::Write;
10use x86_64::structures::idt::InterruptStackFrame;
11use crate::types::fmt_buffer::FmtBuffer;
12use crate::panic::kernel_panic;
13use crate::types::panic_codes::PanicCode;
14
15/// Panic with the interrupt stack frame. Never returns.
16pub extern "x86-interrupt" fn handler(
17    isf: InterruptStackFrame
18) -> ! {
19    let mut fmt_buffer = FmtBuffer::<512>::new();
20    let _ = write!(&mut fmt_buffer, "{:#?}\n", isf);
21    kernel_panic(
22        PanicCode::MachineCheck,
23        fmt_buffer.as_str(),
24    );
25}