Nothing to see here, move along
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);