Browse Source

memory: return the active page table after remapping the kernel

master
3moon 8 years ago
parent
commit
7d90b6e9c2
1 changed files with 7 additions and 3 deletions
  1. +7
    -3
      src/arch/x86_64/memory/paging/mod.rs

+ 7
- 3
src/arch/x86_64/memory/paging/mod.rs View File

@ -13,7 +13,7 @@ mod table;
mod mapper;
mod temporary_page;
use self::entry::*;
pub use self::entry::*;
use self::table::{Table, Level4};
use self::temporary_page::TemporaryPage;
use self::mapper::Mapper;
@ -180,7 +180,9 @@ impl Iterator for PageIter {
/// Remap the kernel
pub fn remap_kernel<A>(allocator: &mut A, boot_info: &BootInformation)
where A: FrameAllocator {
-> ActivePageTable
where A: FrameAllocator
{
let mut scratch_page = TemporaryPage::new(Page { index: 0xabadcafe },
allocator);
@ -228,10 +230,12 @@ pub fn remap_kernel<A>(allocator: &mut A, boot_info: &BootInformation)
});
let old_table = active_table.switch(new_table);
info!("Successfully switched to new page table.");
info!("successfully switched to new page table.");
// Create a guard page in place of the old P4 table's page
let old_p4_page = Page::containing_address(old_table.p4_frame.start_address());
active_table.unmap(old_p4_page, allocator);
info!("guard page established at {:#x}", old_p4_page.start_address());
active_table
}

Loading…
Cancel
Save