Nothing to see here, move along
at main 61 lines 1.9 kB view raw
1use crate::mem::phys::BitmapFrameAllocator; 2 3crate::kernel_test!( 4 fn allocate_returns_aligned_nonzero() { 5 let alloc = BitmapFrameAllocator; 6 let frame = alloc.allocate().expect("allocation failed"); 7 let addr = frame.phys_addr().as_u64(); 8 assert!(addr != 0, "allocated frame has zero address"); 9 assert!( 10 addr.is_multiple_of(4096), 11 "frame not page-aligned: {:#x}", 12 addr 13 ); 14 } 15); 16 17crate::kernel_test!( 18 fn allocate_then_free_restores_count() { 19 let before = BitmapFrameAllocator::free_frames(); 20 let frame = BitmapFrameAllocator.allocate().expect("allocation failed"); 21 assert_eq!( 22 BitmapFrameAllocator::free_frames(), 23 before - 1, 24 "free count did not decrease" 25 ); 26 drop(frame); 27 assert_eq!( 28 BitmapFrameAllocator::free_frames(), 29 before, 30 "free count did not restore after drop" 31 ); 32 } 33); 34 35crate::kernel_test!( 36 fn bitmap_invariant_holds() { 37 let total = BitmapFrameAllocator::total_frames(); 38 let used = BitmapFrameAllocator::used_frames(); 39 let free = BitmapFrameAllocator::free_frames(); 40 assert_eq!( 41 used + free, 42 total, 43 "invariant broken: used({}) + free({}) != total({})", 44 used, 45 free, 46 total 47 ); 48 } 49); 50 51crate::kernel_test!( 52 fn write_and_readback_through_hhdm() { 53 let frame = BitmapFrameAllocator.allocate().expect("allocation failed"); 54 let virt = crate::mem::addr::phys_to_virt(frame.phys_addr()); 55 let ptr: *mut u64 = virt.as_mut_ptr(); 56 let pattern: u64 = 0xA5A5_5A5A_DEAD_BEEF; 57 unsafe { ptr.write_volatile(pattern) }; 58 let readback = unsafe { ptr.read_volatile() }; 59 assert_eq!(readback, pattern, "write/readback mismatch through HHDM"); 60 } 61);