.. | .. |
---|
38 | 38 | struct device_node *par_np = of_irq_find_parent(np); |
---|
39 | 39 | of_irq_init_cb_t irq_init_cb = of_device_get_match_data(&pdev->dev); |
---|
40 | 40 | |
---|
41 | | - if (!irq_init_cb) |
---|
| 41 | + if (!irq_init_cb) { |
---|
| 42 | + of_node_put(par_np); |
---|
42 | 43 | return -EINVAL; |
---|
| 44 | + } |
---|
43 | 45 | |
---|
44 | 46 | if (par_np == np) |
---|
45 | 47 | par_np = NULL; |
---|
.. | .. |
---|
52 | 54 | * interrupt controller. The actual initialization callback of this |
---|
53 | 55 | * interrupt controller can check for specific domains as necessary. |
---|
54 | 56 | */ |
---|
55 | | - if (par_np && !irq_find_matching_host(par_np, DOMAIN_BUS_ANY)) |
---|
| 57 | + if (par_np && !irq_find_matching_host(par_np, DOMAIN_BUS_ANY)) { |
---|
| 58 | + of_node_put(par_np); |
---|
56 | 59 | return -EPROBE_DEFER; |
---|
| 60 | + } |
---|
57 | 61 | |
---|
58 | 62 | return irq_init_cb(np, par_np); |
---|
59 | 63 | } |
---|