From 9232736bf1c46f5166d45fae9c9c26819392c82f Mon Sep 17 00:00:00 2001
From: 4lDO2 <4lDO2@protonmail.com>
Date: Tue, 21 Apr 2020 19:32:51 +0200
Subject: [PATCH] Rename some things, and fix a map insertion.

---
 src/arch/x86_64/idt.rs   | 13 +++++++++----
 src/arch/x86_64/start.rs |  2 +-
 2 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/src/arch/x86_64/idt.rs b/src/arch/x86_64/idt.rs
index 5d321da..d519305 100644
--- a/src/arch/x86_64/idt.rs
+++ b/src/arch/x86_64/idt.rs
@@ -129,21 +129,26 @@ const fn new_idt_reservations() -> [AtomicU64; 4] {
     [AtomicU64::new(0), AtomicU64::new(0), AtomicU64::new(0), AtomicU64::new(0)]
 }
 
+/// Initialize the IDT for a
 pub unsafe fn init_paging_post_heap(is_bsp: bool, cpu_id: usize) {
     let mut idts_guard = IDTS.write();
     let idts_btree = idts_guard.get_or_insert_with(|| BTreeMap::new());
-    let idt = idts_btree.entry(cpu_id).or_insert_with(|| Box::leak(Box::new(Idt::new())));
 
     if is_bsp {
-        *idt = &mut INIT_BSP_IDT;
+        idts_btree.insert(cpu_id, &mut INIT_BSP_IDT);
     } else {
-        init_generic(is_bsp, idt)
+        let idt = idts_btree.entry(cpu_id).or_insert_with(|| Box::leak(Box::new(Idt::new())));
+        init_generic(is_bsp, idt);
     }
 }
-pub unsafe fn init_paging() {
+
+/// Initializes a fully functional IDT for use before it be moved into the map. This is ONLY called
+/// on the BSP, since the kernel heap is ready for the APs.
+pub unsafe fn init_paging_bsp() {
     init_generic(true, &mut INIT_BSP_IDT);
 }
 
+/// Initializes an IDT for any type of processor.
 pub unsafe fn init_generic(is_bsp: bool, idt: &mut Idt) {
     let (current_idt, current_reservations) = (&mut idt.entries, &mut idt.reservations);
 
diff --git a/src/arch/x86_64/start.rs b/src/arch/x86_64/start.rs
index cb97da4..8438079 100644
--- a/src/arch/x86_64/start.rs
+++ b/src/arch/x86_64/start.rs
@@ -109,7 +109,7 @@ pub unsafe extern fn kstart(args_ptr: *const KernelArgs) -> ! {
         gdt::init_paging(tcb_offset, stack_base + stack_size);
 
         // Set up IDT
-        idt::init_paging();
+        idt::init_paging_bsp();
 
         // Set up syscall instruction
         interrupt::syscall::init();
-- 
GitLab