/// Handler for a vector that we're not expecting.
///
/// TODO: Right now we terminate kernel.
/// Should log error and resume.
Handler for a vector that we're not expecting.
TODO: Right now we terminate kernel.
Should log error and resume.
Handler for a vector that we ' re not expecting . TODO : Right now we terminate kernel . Should log error and resume .
unsafe fn unhandled_irq(a: &ExceptionArguments) {
    sprint!("\n[IRQ] UNHANDLED:");
    if a.vector < 16 {
        let desc = &EXCEPTIONS[a.vector as usize];
        sprintln!(" {}", desc);
    } else {
        sprintln!(" dev vector {}", a.vector);
    }
    sprintln!("{:?}", a);
    backtrace();
    let kcb = get_kcb();
    sprintln!("Register State:\n{:?}", kcb.arch.save_area);
    if !kcb.in_panic_mode {
        kcb.arch.save_area.as_ref().map(|sa| {
            backtrace_from(sa.rbp, sa.rsp, sa.rip);
        });
    }
    debug::shutdown(ExitReason::UnhandledInterrupt);
}
unsafe fn unhandled_irq ( a : & ExceptionArguments ) { sprint ! ( " \n " ) ; if a . vector < 16 { let desc = & EXCEPTIONS [ a . vector as usize ] ; sprintln ! ( " " desc ) ; } else { sprintln ! ( " " a vector ) ; } sprintln ! ( " " a ) ; backtrace ( ) ; let kcb = get_kcb ( ) ; sprintln ! ( " \n " kcb arch save_area ) ; if ! kcb . in_panic_mode { kcb . arch . save_area . as_ref ( ) . map ( | sa | { backtrace_from ( sa . rbp , sa . rsp , sa . rip ) ; } ) ; } debug :: shutdown ( ExitReason :: UnhandledInterrupt ) ; }
Handler for a vector that we're not expecting.
Handler for a vector that we ' re not expecting .
a
&ExceptionArguments