of/irq: add missing of_node_put
[linux-2.6-block.git] / drivers / of / irq.c
index 0c7f4cbe3434b7058222182c6d4b120ed1dd94aa..bcc1f4b2211efc07f12cd95a1f895392648dde89 100644 (file)
@@ -501,10 +501,12 @@ void __init of_irq_init(const struct of_device_id *matches)
                 * pointer, interrupt-parent device_node etc.
                 */
                desc = kzalloc(sizeof(*desc), GFP_KERNEL);
-               if (WARN_ON(!desc))
+               if (WARN_ON(!desc)) {
+                       of_node_put(np);
                        goto err;
+               }
 
-               desc->dev = np;
+               desc->dev = of_node_get(np);
                desc->interrupt_parent = of_irq_find_parent(np);
                if (desc->interrupt_parent == np)
                        desc->interrupt_parent = NULL;
@@ -575,6 +577,7 @@ void __init of_irq_init(const struct of_device_id *matches)
 err:
        list_for_each_entry_safe(desc, temp_desc, &intc_desc_list, list) {
                list_del(&desc->list);
+               of_node_put(desc->dev);
                kfree(desc);
        }
 }