From 327fa0bd0cf8c56a5bcc5c269b359114d4b36777 Mon Sep 17 00:00:00 2001 From: apio Date: Tue, 1 Nov 2022 12:34:15 +0100 Subject: [PATCH] Kernel: Guard the IDT behind a mutex --- moon/src/arch/x86_64/interrupts.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/moon/src/arch/x86_64/interrupts.rs b/moon/src/arch/x86_64/interrupts.rs index dc206acf..89628dbb 100644 --- a/moon/src/arch/x86_64/interrupts.rs +++ b/moon/src/arch/x86_64/interrupts.rs @@ -1,8 +1,9 @@ use x86_64::structures::idt::{InterruptDescriptorTable, InterruptStackFrame, PageFaultErrorCode}; use crate::try_println; use core::arch::asm; +use spin::Mutex; -static mut IDT: InterruptDescriptorTable = InterruptDescriptorTable::new(); +static IDT: Mutex = Mutex::new(InterruptDescriptorTable::new()); extern "x86-interrupt" fn breakpoint_handler(stack_frame: InterruptStackFrame) { @@ -20,11 +21,12 @@ extern "x86-interrupt" fn double_fault_handler(stack_frame: InterruptStackFrame, pub fn load() { + IDT.lock().breakpoint.set_handler_fn(breakpoint_handler); + IDT.lock().page_fault.set_handler_fn(page_fault_handler); + IDT.lock().double_fault.set_handler_fn(double_fault_handler); + unsafe { - IDT.breakpoint.set_handler_fn(breakpoint_handler); - IDT.page_fault.set_handler_fn(page_fault_handler); - IDT.double_fault.set_handler_fn(double_fault_handler); - IDT.load(); + IDT.lock().load_unsafe(); } }