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