diff --git a/src/arch/x86_64/paging/table.rs b/src/arch/x86_64/paging/table.rs index 67845607386d0b0074456c273de55ece1537e0dc..2f979f745b8158dfa3d37edf8e480689f55bc22e 100644 --- a/src/arch/x86_64/paging/table.rs +++ b/src/arch/x86_64/paging/table.rs @@ -9,7 +9,7 @@ use memory::allocate_frames; use super::entry::{EntryFlags, Entry}; use super::ENTRY_COUNT; -pub const P4: *mut Table<Level4> = 0xffff_ffff_ffff_f000 as *mut _; +pub const P4: *mut Table<Level4> = (::RECURSIVE_PAGE_OFFSET | 0x7ffffff000) as *mut _; pub trait TableLevel {} diff --git a/src/context/memory.rs b/src/context/memory.rs index 7ec1f809760a739be8eb112c271f845464d5fdaa..1fc68b7256c6fc1f67dd1b09f48a17b421b34f26 100644 --- a/src/context/memory.rs +++ b/src/context/memory.rs @@ -3,6 +3,7 @@ use alloc::collections::VecDeque; use core::intrinsics; use spin::Mutex; +use arch::paging::PAGE_SIZE; use ipi::{ipi, IpiKind, IpiTarget}; use memory::Frame; use paging::{ActivePageTable, InactivePageTable, Page, PageIter, PhysicalAddress, VirtualAddress}; @@ -67,7 +68,7 @@ impl Grant { pub fn map_inactive(from: VirtualAddress, to: VirtualAddress, size: usize, flags: EntryFlags, new_table: &mut InactivePageTable, temporary_page: &mut TemporaryPage) -> Grant { let mut active_table = unsafe { ActivePageTable::new() }; - let mut frames = VecDeque::new(); + let mut frames = VecDeque::with_capacity(size/PAGE_SIZE); let start_page = Page::containing_address(from); let end_page = Page::containing_address(VirtualAddress::new(from.get() + size - 1));