Skip to content

Commit 6a6497b

Browse files
committed
add some nicer error messages
1 parent 5076c6d commit 6a6497b

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/arch/x86_64/mm/paging.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use core::ptr;
33

44
use x86_64::instructions::tlb;
55
use x86_64::registers::control::Cr3;
6-
use x86_64::structures::paging::mapper::UnmapError;
6+
use x86_64::structures::paging::mapper::{TranslateResult, UnmapError};
77
pub use x86_64::structures::paging::PageTableFlags as PageTableEntryFlags;
88
use x86_64::structures::paging::{
99
Mapper, Page, PageTable, PageTableIndex, PhysFrame, RecursivePageTable, Size2MiB, Translate,
@@ -68,9 +68,20 @@ unsafe fn recursive_page_table() -> RecursivePageTable<'static> {
6868
pub fn virtual_to_physical(virtual_address: VirtAddr) -> Option<PhysAddr> {
6969
let virtual_address = x86_64::VirtAddr::new(virtual_address.0);
7070
let page_table = unsafe { recursive_page_table() };
71-
page_table
72-
.translate_addr(virtual_address)
73-
.map(|addr| PhysAddr(addr.as_u64()))
71+
let translate = page_table.translate(virtual_address);
72+
73+
match translate {
74+
TranslateResult::NotMapped | TranslateResult::InvalidFrameAddress(_) => {
75+
warn!(
76+
"Uable to determine the physical address of 0x{:X}",
77+
virtual_address
78+
);
79+
None
80+
}
81+
TranslateResult::Mapped { frame, offset, .. } => {
82+
Some(PhysAddr((frame.start_address() + offset).as_u64()))
83+
}
84+
}
7485
}
7586

7687
#[no_mangle]

0 commit comments

Comments
 (0)