mirror of https://gitee.com/openkylin/linux.git
of/irq: Mark interrupt controllers as populated before initialisation
That way the init callback may clear the flag again, in case of drivers
split between early irq chip and a normal platform driver.
Fixes: 15cc2ed6dc
("of/irq: Mark initialised interrupt controllers as populated")
Suggested-by: Rob Herring <robh@kernel.org>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Acked-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Rob Herring <robh@kernel.org>
This commit is contained in:
parent
89c67752ae
commit
e55aeb6ba4
|
@ -544,12 +544,15 @@ void __init of_irq_init(const struct of_device_id *matches)
|
||||||
|
|
||||||
list_del(&desc->list);
|
list_del(&desc->list);
|
||||||
|
|
||||||
|
of_node_set_flag(desc->dev, OF_POPULATED);
|
||||||
|
|
||||||
pr_debug("of_irq_init: init %s (%p), parent %p\n",
|
pr_debug("of_irq_init: init %s (%p), parent %p\n",
|
||||||
desc->dev->full_name,
|
desc->dev->full_name,
|
||||||
desc->dev, desc->interrupt_parent);
|
desc->dev, desc->interrupt_parent);
|
||||||
ret = desc->irq_init_cb(desc->dev,
|
ret = desc->irq_init_cb(desc->dev,
|
||||||
desc->interrupt_parent);
|
desc->interrupt_parent);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
of_node_clear_flag(desc->dev, OF_POPULATED);
|
||||||
kfree(desc);
|
kfree(desc);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -559,8 +562,6 @@ void __init of_irq_init(const struct of_device_id *matches)
|
||||||
* its children can get processed in a subsequent pass.
|
* its children can get processed in a subsequent pass.
|
||||||
*/
|
*/
|
||||||
list_add_tail(&desc->list, &intc_parent_list);
|
list_add_tail(&desc->list, &intc_parent_list);
|
||||||
|
|
||||||
of_node_set_flag(desc->dev, OF_POPULATED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the next pending parent that might have children */
|
/* Get the next pending parent that might have children */
|
||||||
|
|
Loading…
Reference in New Issue