use process::*;
use arch::interrupt::TrapFrame;

pub fn timer() {
    let mut processor = processor();
    processor.tick();
}

pub fn before_return() {
    if let Some(processor) = PROCESSOR.try() {
        processor.lock().schedule();
    }
}

pub fn error(tf: &TrapFrame) -> ! {
    if let Some(processor) = PROCESSOR.try() {
        let mut processor = processor.lock();
        let pid = processor.current_pid();
        error!("Process {} error:\n{:#x?}", pid, tf);
        processor.exit(pid, 0x100); // TODO: Exit code for error
        processor.schedule();
        unreachable!();
    } else {
        panic!("Exception when processor not inited\n{:#x?}", tf);
    }
}