diff options
author | Jiri Slaby <jirislaby@gmail.com> | 2006-12-08 02:38:17 -0800 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-12-08 08:28:53 -0800 |
commit | 7a7a5c3303a66c9000f270d6dd03ddeda8c80768 (patch) | |
tree | 18e1a4f4dbdb2dced1875f2d6411eb3ec3c257bc /drivers/char/mxser_new.c | |
parent | 596280156afa99cb02f2193e0e06e6e4f2434f30 (diff) |
[PATCH] char: mxser_new, check request_region retvals
mxser_new, check request_region retvals
Return values of (pci_)request_region should be checked and error should be
returned if something is in bad state.
Signed-off-by: Jiri Slaby <jirislaby@gmail.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/char/mxser_new.c')
-rw-r--r-- | drivers/char/mxser_new.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/drivers/char/mxser_new.c b/drivers/char/mxser_new.c index 4db43f31b693..5a4c80d38c65 100644 --- a/drivers/char/mxser_new.c +++ b/drivers/char/mxser_new.c @@ -622,19 +622,24 @@ static int __init mxser_get_PCI_conf(int board_type, struct mxser_board *brd, { unsigned int i, j; unsigned long ioaddress; + int retval; /* io address */ brd->board_type = board_type; brd->nports = mxser_numports[board_type - 1]; ioaddress = pci_resource_start(pdev, 2); - pci_request_region(pdev, 2, "mxser(IO)"); + retval = pci_request_region(pdev, 2, "mxser(IO)"); + if (retval) + goto err; for (i = 0; i < brd->nports; i++) brd->ports[i].ioaddr = ioaddress + 8 * i; /* vector */ ioaddress = pci_resource_start(pdev, 3); - pci_request_region(pdev, 3, "mxser(vector)"); + retval = pci_request_region(pdev, 3, "mxser(vector)"); + if (retval) + goto err_relio; brd->vector = ioaddress; /* irq */ @@ -674,6 +679,10 @@ static int __init mxser_get_PCI_conf(int board_type, struct mxser_board *brd, brd->ports[i].baud_base = 921600; } return 0; +err_relio: + pci_release_region(pdev, 2); +err: + return retval; } static int __init mxser_init(void) @@ -3009,8 +3018,12 @@ static int __init mxser_get_ISA_conf(int cap, struct mxser_board *brd) brd->nports = 8; else brd->nports = 4; - request_region(brd->ports[0].ioaddr, 8 * brd->nports, "mxser(IO)"); - request_region(brd->vector, 1, "mxser(vector)"); + if (!request_region(brd->ports[0].ioaddr, 8 * brd->nports, "mxser(IO)")) + return MXSER_ERR_IOADDR; + if (!request_region(brd->vector, 1, "mxser(vector)")) { + release_region(brd->ports[0].ioaddr, 8 * brd->nports); + return MXSER_ERR_VECTOR; + } return brd->nports; } |