From f62230b5169cb5e72c1eae299f8fe8b59ffa2dac Mon Sep 17 00:00:00 2001 From: Ramla-I Date: Wed, 28 Aug 2024 14:04:03 -0700 Subject: [PATCH 1/3] fix --- kernel/frame_allocator/src/lib.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/kernel/frame_allocator/src/lib.rs b/kernel/frame_allocator/src/lib.rs index a9c09425d7..fa40de382b 100644 --- a/kernel/frame_allocator/src/lib.rs +++ b/kernel/frame_allocator/src/lib.rs @@ -34,7 +34,7 @@ mod static_array_rb_tree; use core::{borrow::Borrow, cmp::{Ordering, min, max}, fmt, mem, ops::{Deref, DerefMut}}; use intrusive_collections::Bound; use kernel_config::memory::*; -use log::{error, warn, debug, trace}; +use log::{error, warn, debug, trace, info}; use memory_structs::{PhysicalAddress, Frame, FrameRange, MemoryState, PageSize, Page4K, Page2M, Page1G}; use spin::Mutex; use static_array_rb_tree::*; @@ -196,31 +196,32 @@ fn check_and_add_free_region( where P: Borrow, R: IntoIterator + Clone, { + let mut area = area.clone(); // This will be set to the frame that is the start of the current free region. let mut current_start = *area.start(); // This will be set to the frame that is the end of the current free region. let mut current_end = *area.end(); - // trace!("looking at sub-area {:X?} to {:X?}", current_start, current_end); + trace!("looking at sub-area {:X?} to {:X?}", current_start, current_end); for reserved in reserved_physical_memory_areas.clone().into_iter() { let reserved = &reserved.borrow().frames; - // trace!("\t Comparing with reserved area {:X?}", reserved); + trace!("\t Comparing with reserved area {:X?}", reserved); if reserved.contains(¤t_start) { - // info!("\t\t moving current_start from {:X?} to {:X?}", current_start, *reserved.end() + 1); + info!("\t\t moving current_start from {:X?} to {:X?}", current_start, *reserved.end() + 1); current_start = *reserved.end() + 1; } if ¤t_start <= reserved.start() && reserved.start() <= ¤t_end { // Advance up to the frame right before this reserved region started. - // info!("\t\t moving current_end from {:X?} to {:X?}", current_end, min(current_end, *reserved.start() - 1)); + info!("\t\t moving current_end from {:X?} to {:X?}", current_end, min(current_end, *reserved.start() - 1)); current_end = min(current_end, *reserved.start() - 1); if area.end() <= reserved.end() { // Optimization here: the rest of the current area is reserved, // so there's no need to keep iterating over the reserved areas. - // info!("\t !!! skipping the rest of the area"); + info!("\t !!! skipping the rest of the area"); break; } else { let after = FrameRange::new(*reserved.end() + 1, *area.end()); - // warn!("moving on to after {:X?}", after); + warn!("moving on to after {:X?}", after); // Here: the current area extends past this current reserved area, // so there might be another free area that starts after this reserved area. check_and_add_free_region( @@ -229,11 +230,14 @@ fn check_and_add_free_region( free_list_idx, reserved_physical_memory_areas.clone(), ); + area = FrameRange::new(*area.start(), current_end); + info!("Updating original region after exiting recursive function: {:X?}", area); } } } let new_area = FrameRange::new(current_start, current_end); + info!("Adding new area: {:X?}", new_area); if new_area.size_in_frames() > 0 { free_list[*free_list_idx] = Some(PhysicalMemoryRegion { typ: MemoryRegionType::Free, From 12e288f5f5668aef1ab1de302cdbde3ab1aaedd7 Mon Sep 17 00:00:00 2001 From: Ramla-I Date: Wed, 28 Aug 2024 17:12:34 -0400 Subject: [PATCH 2/3] Update lib.rs commented out log --- kernel/frame_allocator/src/lib.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/frame_allocator/src/lib.rs b/kernel/frame_allocator/src/lib.rs index fa40de382b..8709f7b009 100644 --- a/kernel/frame_allocator/src/lib.rs +++ b/kernel/frame_allocator/src/lib.rs @@ -201,27 +201,27 @@ fn check_and_add_free_region( let mut current_start = *area.start(); // This will be set to the frame that is the end of the current free region. let mut current_end = *area.end(); - trace!("looking at sub-area {:X?} to {:X?}", current_start, current_end); + // trace!("looking at sub-area {:X?} to {:X?}", current_start, current_end); for reserved in reserved_physical_memory_areas.clone().into_iter() { let reserved = &reserved.borrow().frames; - trace!("\t Comparing with reserved area {:X?}", reserved); + // trace!("\t Comparing with reserved area {:X?}", reserved); if reserved.contains(¤t_start) { - info!("\t\t moving current_start from {:X?} to {:X?}", current_start, *reserved.end() + 1); + // info!("\t\t moving current_start from {:X?} to {:X?}", current_start, *reserved.end() + 1); current_start = *reserved.end() + 1; } if ¤t_start <= reserved.start() && reserved.start() <= ¤t_end { // Advance up to the frame right before this reserved region started. - info!("\t\t moving current_end from {:X?} to {:X?}", current_end, min(current_end, *reserved.start() - 1)); + // info!("\t\t moving current_end from {:X?} to {:X?}", current_end, min(current_end, *reserved.start() - 1)); current_end = min(current_end, *reserved.start() - 1); if area.end() <= reserved.end() { // Optimization here: the rest of the current area is reserved, // so there's no need to keep iterating over the reserved areas. - info!("\t !!! skipping the rest of the area"); + // info!("\t !!! skipping the rest of the area"); break; } else { let after = FrameRange::new(*reserved.end() + 1, *area.end()); - warn!("moving on to after {:X?}", after); + // warn!("moving on to after {:X?}", after); // Here: the current area extends past this current reserved area, // so there might be another free area that starts after this reserved area. check_and_add_free_region( @@ -231,13 +231,13 @@ fn check_and_add_free_region( reserved_physical_memory_areas.clone(), ); area = FrameRange::new(*area.start(), current_end); - info!("Updating original region after exiting recursive function: {:X?}", area); + // info!("Updating original region after exiting recursive function: {:X?}", area); } } } let new_area = FrameRange::new(current_start, current_end); - info!("Adding new area: {:X?}", new_area); + // info!("Adding new area: {:X?}", new_area); if new_area.size_in_frames() > 0 { free_list[*free_list_idx] = Some(PhysicalMemoryRegion { typ: MemoryRegionType::Free, From 60fce2283ca5ced3df286f3f85a41c3758cb8941 Mon Sep 17 00:00:00 2001 From: Ramla-I Date: Wed, 28 Aug 2024 17:14:46 -0400 Subject: [PATCH 3/3] Update lib.rs removed warning --- kernel/frame_allocator/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/frame_allocator/src/lib.rs b/kernel/frame_allocator/src/lib.rs index 8709f7b009..428b9cdd5c 100644 --- a/kernel/frame_allocator/src/lib.rs +++ b/kernel/frame_allocator/src/lib.rs @@ -34,7 +34,7 @@ mod static_array_rb_tree; use core::{borrow::Borrow, cmp::{Ordering, min, max}, fmt, mem, ops::{Deref, DerefMut}}; use intrusive_collections::Bound; use kernel_config::memory::*; -use log::{error, warn, debug, trace, info}; +use log::{error, warn, debug, trace}; use memory_structs::{PhysicalAddress, Frame, FrameRange, MemoryState, PageSize, Page4K, Page2M, Page1G}; use spin::Mutex; use static_array_rb_tree::*;