lkml.org 
[lkml]   [2007]   [Apr]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 8/11] Char: cyclades, cy_init error handling
    From
    Date
    cyclades, cy_init error handling

    - do not panic if tty_register_driver fails
    - handle fail paths properly

    Signed-off-by: Jiri Slaby <jirislaby@gmail.com>

    ---
    commit 8c76c370ee1c1efa31f64807162c15922fae1e3a
    tree 19fe12eba568aece1d0b406a4d735f393f2cd3dd
    parent b1b13ea51dcaef72c5298a04d233b92206adf978
    author Jiri Slaby <jirislaby@gmail.com> Mon, 02 Apr 2007 15:47:49 +0200
    committer Jiri Slaby <jirislaby@gmail.com> Tue, 10 Apr 2007 10:48:06 +0200

    drivers/char/cyclades.c | 23 +++++++++++++++++++----
    1 files changed, 19 insertions(+), 4 deletions(-)

    diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
    index 1baf7d7..22f8ec4 100644
    --- a/drivers/char/cyclades.c
    +++ b/drivers/char/cyclades.c
    @@ -5460,10 +5460,11 @@ static const struct tty_operations cy_ops = {
    static int __init cy_init(void)
    {
    unsigned int i, nboards;
    + int retval = -ENOMEM;

    cy_serial_driver = alloc_tty_driver(NR_PORTS);
    if (!cy_serial_driver)
    - return -ENOMEM;
    + goto err;
    show_version();

    /* Initialize the tty_driver structure */
    @@ -5481,8 +5482,11 @@ static int __init cy_init(void)
    cy_serial_driver->flags = TTY_DRIVER_REAL_RAW;
    tty_set_operations(cy_serial_driver, &cy_ops);

    - if (tty_register_driver(cy_serial_driver))
    - panic("Couldn't register Cyclades serial driver\n");
    + retval = tty_register_driver(cy_serial_driver);
    + if (retval) {
    + printk(KERN_ERR "Couldn't register Cyclades serial driver\n");
    + goto err_frtty;
    + }

    for (i = 0; i < NR_CARDS; i++) {
    /* base_addr=0 indicates board not found */
    @@ -5508,7 +5512,18 @@ static int __init cy_init(void)
    /* look for pci boards */
    nboards += cy_detect_pci();

    - return nboards ? 0 : -ENODEV;
    + if (nboards == 0) {
    + retval = -ENODEV;
    + goto err_unr;
    + }
    +
    + return 0;
    +err_unr:
    + tty_unregister_driver(cy_serial_driver);
    +err_frtty:
    + put_tty_driver(cy_serial_driver);
    +err:
    + return retval;
    } /* cy_init */

    static void __exit cy_cleanup_module(void)
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-04-18 12:11    [W:0.022 / U:33.188 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site