From: Maciej W. Rozycki Date: Thu, 7 Feb 2008 08:15:08 +0000 (-0800) Subject: dz: don't panic() when request_irq() fails X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=0ba137e23e8d8f5cb15778b44be281c5687afc49;p=openwrt%2Fstaging%2Fblogic.git 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 Cc: Jiri Slaby Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/drivers/serial/dz.c b/drivers/serial/dz.c index e1a2e413eb7d..fb6f27302935 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);