Skip to content

Commit f0150ca

Browse files
jounathaenmkroening
andcommitted
fix(interrupts): only handle PIC interrupts
Co-authored-by: Martin Kröning <martin.kroening@eonerc.rwth-aachen.de>
1 parent f698d04 commit f0150ca

1 file changed

Lines changed: 7 additions & 5 deletions

File tree

src/arch/x86_64/kernel/interrupts.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use x86_64::structures::idt::InterruptDescriptorTable;
1313
pub use x86_64::structures::idt::InterruptStackFrame as ExceptionStackFrame;
1414

1515
use crate::arch::x86_64::kernel::core_local::{core_scheduler, increment_irq_counter};
16+
use crate::arch::x86_64::kernel::pic::PIC1_OFFSET;
1617
use crate::arch::x86_64::kernel::{apic, processor};
1718
use crate::arch::x86_64::mm::paging::{BasePageSize, PageSize, page_fault_handler};
1819
use crate::arch::x86_64::swapgs;
@@ -91,11 +92,12 @@ pub(crate) fn enable_and_wait() {
9192
pub(crate) fn install() {
9293
let mut idt = IDT.lock();
9394

94-
set_general_handler!(&mut *idt, abort, 0..32);
95-
set_general_handler!(&mut *idt, handle_interrupt, 32..);
95+
set_general_handler!(&mut *idt, abort, 0..PIC1_OFFSET);
96+
set_general_handler!(&mut *idt, handle_interrupt, PIC1_OFFSET..PIC1_OFFSET + 16);
97+
set_general_handler!(&mut *idt, abort, PIC1_OFFSET..);
9698

9799
unsafe {
98-
for i in 32..=255 {
100+
for i in PIC1_OFFSET..PIC1_OFFSET + 16 {
99101
let addr = idt[i].handler_addr();
100102
idt[i].set_handler_addr(addr).set_stack_index(0);
101103
}
@@ -175,7 +177,7 @@ fn handle_interrupt(stack_frame: ExceptionStackFrame, index: u8, _error_code: Op
175177
use crate::scheduler::PerCoreSchedulerExt;
176178

177179
if let Some(handlers) = IRQ_HANDLERS.get()
178-
&& let Some(map) = handlers.get(&(index - 32))
180+
&& let Some(map) = handlers.get(&(index - PIC1_OFFSET))
179181
{
180182
for handler in map.iter() {
181183
handler();
@@ -336,7 +338,7 @@ extern "x86-interrupt" fn virtualization_exception(stack_frame: ExceptionStackFr
336338

337339
pub(crate) fn add_irq_name(irq_number: u8, name: &'static str) {
338340
debug!("Register name \"{name}\" for interrupt {irq_number}");
339-
IRQ_NAMES.lock().insert(32 + irq_number, name);
341+
IRQ_NAMES.lock().insert(PIC1_OFFSET + irq_number, name);
340342
}
341343

342344
fn get_irq_name(irq_number: u8) -> Option<&'static str> {

0 commit comments

Comments
 (0)