From: Xiang W Date: Wed, 6 Sep 2023 13:10:04 +0000 (+0800) Subject: lib: sbi: alloc tlb fifo by sbi_malloc X-Git-Tag: v1.4~105 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5bd969477f2c710ee5945f1a66cf534c478c48de;p=platform%2Fkernel%2Fopensbi.git lib: sbi: alloc tlb fifo by sbi_malloc If the system is defined from tlb_fifo_num_entries, the scratch may be too small to hold the fifo, so it is alloc through the heap. Signed-off-by: Xiang W Signed-off-by: Xing Xiaoguang Reviewed-by: Anup Patel --- diff --git a/lib/sbi/sbi_tlb.c b/lib/sbi/sbi_tlb.c index 92648da..ee6a4fe 100644 --- a/lib/sbi/sbi_tlb.c +++ b/lib/sbi/sbi_tlb.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -421,8 +422,7 @@ int sbi_tlb_init(struct sbi_scratch *scratch, bool cold_boot) sbi_scratch_free_offset(tlb_sync_off); return SBI_ENOMEM; } - tlb_fifo_mem_off = sbi_scratch_alloc_offset( - sbi_platform_tlb_fifo_num_entries(plat) * SBI_TLB_INFO_SIZE); + tlb_fifo_mem_off = sbi_scratch_alloc_offset(sizeof(tlb_mem)); if (!tlb_fifo_mem_off) { sbi_scratch_free_offset(tlb_fifo_off); sbi_scratch_free_offset(tlb_sync_off); @@ -448,7 +448,14 @@ int sbi_tlb_init(struct sbi_scratch *scratch, bool cold_boot) tlb_sync = sbi_scratch_offset_ptr(scratch, tlb_sync_off); tlb_q = sbi_scratch_offset_ptr(scratch, tlb_fifo_off); - tlb_mem = sbi_scratch_offset_ptr(scratch, tlb_fifo_mem_off); + tlb_mem = sbi_scratch_read_type(scratch, void *, tlb_fifo_mem_off); + if (!tlb_mem) { + tlb_mem = sbi_malloc( + sbi_platform_tlb_fifo_num_entries(plat) * SBI_TLB_INFO_SIZE); + if (!tlb_mem) + return SBI_ENOMEM; + sbi_scratch_write_type(scratch, void *, tlb_fifo_mem_off, tlb_mem); + } ATOMIC_INIT(tlb_sync, 0);