fn init_frame_info( &mut self, memory_map: &MemoryMap, frames: Range, ) { let mut head: Option = 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::::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; }