forked from Minki/linux
irqchip: crossbar: Return proper error value
crossbar_of_init always returns -ENOMEM in case of errors. There can be other causes of failure like invalid data from DT. So return a appropriate error value for that case. Signed-off-by: Nishanth Menon <nm@ti.com> Signed-off-by: Sricharan R <r.sricharan@ti.com> Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Link: https://lkml.kernel.org/r/1403766634-18543-10-git-send-email-r.sricharan@ti.com Signed-off-by: Jason Cooper <jason@lakedaemon.net>
This commit is contained in:
parent
e30ef8abb3
commit
edb442def9
@ -129,19 +129,25 @@ static const struct irq_domain_ops routable_irq_domain_ops = {
|
||||
|
||||
static int __init crossbar_of_init(struct device_node *node)
|
||||
{
|
||||
int i, size, max, reserved = 0, entry;
|
||||
int i, size, max = 0, reserved = 0, entry;
|
||||
const __be32 *irqsr;
|
||||
int ret = -ENOMEM;
|
||||
|
||||
cb = kzalloc(sizeof(*cb), GFP_KERNEL);
|
||||
|
||||
if (!cb)
|
||||
return -ENOMEM;
|
||||
return ret;
|
||||
|
||||
cb->crossbar_base = of_iomap(node, 0);
|
||||
if (!cb->crossbar_base)
|
||||
goto err1;
|
||||
|
||||
of_property_read_u32(node, "ti,max-irqs", &max);
|
||||
if (!max) {
|
||||
pr_err("missing 'ti,max-irqs' property\n");
|
||||
ret = -EINVAL;
|
||||
goto err2;
|
||||
}
|
||||
cb->irq_map = kcalloc(max, sizeof(int), GFP_KERNEL);
|
||||
if (!cb->irq_map)
|
||||
goto err2;
|
||||
@ -162,6 +168,7 @@ static int __init crossbar_of_init(struct device_node *node)
|
||||
i, &entry);
|
||||
if (entry > max) {
|
||||
pr_err("Invalid reserved entry\n");
|
||||
ret = -EINVAL;
|
||||
goto err3;
|
||||
}
|
||||
cb->irq_map[entry] = IRQ_RESERVED;
|
||||
@ -205,6 +212,7 @@ static int __init crossbar_of_init(struct device_node *node)
|
||||
break;
|
||||
default:
|
||||
pr_err("Invalid reg-size property\n");
|
||||
ret = -EINVAL;
|
||||
goto err4;
|
||||
break;
|
||||
}
|
||||
@ -243,7 +251,7 @@ err2:
|
||||
iounmap(cb->crossbar_base);
|
||||
err1:
|
||||
kfree(cb);
|
||||
return -ENOMEM;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct of_device_id crossbar_match[] __initconst = {
|
||||
|
Loading…
Reference in New Issue
Block a user