powerpc: Fix of_node_put() exit path in of_irq_map_one()
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
Mon, 20 Apr 2009 18:18:43 +0000 (12:18 -0600)
committerGrant Likely <grant.likely@secretlab.ca>
Mon, 20 Apr 2009 18:18:43 +0000 (12:18 -0600)
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
arch/powerpc/kernel/prom_parse.c

index 8f0856f312dab9d210a04d7b6b256745f9ea236c..8362620c9e6f449962b111f1537e767e87ea9df7 100644 (file)
@@ -971,7 +971,7 @@ int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq
        struct device_node *p;
        const u32 *intspec, *tmp, *addr;
        u32 intsize, intlen;
-       int res;
+       int res = -EINVAL;
 
        DBG("of_irq_map_one: dev=%s, index=%d\n", device->full_name, index);
 
@@ -995,21 +995,20 @@ int of_irq_map_one(struct device_node *device, int index, struct of_irq *out_irq
 
        /* Get size of interrupt specifier */
        tmp = of_get_property(p, "#interrupt-cells", NULL);
-       if (tmp == NULL) {
-               of_node_put(p);
-               return -EINVAL;
-       }
+       if (tmp == NULL)
+               goto out;
        intsize = *tmp;
 
        DBG(" intsize=%d intlen=%d\n", intsize, intlen);
 
        /* Check index */
        if ((index + 1) * intsize > intlen)
-               return -EINVAL;
+               goto out;
 
        /* Get new specifier and map it */
        res = of_irq_map_raw(p, intspec + index * intsize, intsize,
                             addr, out_irq);
+out:
        of_node_put(p);
        return res;
 }