:: commit e4d1f3e706584544a7b3312fc6fa7f1c0f6186ff

Mintsuki <mintsuki@protonmail.com> — 2025-03-25 20:39

parents: 3e9f2e030d

pmm: Implement pmm_realloc()

diff --git a/common/mm/pmm.h b/common/mm/pmm.h
index 67b47b41..830f93c4 100644
--- a/common/mm/pmm.h
+++ b/common/mm/pmm.h
@@ -61,6 +61,7 @@ void *ext_mem_alloc_type_aligned_mode(size_t count, uint32_t type, size_t alignm
 void *conv_mem_alloc(size_t count);
 
 void pmm_free(void *ptr, size_t length);
+void *pmm_realloc(void *old_ptr, size_t old_size, size_t new_size);
 
 #if defined (UEFI)
 void pmm_release_uefi_mem(void);
diff --git a/common/mm/pmm.s2.c b/common/mm/pmm.s2.c
index 58faac50..afc74023 100644
--- a/common/mm/pmm.s2.c
+++ b/common/mm/pmm.s2.c
@@ -552,6 +552,16 @@ void pmm_free(void *ptr, size_t count) {
     memmap_alloc_range((uintptr_t)ptr, count, MEMMAP_USABLE, 0, false, false, true);
 }
 
+void *pmm_realloc(void *old_ptr, size_t old_size, size_t new_size) {
+    void *new_ptr = ext_mem_alloc(new_size);
+
+    memcpy(new_ptr, old_ptr, MIN(new_size, old_size));
+
+    pmm_free(old_ptr, old_size);
+
+    return new_ptr;
+}
+
 void *ext_mem_alloc(size_t count) {
     return ext_mem_alloc_type(count, MEMMAP_BOOTLOADER_RECLAIMABLE);
 }
tab: 248 wrap: offon