Untitled Paste
rust
Wrap Lines
Raw fn init_frame_info(
&mut self,
memory_map: &MemoryMap,
frames: Range<usize>,
) {
let mut head: Option<usize> = None;
let mut count: usize = 0;
for i in frames.clone() {}
for region in memory_map.iter() {
let start_frame_index = ku::memory::size::from(region.range.start_frame_number);
let end_frame_index = ku::memory::size::from(region.range.end_frame_number);
let frame_block = match Block::<Frame>::from_index_u64(
region.range.start_frame_number,
region.range.end_frame_number,
) {
Ok(b) => b,
Err(_) => continue,
};
for frame in frame_block {
let index = frame.index() as usize;
if !frames.contains(&index) {
continue;
}
let frame_info = &mut self.frame_info[index];
match region.region_type {
MemoryRegionType::Usable => {
let old_head = core::mem::replace(&mut head, Some(index));
*frame_info = FrameInfo::Free {
next_free: old_head,
};
count += 1;
},
MemoryRegionType::Kernel |
MemoryRegionType::KernelStack |
MemoryRegionType::PageTable => {
*frame_info = FrameInfo::Used { reference_count: 1 };
},
_ => {},
}
}
}
self.free_frame = head;
self.free_count = count;
}
RUSTEBIN