On PowerNV platform, the OPAL interrupts are exported by firmware
through device-node property (/ibm,opal::opal-interrupts). Under
some extreme circumstances (e.g. simulator), we don't have this
property found from the device tree. For that case, we shouldn't
allocate the interrupt map. Otherwise, slab complains allocating
zero sized memory chunk.

Signed-off-by: Gavin Shan <gws...@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/opal.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/platforms/powernv/opal.c 
b/arch/powerpc/platforms/powernv/opal.c
index f10b9ec..e61cefe 100644
--- a/arch/powerpc/platforms/powernv/opal.c
+++ b/arch/powerpc/platforms/powernv/opal.c
@@ -726,11 +726,14 @@ static int __init opal_init(void)
 
        /* Find all OPAL interrupts and request them */
        irqs = of_get_property(opal_node, "opal-interrupts", &irqlen);
+       opal_irq_count = irqs ? (irqlen / 4) : 0;
+       if (opal_irq_count)
+               opal_irqs = kzalloc(opal_irq_count * sizeof(unsigned int),
+                                   GFP_KERNEL);
        pr_debug("opal: Found %d interrupts reserved for OPAL\n",
-                irqs ? (irqlen / 4) : 0);
-       opal_irq_count = irqlen / 4;
-       opal_irqs = kzalloc(opal_irq_count * sizeof(unsigned int), GFP_KERNEL);
-       for (i = 0; irqs && i < (irqlen / 4); i++, irqs++) {
+                opal_irq_count);
+
+       for (i = 0; opal_irqs && i < opal_irq_count; i++, irqs++) {
                unsigned int hwirq = be32_to_cpup(irqs);
                unsigned int irq = irq_create_mapping(NULL, hwirq);
                if (irq == NO_IRQ) {
@@ -775,7 +778,7 @@ void opal_shutdown(void)
        long rc = OPAL_BUSY;
 
        /* First free interrupts, which will also mask them */
-       for (i = 0; i < opal_irq_count; i++) {
+       for (i = 0; opal_irqs && i < opal_irq_count; i++) {
                if (opal_irqs[i])
                        free_irq(opal_irqs[i], NULL);
                opal_irqs[i] = 0;
-- 
1.8.3.2

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to