Nothing to see here, move along
at main 74 lines 2.2 kB view raw
1use crate::mem::phys::BitmapFrameAllocator; 2use crate::proc::PROCESSES; 3 4crate::kernel_test!( 5 fn freshly_allocated_stack_is_painted() { 6 let mut allocator = BitmapFrameAllocator; 7 let mut ptable = PROCESSES.lock(); 8 9 let created = ptable.allocate(&mut allocator).expect("alloc"); 10 let pid = created.pid(); 11 12 assert_eq!( 13 ptable.stack_high_water_mark(pid), 14 0, 15 "freshly allocated stack should have HWM of 0" 16 ); 17 18 ptable.destroy(created.pid(), &mut allocator); 19 } 20); 21 22crate::kernel_test!( 23 fn hwm_detects_dirty_bytes() { 24 let mut allocator = BitmapFrameAllocator; 25 let mut ptable = PROCESSES.lock(); 26 27 let created = ptable.allocate(&mut allocator).expect("alloc"); 28 let pid = created.pid(); 29 30 let data = ptable.stack_data_mut(pid).expect("stack data"); 31 let len = data.len(); 32 (0..128).for_each(|i| { 33 data[len - 1 - i] = 0xFF; 34 }); 35 36 assert_eq!( 37 ptable.stack_high_water_mark(pid), 38 128, 39 "HWM should detect 128 dirty bytes at top of stack" 40 ); 41 42 ptable.destroy(created.pid(), &mut allocator); 43 } 44); 45 46crate::kernel_test!( 47 fn reallocated_slot_is_repainted() { 48 let mut allocator = BitmapFrameAllocator; 49 let mut ptable = PROCESSES.lock(); 50 51 let created = ptable.allocate(&mut allocator).expect("alloc"); 52 let pid = created.pid(); 53 54 let data = ptable.stack_data_mut(pid).expect("stack data"); 55 let len = data.len(); 56 (0..256).for_each(|i| { 57 data[len - 1 - i] = 0xAB; 58 }); 59 assert!(ptable.stack_high_water_mark(pid) > 0, "stack should be dirty"); 60 61 ptable.destroy(pid, &mut allocator); 62 63 let created2 = ptable.allocate(&mut allocator).expect("re-alloc"); 64 let pid2 = created2.pid(); 65 assert_eq!(pid.as_usize(), pid2.as_usize(), "should reuse same slot"); 66 assert_eq!( 67 ptable.stack_high_water_mark(pid2), 68 0, 69 "repainted stack should have HWM of 0" 70 ); 71 72 ptable.destroy(created2.pid(), &mut allocator); 73 } 74);