From 3871978ab865fc7e123a30ce4b870d4e34772cba Mon Sep 17 00:00:00 2001 From: Kenny Strawn Date: Mon, 29 Aug 2022 09:39:44 -0700 Subject: [PATCH] #5: Some more progress --- src/cralloc/frames.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cralloc/frames.rs b/src/cralloc/frames.rs index f5fb961..0913c4b 100644 --- a/src/cralloc/frames.rs +++ b/src/cralloc/frames.rs @@ -144,17 +144,17 @@ pub fn build_from_uefi(fa: &mut impl FrameAllocator) -> StubTables { }; // shut up the borrow checker - let mut cloned_table = table.clone(); + let cloned_table = table.clone(); - let next_available = if let Some(_) = table.iter().find(|e| e.flags().contains(PageTableFlags::PRESENT | PageTableFlags::WRITABLE)) { - cloned_table.iter_mut().next() + let next_available = if let Some(entry) = cloned_table.iter().find(|e| e.flags().contains(PageTableFlags::PRESENT | PageTableFlags::WRITABLE)) { + let size = entry.frame().unwrap().size() as usize; + table.iter_mut().skip(size / 16).next() } else { panic!("Page table only contains one entry") }; if let Some(entry) = next_available { - entry.set_flags(PageTableFlags::PRESENT | PageTableFlags::WRITABLE); - let frame = entry.frame().unwrap(); + let frame = PhysFrame::::containing_address(entry.addr()); unsafe { (OffsetPageTable::new(&mut *table, offset), frame) } } else { panic!("Couldn't find any available page table entries")