pub fn phys_to_virt(phys: u64, hhdm_offset: u64) -> Option { phys.checked_add(hhdm_offset) } pub fn virt_to_phys(virt: u64, hhdm_offset: u64) -> Option { virt.checked_sub(hhdm_offset) } pub const CANONICAL_SHIFT: u32 = 47; pub fn is_canonical(addr: u64) -> bool { const { assert!( CANONICAL_SHIFT == 47, "is_canonical assumes 4-level paging (48-bit VA)" ) } let top_bits = addr >> CANONICAL_SHIFT; top_bits == 0 || top_bits == (u64::MAX >> CANONICAL_SHIFT) }