The patch titled Char: mxser_new, correct fail paths has been added to the -mm tree. Its filename is char-mxser_new-correct-fail-paths.patch See http://www.zip.com.au/~akpm/linux/patches/stuff/added-to-mm.txt to find out what to do about this ------------------------------------------------------ Subject: Char: mxser_new, correct fail paths From: Jiri Slaby <jirislaby@xxxxxxxxx> Resources were not released in some fail paths. Correct this behaviour by implementing function and calling it when something fails. Cc: Alan Cox <alan@xxxxxxxxxxxxxxxxxxx> Signed-off-by: Jiri Slaby <jirislaby@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- drivers/char/mxser_new.c | 49 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff -puN drivers/char/mxser_new.c~char-mxser_new-correct-fail-paths drivers/char/mxser_new.c --- a/drivers/char/mxser_new.c~char-mxser_new-correct-fail-paths +++ a/drivers/char/mxser_new.c @@ -2563,6 +2563,22 @@ static const struct tty_operations mxser * The MOXA Smartio/Industio serial driver boot-time initialization code! */ +static void mxser_release_res(struct mxser_board *brd, unsigned int irq) +{ + struct pci_dev *pdev = brd->pdev; + + if (irq) + free_irq(brd->irq, brd); + if (pdev != NULL) { /* PCI */ + pci_release_region(pdev, 2); + pci_release_region(pdev, 3); + pci_dev_put(pdev); + } else { + release_region(brd->ports[0].ioaddr, 8 * brd->nports); + release_region(brd->vector, 1); + } +} + static int __devinit mxser_initbrd(struct mxser_board *brd) { struct mxser_port *info; @@ -2613,6 +2629,8 @@ static int __devinit mxser_initbrd(struc printk(KERN_ERR "Board %s: Request irq failed, IRQ (%d) may " "conflict with another device.\n", mxser_brdname[brd->board_type - 1], brd->irq); + /* We hold resources, we need to release them. */ + mxser_release_res(brd, 0); return retval; } return 0; @@ -2963,14 +2981,9 @@ static int __init mxser_module_init(void " driver !\n"); put_tty_driver(mxvar_sdriver); - for (i = 0; i < MXSER_BOARDS; i++) { - if (mxser_boards[i].board_type == -1) - continue; - else { - free_irq(mxser_boards[i].irq, &mxser_boards[i]); - /* todo: release io, vector */ - } - } + for (i = 0; i < MXSER_BOARDS; i++) + if (mxser_boards[i].board_type != -1) + mxser_release_res(&mxser_boards[i], 1); return retval; } @@ -2991,24 +3004,10 @@ static void __exit mxser_module_exit(voi else printk(KERN_ERR "Couldn't unregister MOXA Smartio/Industio family serial driver\n"); - for (i = 0; i < MXSER_BOARDS; i++) { - struct pci_dev *pdev; + for (i = 0; i < MXSER_BOARDS; i++) + if (mxser_boards[i].board_type != -1) + mxser_release_res(&mxser_boards[i], 1); - if (mxser_boards[i].board_type == -1) - continue; - else { - pdev = mxser_boards[i].pdev; - free_irq(mxser_boards[i].irq, &mxser_boards[i]); - if (pdev != NULL) { /* PCI */ - pci_release_region(pdev, 2); - pci_release_region(pdev, 3); - pci_dev_put(pdev); - } else { - release_region(mxser_boards[i].ports[0].ioaddr, 8 * mxser_boards[i].nports); - release_region(mxser_boards[i].vector, 1); - } - } - } pr_debug("Done.\n"); } _ Patches currently in -mm which might be from jirislaby@xxxxxxxxx are pci-mxser-pci-refcounts.patch mxser-make-an-experimental-clone.patch char-mxser_new-correct-include-file.patch char-mxser_new-upgrade-to-191.patch char-mxser_new-rework-to-allow-dynamic-structs.patch char-mxser_new-use-__devinit-macros.patch char-mxser_new-pci_request_region-for-pci-regions.patch char-mxser_new-check-request_region-retvals.patch char-mxser_new-kill-unneeded-memsets.patch char-mxser_new-revert-spin_lock-changes.patch char-mxser_new-remove-request-for-testers-line.patch char-mxser_new-debug-printk-dependent-on-debug.patch char-mxser_new-alter-license-terms.patch char-mxser_new-code-upside-down.patch char-mxser_new-cmspar-is-defined.patch char-remove-unneded-termbits-redefinitions-mxser_new.patch char-mxser_new-eliminate-tty-ldisc-deref.patch char-mxser_new-testbit-for-bit-testing.patch char-mxser_new-correct-fail-paths.patch char-mxser_new-dont-check-tty_unregister-retval.patch char-mxser_new-compress-isa-finding.patch char-mxser_new-register-tty-devices-on-the-fly.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html