diff options
| author | Anup Patel <apatel@ventanamicro.com> | 2023-04-19 16:54:13 +0530 |
|---|---|---|
| committer | Anup Patel <anup@brainfault.org> | 2023-06-05 15:55:56 +0530 |
| commit | 5a8cfcdf19d98b8dc5dd5a087a2eceb7f5b185fb (patch) | |
| tree | b313683b7c6a192b473931f3ecf0f54552fdeae3 /lib/utils/ipi | |
| parent | 903e88caaf9404a52ed90fcf1e594eb2f8ff1a0c (diff) | |
| download | opensbi-5a8cfcdf19d98b8dc5dd5a087a2eceb7f5b185fb.zip opensbi-5a8cfcdf19d98b8dc5dd5a087a2eceb7f5b185fb.tar.gz opensbi-5a8cfcdf19d98b8dc5dd5a087a2eceb7f5b185fb.tar.bz2 | |
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 <apatel@ventanamicro.com>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Diffstat (limited to 'lib/utils/ipi')
| -rw-r--r-- | lib/utils/ipi/fdt_ipi_mswi.c | 21 |
1 files 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 <sbi/sbi_error.h> +#include <sbi/sbi_heap.h> #include <sbi_utils/fdt/fdt_helper.h> #include <sbi_utils/ipi/fdt_ipi.h> #include <sbi_utils/ipi/aclint_mswi.h> -#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; } |
