diff options
author | Maciej W. Rozycki <macro@linux-mips.org> | 2008-02-07 00:15:08 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-07 08:42:24 -0800 |
commit | 0ba137e23e8d8f5cb15778b44be281c5687afc49 (patch) | |
tree | 0ee61cee68b30e114b121967ac523e288417a56d | |
parent | dbab81281d3227af3d8a04aa748c5f41befa5d43 (diff) | |
download | kernel_samsung_crespo-0ba137e23e8d8f5cb15778b44be281c5687afc49.zip kernel_samsung_crespo-0ba137e23e8d8f5cb15778b44be281c5687afc49.tar.gz kernel_samsung_crespo-0ba137e23e8d8f5cb15778b44be281c5687afc49.tar.bz2 |
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>
-rw-r--r-- | drivers/serial/dz.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/serial/dz.c b/drivers/serial/dz.c index e1a2e41..fb6f273 100644 --- a/drivers/serial/dz.c +++ b/drivers/serial/dz.c @@ -794,18 +794,28 @@ static int __init dz_init(void) dz_reset(&dz_ports[0]); #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); 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++) uart_add_one_port(&dz_reg, &dz_ports[i].port); return ret; + +out_unregister: + uart_unregister_driver(&dz_reg); + +out: + return ret; } module_init(dz_init); |