From 69498ae9090b8cea11974a9b1cc0eb117f477374 Mon Sep 17 00:00:00 2001 From: Jiajie Chen Date: Fri, 8 Mar 2019 15:24:28 +0800 Subject: [PATCH] Fix delay memory handler: set present=true before unmapping --- crate/memory/src/memory_set/handler/delay.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crate/memory/src/memory_set/handler/delay.rs b/crate/memory/src/memory_set/handler/delay.rs index 7ba92d8..2c138f5 100644 --- a/crate/memory/src/memory_set/handler/delay.rs +++ b/crate/memory/src/memory_set/handler/delay.rs @@ -27,8 +27,11 @@ impl MemoryHandler for Delay { let entry = pt.get_entry(addr).expect("failed to get entry"); if entry.present() { self.allocator.dealloc(entry.target()); - pt.unmap(addr); } + + // PageTable::unmap requires page to be present + entry.set_present(true); + pt.unmap(addr); } fn page_fault_handler(&self, pt: &mut PageTable, addr: VirtAddr) -> bool { @@ -40,6 +43,7 @@ impl MemoryHandler for Delay { let frame = self.allocator.alloc().expect("failed to alloc frame"); entry.set_target(frame); entry.set_present(true); + entry.update(); true } }