From 716e3f735946b5cbd5e9e66d23ae371a9d38c4dd Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Thu, 31 Dec 2015 02:03:04 +0100 Subject: [PATCH] Zero and recursive map inactive table on creation --- src/memory/paging/mod.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/memory/paging/mod.rs b/src/memory/paging/mod.rs index 52e92008..ed671fdc 100644 --- a/src/memory/paging/mod.rs +++ b/src/memory/paging/mod.rs @@ -10,6 +10,7 @@ pub use self::entry::*; use memory::{PAGE_SIZE, Frame, FrameAllocator}; use self::table::{Table, Level4}; +use self::temporary_page::TemporaryPage; use core::ptr::Unique; mod entry; @@ -161,8 +162,17 @@ pub struct InactivePageTable { } impl InactivePageTable { - pub fn new(frame: Frame) -> InactivePageTable { - // TODO zero and recursive map the frame + pub fn new(frame: Frame, + active_table: &mut ActivePageTable, + temporary_page: &mut TemporaryPage) + -> InactivePageTable { + { + let table = temporary_page.map_table_frame(frame.clone(), active_table); + table.zero(); + table[511].set(frame.clone(), PRESENT | WRITABLE); + } + temporary_page.unmap(active_table); + InactivePageTable { p4_frame: frame } } }