dz: don't panic() when request_irq() fails
Well, panic() is a little bit undue if request_irq() fails; there is probably no need to justify it any further. Handle the case gracefully, by unregistering the driver. Signed-off-by: Maciej W. Rozycki <macro@linux-mips.org> Cc: Jiri Slaby <jirislaby@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
dbab81281d
commit
0ba137e23e
1 changed files with 15 additions and 5 deletions
|
@ -794,18 +794,28 @@ static int __init dz_init(void)
|
||||||
dz_reset(&dz_ports[0]);
|
dz_reset(&dz_ports[0]);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (request_irq(dz_ports[0].port.irq, dz_interrupt,
|
|
||||||
IRQF_DISABLED, "DZ", &dz_ports[0]))
|
|
||||||
panic("Unable to register DZ interrupt");
|
|
||||||
|
|
||||||
ret = uart_register_driver(&dz_reg);
|
ret = uart_register_driver(&dz_reg);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
goto out;
|
||||||
|
|
||||||
|
ret = request_irq(dz_ports[0].port.irq, dz_interrupt, IRQF_DISABLED,
|
||||||
|
"DZ", &dz_ports[0]);
|
||||||
|
if (ret != 0) {
|
||||||
|
printk(KERN_ERR "dz: Cannot get IRQ %d!\n",
|
||||||
|
dz_ports[0].port.irq);
|
||||||
|
goto out_unregister;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < DZ_NB_PORT; i++)
|
for (i = 0; i < DZ_NB_PORT; i++)
|
||||||
uart_add_one_port(&dz_reg, &dz_ports[i].port);
|
uart_add_one_port(&dz_reg, &dz_ports[i].port);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
out_unregister:
|
||||||
|
uart_unregister_driver(&dz_reg);
|
||||||
|
|
||||||
|
out:
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(dz_init);
|
module_init(dz_init);
|
||||||
|
|
Loading…
Add table
Reference in a new issue