The patch titled Char: mxser_new, correct fail paths has been removed from the -mm tree. Its filename was char-mxser_new-correct-fail-paths.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ 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 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 char-mxser_new-compact-structures-round2.patch char-mxser_new-reverse-if-else-paths-patch.patch char-mxser_new-comments-cleanup.patch char-mxser_new-correct-intr-handler-proto.patch char-mxser_new-delete-ttys-and-termios.patch char-mxser_new-pci-probing.patch char-mxser_new-clean-macros.patch maintainers-add-me-to-isicom-mxser.patch mxser_new-correct-tty-driver-name.patch mxser-workqueue-fixes.patch char-stallion-use-pr_debug-macro.patch char-stallion-remove-unneeded-casts.patch char-stallion-kill-typedefs.patch char-stallion-move-init-deinit.patch char-stallion-uninline-functions.patch char-stallion-mark-functions-as-init.patch char-stallion-remove-many-prototypes.patch char-isicom-expand-function.patch char-isicom-rename-init-function.patch char-isicom-remove-isa-code.patch char-isicom-remove-unneeded-memset.patch char-isicom-move-to-tty_register_device.patch char-isicom-use-pci_request_region.patch char-isicom-check-kmalloc-retval.patch char-isicom-use-completion.patch char-isicom-simplify-timer.patch char-isicom-remove-cvs-stuff.patch char-isicom-fix-tty-index-check.patch char-sx-convert-to-pci-probing.patch char-sx-use-kcalloc.patch char-sx-mark-functions-as-devinit.patch char-sx-use-eisa-probing.patch char-sx-ifdef-isa-code.patch char-sx-lock-boards-struct.patch char-sx-remove-duplicite-code.patch char-sx-whitespace-cleanup.patch char-sx-simplify-timer-logic.patch char-sx-fix-return-in-module-init.patch char-sx-use-pci_iomap.patch char-sx-request-regions.patch char-stallion-convert-to-pci-probing.patch char-stallion-prints-cleanup.patch char-stallion-implement-fail-paths.patch char-stallion-correct-__init-macros.patch char-stallion-functions-cleanup.patch char-stallion-fix-fail-paths.patch char-stallion-brd-struct-locking.patch char-stallion-remove-syntactic-sugar.patch char-stallion-variables-cleanup.patch char-stallion-use-dynamic-dev.patch char-istallion-convert-to-pci-probing.patch char-istallion-remove-the-mess.patch char-istallion-eliminate-typedefs.patch char-istallion-variables-cleanup.patch char-istallion-ifdef-eisa-code.patch char-istallion-brdnr-locking.patch char-istallion-free-only-isa.patch char-istallion-correct-fail-paths.patch char-istallion-fix-enabling.patch char-istallion-move-init-and-exit-code.patch char-istallion-change-init-sequence.patch char-istallion-dynamic-tty-device.patch char-istallion-use-mod_timer.patch char-cyclades-save-indent-levels.patch char-cyclades-lindent-the-code.patch char-cyclades-cleanup.patch char-cyclades-fix-warnings.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