From 85e0a7c36835de0143e9315d4f62ef69da32c8c0 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jackpot51@gmail.com> Date: Wed, 21 Dec 2022 18:29:15 -0700 Subject: [PATCH] Record mappings in funmap with page aligned size, always --- src/scheme/user.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/scheme/user.rs b/src/scheme/user.rs index 31b29d44..8bdd5de0 100644 --- a/src/scheme/user.rs +++ b/src/scheme/user.rs @@ -249,7 +249,7 @@ impl UserInner { if let Some((context_weak, desc, map)) = self.fmap.lock().remove(&packet.id) { if let Ok(address) = Error::demux(packet.a) { if address % PAGE_SIZE > 0 { - println!("scheme returned unaligned address, causing extra frame to be allocated"); + log::warn!("scheme returned unaligned address, causing extra frame to be allocated"); } let file_ref = GrantFileRef { desc, offset: map.offset, flags: map.flags }; let res = UserInner::capture_inner(&context_weak, map.address, address, map.size, map.flags, Some(file_ref)); @@ -257,8 +257,10 @@ impl UserInner { if let Some(context_lock) = context_weak.upgrade() { let context = context_lock.read(); let mut addr_space = context.addr_space()?.write(); + //TODO: ensure all mappings are aligned! + let map_pages = (map.size + PAGE_SIZE - 1) / PAGE_SIZE; addr_space.grants.funmap.insert( - Region::new(grant_address, map.size), + Region::new(grant_address, map_pages * PAGE_SIZE), VirtualAddress::new(address) ); } else { -- GitLab