From 2fbbfb4178ac30d4d0003898f53dfc5e55ad3d75 Mon Sep 17 00:00:00 2001 From: jD91mZM2 <me@krake.one> Date: Fri, 7 Aug 2020 11:54:46 +0200 Subject: [PATCH] Minimize usage of internal Region structure --- src/context/memory.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/context/memory.rs b/src/context/memory.rs index 0931e5c..c4a1759 100644 --- a/src/context/memory.rs +++ b/src/context/memory.rs @@ -406,14 +406,14 @@ impl Grant { let mut flush_all = MapperFlushAll::new(); - let start_page = Page::containing_address(self.region.start); - let end_page = Page::containing_address(VirtualAddress::new(self.region.start.get() + self.region.size - 1)); + let start_page = Page::containing_address(self.start_address()); + let end_page = Page::containing_address(self.final_address()); for page in Page::range_inclusive(start_page, end_page) { //TODO: One function to do both? let flags = active_table.translate_page_flags(page).expect("grant references unmapped memory"); let frame = active_table.translate_page(page).expect("grant references unmapped memory"); - let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.region.start.get() + new_start.get())); + let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.start_address().get() + new_start.get())); if self.owned { let result = active_table.map(new_page, EntryFlags::PRESENT | EntryFlags::WRITABLE | EntryFlags::NO_EXECUTE); flush_all.consume(result); @@ -427,7 +427,7 @@ impl Grant { if self.owned { unsafe { - intrinsics::copy(self.region.start.get() as *const u8, new_start.get() as *mut u8, self.region.size); + intrinsics::copy(self.start_address().get() as *const u8, new_start.get() as *mut u8, self.size()); } let mut flush_all = MapperFlushAll::new(); @@ -436,7 +436,7 @@ impl Grant { //TODO: One function to do both? let flags = active_table.translate_page_flags(page).expect("grant references unmapped memory"); - let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.region.start.get() + new_start.get())); + let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.start_address().get() + new_start.get())); let result = active_table.remap(new_page, flags); flush_all.consume(result); } @@ -447,7 +447,7 @@ impl Grant { Grant { region: Region { start: new_start, - size: self.region.size, + size: self.size(), }, flags: self.flags, mapped: true, @@ -463,8 +463,8 @@ impl Grant { let mut flush_all = MapperFlushAll::new(); - let start_page = Page::containing_address(self.region.start); - let end_page = Page::containing_address(VirtualAddress::new(self.region.start.get() + self.region.size - 1)); + let start_page = Page::containing_address(self.start_address()); + let end_page = Page::containing_address(self.final_address()); for page in Page::range_inclusive(start_page, end_page) { //TODO: One function to do both? let flags = active_table.translate_page_flags(page).expect("grant references unmapped memory"); @@ -472,7 +472,7 @@ impl Grant { flush_all.consume(result); active_table.with(new_table, temporary_page, |mapper| { - let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.region.start.get() + new_start.get())); + let new_page = Page::containing_address(VirtualAddress::new(page.start_address().get() - self.start_address().get() + new_start.get())); let result = mapper.map_to(new_page, frame, flags); // Ignore result due to mapping on inactive table unsafe { result.ignore(); } @@ -481,7 +481,9 @@ impl Grant { flush_all.flush(&mut active_table); - self.region.start = new_start; + unsafe { + self.region_mut().set_start_address(new_start); + } } pub fn flags(&self) -> EntryFlags { -- GitLab