diff options
author | Raghuram Subramani <raghus2247@gmail.com> | 2025-01-29 04:32:45 -0500 |
---|---|---|
committer | Raghuram Subramani <raghus2247@gmail.com> | 2025-01-29 04:32:45 -0500 |
commit | b5be8161819bb0b9d133a4381d4bb9b66da42a25 (patch) | |
tree | 5cfc64baf6bb602daa32a402bf1aeed1a4647a01 | |
parent | c307bc6ad3b058027162c3db0b22f65f98665648 (diff) |
physical_mm: Actually deallocate the requested memory
By dropping the test_bit function, the deallocation actually works :^)
-rw-r--r-- | kernel/mm/physical_mm/physical_mm.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/mm/physical_mm/physical_mm.c b/kernel/mm/physical_mm/physical_mm.c index 801ce7b..e93593d 100644 --- a/kernel/mm/physical_mm/physical_mm.c +++ b/kernel/mm/physical_mm/physical_mm.c @@ -46,6 +46,7 @@ atomic_flag memory_map_lock; ALWAYS_INLINE static void physical_mm_log_memory_map(free_memory_regions_t *free_memory_regions) { + printk("\nphysical_mm", "memory_map is at 0x%x", memory_map); printk("\nphysical_mm", "Free Memory Regions:"); for (int i = 0; i < free_memory_regions->n_regions; i++) printk("physical_mm", @@ -87,8 +88,7 @@ physical_mm_deinitialize_region(uint32_t start, uint32_t length) n_blocks++; for (; n_blocks > 0; n_blocks--) - if (!physical_mm_test_bit(bit, memory_map)) - physical_mm_set_used(bit++, &total_free_blocks, memory_map); + physical_mm_set_used(bit++, &total_free_blocks, memory_map); } void @@ -115,6 +115,9 @@ physical_mm_init(void) uint32_t kernel_size = ((uint32_t) &kernel_end) - ((uint32_t) &kernel_start); physical_mm_deinitialize_region((uint32_t) &kernel_start, kernel_size); + /* Deinitialize first 4MiB */ + physical_mm_deinitialize_region(0, 4 * MiB); + spinlock_release(&memory_map_lock); total_free_memory -= kernel_size; |