aboutsummaryrefslogtreecommitdiff
path: root/hw/xive.c
diff options
context:
space:
mode:
authorCédric Le Goater <clg@kaod.org>2020-11-04 23:20:54 +0100
committerVasant Hegde <hegdevasant@linux.vnet.ibm.com>2020-11-27 15:37:15 +0530
commit183861801d5529dd03108f30f2677bcf5b57525c (patch)
tree107f73bdb4abe997e5ccc37b41f6e3c88b69fc85 /hw/xive.c
parent8256da311027176dd22885205f16869f55b79f3b (diff)
downloadskiboot-183861801d5529dd03108f30f2677bcf5b57525c.zip
skiboot-183861801d5529dd03108f30f2677bcf5b57525c.tar.gz
skiboot-183861801d5529dd03108f30f2677bcf5b57525c.tar.bz2
xive/p9: Use local_alloc() to allocate the XIVE bitmaps
These bitmaps are big (128K). On systems with multiple sockets, we will run out of heap. Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Diffstat (limited to 'hw/xive.c')
-rw-r--r--hw/xive.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/hw/xive.c b/hw/xive.c
index c1786f2..34e211c 100644
--- a/hw/xive.c
+++ b/hw/xive.c
@@ -2636,15 +2636,19 @@ static struct xive *init_one_xive(struct dt_node *np)
x->int_ipi_top = XIVE_INT_FIRST;
/* Allocate a few bitmaps */
- x->eq_map = zalloc(BITMAP_BYTES(XIVE_EQ_COUNT >> 3));
+ x->eq_map = local_alloc(x->chip_id, BITMAP_BYTES(XIVE_EQ_COUNT >> 3), PAGE_SIZE);
assert(x->eq_map);
+ memset(x->eq_map, 0, BITMAP_BYTES(XIVE_EQ_COUNT >> 3));
+
/* Make sure we don't hand out 0 */
bitmap_set_bit(*x->eq_map, 0);
- x->int_enabled_map = zalloc(BITMAP_BYTES(XIVE_INT_COUNT));
+ x->int_enabled_map = local_alloc(x->chip_id, BITMAP_BYTES(XIVE_INT_COUNT), PAGE_SIZE);
assert(x->int_enabled_map);
- x->ipi_alloc_map = zalloc(BITMAP_BYTES(XIVE_INT_COUNT));
+ memset(x->int_enabled_map, 0, BITMAP_BYTES(XIVE_INT_COUNT));
+ x->ipi_alloc_map = local_alloc(x->chip_id, BITMAP_BYTES(XIVE_INT_COUNT), PAGE_SIZE);
assert(x->ipi_alloc_map);
+ memset(x->ipi_alloc_map, 0, BITMAP_BYTES(XIVE_INT_COUNT));
xive_dbg(x, "Handling interrupts [%08x..%08x]\n",
x->int_base, x->int_max - 1);