diff --git a/src/memory/paging/mod.rs b/src/memory/paging/mod.rs index e734949..8c23586 100644 --- a/src/memory/paging/mod.rs +++ b/src/memory/paging/mod.rs @@ -104,6 +104,21 @@ impl ActivePageTable { temporary_page.unmap(self); } + pub fn switch(&mut self, new_table: InactivePageTable) -> InactivePageTable { + use x86_64::PhysicalAddress; + use x86_64::registers::control_regs; + + let old_table = InactivePageTable { + p4_frame: Frame::containing_address( + control_regs::cr3().0 as usize + ), + }; + unsafe { + control_regs::cr3_write(PhysicalAddress( + new_table.p4_frame.start_address() as u64)); + } + old_table + } } pub struct InactivePageTable { @@ -167,4 +182,7 @@ pub fn remap_the_kernel(allocator: &mut A, boot_info: &BootInformation) } } }); + + let old_table = active_table.switch(new_table); + println!("NEW TABLE!!!"); }