mirror of
https://github.com/phil-opp/blog_os.git
synced 2025-12-16 22:37:49 +00:00
Fix unmap function by flushing the TLB
This commit is contained in:
@@ -138,6 +138,9 @@ impl ActivePageTable {
|
|||||||
fn unmap<A>(&mut self, page: Page, allocator: &mut A)
|
fn unmap<A>(&mut self, page: Page, allocator: &mut A)
|
||||||
where A: FrameAllocator
|
where A: FrameAllocator
|
||||||
{
|
{
|
||||||
|
use x86_64::instructions::tlb;
|
||||||
|
use x86_64::VirtualAddress;
|
||||||
|
|
||||||
assert!(self.translate(page.start_address()).is_some());
|
assert!(self.translate(page.start_address()).is_some());
|
||||||
|
|
||||||
let p1 = self.p4_mut()
|
let p1 = self.p4_mut()
|
||||||
@@ -147,12 +150,12 @@ impl ActivePageTable {
|
|||||||
.expect("mapping code does not support huge pages");
|
.expect("mapping code does not support huge pages");
|
||||||
let frame = p1[page.p1_index()].pointed_frame().unwrap();
|
let frame = p1[page.p1_index()].pointed_frame().unwrap();
|
||||||
p1[page.p1_index()].set_unused();
|
p1[page.p1_index()].set_unused();
|
||||||
|
tlb::flush(VirtualAddress(page.start_address()));
|
||||||
// TODO free p(1,2,3) table if empty
|
// TODO free p(1,2,3) table if empty
|
||||||
allocator.deallocate_frame(frame);
|
//allocator.deallocate_frame(frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
pub fn test_paging<A>(allocator: &mut A)
|
pub fn test_paging<A>(allocator: &mut A)
|
||||||
where A: FrameAllocator
|
where A: FrameAllocator
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user