diff --git a/src/kernel/interrupt_isrs.inc b/src/kernel/interrupt_isrs.inc index 2cd76b7..6d1e700 100644 --- a/src/kernel/interrupt_isrs.inc +++ b/src/kernel/interrupt_isrs.inc @@ -241,7 +241,6 @@ ISR (0xe0, 0, isrTimer) ISR (0xe1, 0, isrLINT0) ISR (0xe2, 0, isrLINT1) ISR (0xe3, 0, isrAPICError) -ISR (0xe4, 0, isrAssert) ISR (0xef, 0, isrSpurious) diff --git a/src/kernel/interrupts.cpp b/src/kernel/interrupts.cpp index 15ac31e..b6e2bfc 100644 --- a/src/kernel/interrupts.cpp +++ b/src/kernel/interrupts.cpp @@ -83,8 +83,11 @@ disable_legacy_pic() void isr_handler(cpu_state *regs) { - console *cons = console::get(); uint8_t vector = regs->interrupt & 0xff; + if ((vector & 0xf0) == 0xf0) { + *reinterpret_cast(apic_eoi_addr) = 0; + return; + } // Clear out the IST for this vector so we just keep using // this stack @@ -169,31 +172,6 @@ isr_handler(cpu_state *regs) // No EOI for the spurious interrupt return; - case isr::isrIgnore0: - case isr::isrIgnore1: - case isr::isrIgnore2: - case isr::isrIgnore3: - case isr::isrIgnore4: - case isr::isrIgnore5: - case isr::isrIgnore6: - case isr::isrIgnore7: - //cons->printf("\nIGNORED: %02x\n", regs->interrupt); - outb(PIC1, 0x20); - break; - - case isr::isrIgnore8: - case isr::isrIgnore9: - case isr::isrIgnoreA: - case isr::isrIgnoreB: - case isr::isrIgnoreC: - case isr::isrIgnoreD: - case isr::isrIgnoreE: - case isr::isrIgnoreF: - //cons->printf("\nIGNORED: %02x\n", regs->interrupt); - outb(PIC1, 0x20); - outb(PIC2, 0x20); - break; - default: snprintf(message, sizeof(message), "Unknown interrupt 0x%x", regs->interrupt); kassert(false, message);