From 5a8cfcdf19d98b8dc5dd5a087a2eceb7f5b185fb Mon Sep 17 00:00:00 2001 From: Anup Patel Date: Wed, 19 Apr 2023 16:54:13 +0530 Subject: [PATCH] lib: utils/ipi: Use heap in ACLINT MSWI driver Let's use heap allocation in ACLINT MSWI driver instead of using a fixed size global array. Signed-off-by: Anup Patel Reviewed-by: Andrew Jones --- lib/utils/ipi/fdt_ipi_mswi.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/utils/ipi/fdt_ipi_mswi.c b/lib/utils/ipi/fdt_ipi_mswi.c index 4dc91f2..e3a6378 100644 --- a/lib/utils/ipi/fdt_ipi_mswi.c +++ b/lib/utils/ipi/fdt_ipi_mswi.c @@ -8,15 +8,11 @@ */ #include +#include #include #include #include -#define MSWI_MAX_NR 16 - -static unsigned long mswi_count = 0; -static struct aclint_mswi_data mswi[MSWI_MAX_NR]; - static int ipi_mswi_cold_init(void *fdt, int nodeoff, const struct fdt_match *match) { @@ -24,15 +20,17 @@ static int ipi_mswi_cold_init(void *fdt, int nodeoff, unsigned long offset; struct aclint_mswi_data *ms; - if (MSWI_MAX_NR <= mswi_count) - return SBI_ENOSPC; - ms = &mswi[mswi_count]; + ms = sbi_zalloc(sizeof(*ms)); + if (!ms) + return SBI_ENOMEM; rc = fdt_parse_aclint_node(fdt, nodeoff, false, &ms->addr, &ms->size, NULL, NULL, &ms->first_hartid, &ms->hart_count); - if (rc) + if (rc) { + sbi_free(ms); return rc; + } if (match->data) { /* Adjust MSWI address and size for CLINT device */ @@ -44,10 +42,11 @@ static int ipi_mswi_cold_init(void *fdt, int nodeoff, } rc = aclint_mswi_cold_init(ms); - if (rc) + if (rc) { + sbi_free(ms); return rc; + } - mswi_count++; return 0; }