[PATCH 2/3] platform: generic: Extra memory for housekeeping
wu.fei9 at sanechips.com.cn
wu.fei9 at sanechips.com.cn
Tue Aug 5 18:02:57 PDT 2025
Allocate the extra housekeeping metadata for heap or the expected free
memory size cannot be achieved.
Signed-off-by: Wu Fei <wu.fei9 at sanechips.com.cn>
---
include/sbi/sbi_heap.h | 3 +++
lib/sbi/sbi_heap.c | 5 +++++
platform/generic/platform.c | 1 +
3 files changed, 9 insertions(+)
diff --git a/include/sbi/sbi_heap.h b/include/sbi/sbi_heap.h
index a4b3f0c..3d3feee 100644
--- a/include/sbi/sbi_heap.h
+++ b/include/sbi/sbi_heap.h
@@ -98,4 +98,7 @@ int sbi_heap_init_new(struct sbi_heap_control *hpctrl, unsigned long base,
unsigned long size);
int sbi_heap_alloc_new(struct sbi_heap_control **hpctrl);
+/** Return the total heap size with housekeeping **/
+unsigned long sbi_heap_total_size(unsigned long usable_size);
+
#endif
diff --git a/lib/sbi/sbi_heap.c b/lib/sbi/sbi_heap.c
index 646c2e0..7aa27b1 100644
--- a/lib/sbi/sbi_heap.c
+++ b/lib/sbi/sbi_heap.c
@@ -279,3 +279,8 @@ int sbi_heap_alloc_new(struct sbi_heap_control **hpctrl)
*hpctrl = sbi_calloc(1, sizeof(struct sbi_heap_control));
return 0;
}
+
+unsigned long sbi_heap_total_size(unsigned long usable_size)
+{
+ return usable_size + usable_size / (HEAP_HOUSEKEEPING_FACTOR - 1);
+}
diff --git a/platform/generic/platform.c b/platform/generic/platform.c
index 47e771a..442f7d5 100644
--- a/platform/generic/platform.c
+++ b/platform/generic/platform.c
@@ -41,6 +41,7 @@ static u32 fw_platform_calculate_heap_size(u32 hart_count)
/* For TLB fifo */
heap_size += SBI_TLB_INFO_SIZE * (hart_count) * (hart_count);
+ heap_size = sbi_heap_total_size(heap_size);
return BIT_ALIGN(heap_size, HEAP_BASE_ALIGN);
}
--
2.43.0
More information about the opensbi
mailing list