|
|
|
@ -155,30 +155,3 @@ impl ActivePageTable {
|
|
|
|
|
//allocator.deallocate_frame(frame);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn test_paging<A>(allocator: &mut A)
|
|
|
|
|
where A: FrameAllocator
|
|
|
|
|
{
|
|
|
|
|
let mut page_table = unsafe { ActivePageTable::new() };
|
|
|
|
|
|
|
|
|
|
let addr = 42 * 512 * 512 * 4096; // 42th P3 entry
|
|
|
|
|
let page = Page::containing_address(addr);
|
|
|
|
|
let frame = allocator.allocate_frame().expect("no more frames");
|
|
|
|
|
println!("None = {:?}, map to {:?}",
|
|
|
|
|
page_table.translate(addr),
|
|
|
|
|
frame);
|
|
|
|
|
page_table.map_to(page, frame, EntryFlags::empty(), allocator);
|
|
|
|
|
println!("Some = {:?}", page_table.translate(addr));
|
|
|
|
|
println!("next free frame: {:?}", allocator.allocate_frame());
|
|
|
|
|
|
|
|
|
|
println!("{:#x}", unsafe {
|
|
|
|
|
*(Page::containing_address(addr).start_address() as *const u64)
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
page_table.unmap(Page::containing_address(addr), allocator);
|
|
|
|
|
println!("None = {:?}", page_table.translate(addr));
|
|
|
|
|
|
|
|
|
|
println!("{:#x}", unsafe {
|
|
|
|
|
*(Page::containing_address(addr).start_address() as *const u64)
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|