diff options
Diffstat (limited to 'kernel/cpu/idt.c')
-rw-r--r-- | kernel/cpu/idt.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/kernel/cpu/idt.c b/kernel/cpu/idt.c index 3d866e5..ec7ca63 100644 --- a/kernel/cpu/idt.c +++ b/kernel/cpu/idt.c @@ -1,4 +1,6 @@ +#include <cpu/arch_inst.h> #include <cpu/idt.h> +#include <interrupts.h> #include <sched/scheduler.h> #include <stdio.h> @@ -52,25 +54,20 @@ void general_protection_fault(reg_t *regs) { kprintf(" Error Code: %x\n", regs->error_code); kprintf("Instruction Pointer: %x\n", regs->eip); dump_backtrace(12); - asm("hlt"); - for (;;) - ; + halt(); EOI(0xD - 8); } void double_fault(registers_t *regs) { (void)regs; klog("DOUBLE FAULT", LOG_ERROR); - asm("hlt"); - for (;;) - ; + halt(); } void page_fault(reg_t *regs) { - volatile uint32_t cr2; - asm volatile("mov %%cr2, %0" : "=r"(cr2)); + uint32_t cr2 = get_cr2(); if (0xDEADC0DE == cr2) { - asm("cli"); + disable_interrupts(); EOI(0xB); process_pop_restore_context(NULL, regs); return; @@ -105,9 +102,7 @@ void page_fault(reg_t *regs) { } dump_backtrace(12); - asm("hlt"); - for (;;) - ; + halt(); } static inline void io_wait(void) { |