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);
}
