staging: dgnc: missing NULL check for ioremap in dgnc_do_remap()

The ioremap() function can be failed, so it need to have error
handling in dgnc_do_remap(). And also the return type of
dgnc_do_remap() should be changed from "void" to "int"

Signed-off-by: Daeseok Youn <daeseok.youn@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Daeseok Youn 2016-09-26 09:40:58 +09:00 committed by Greg Kroah-Hartman
parent f530834ef4
commit b09f0cd53f

View File

@ -43,7 +43,7 @@ static void dgnc_cleanup_board(struct dgnc_board *brd);
static void dgnc_poll_handler(ulong dummy); static void dgnc_poll_handler(ulong dummy);
static int dgnc_init_one(struct pci_dev *pdev, static int dgnc_init_one(struct pci_dev *pdev,
const struct pci_device_id *ent); const struct pci_device_id *ent);
static void dgnc_do_remap(struct dgnc_board *brd); static int dgnc_do_remap(struct dgnc_board *brd);
/* /*
* File operations permitted on Control/Management major. * File operations permitted on Control/Management major.
@ -431,7 +431,10 @@ static int dgnc_found_board(struct pci_dev *pdev, int id)
brd->bd_uart_offset = 0x8; brd->bd_uart_offset = 0x8;
brd->bd_dividend = 921600; brd->bd_dividend = 921600;
dgnc_do_remap(brd); rc = dgnc_do_remap(brd);
if (rc < 0)
goto failed;
/* Get and store the board VPD, if it exists */ /* Get and store the board VPD, if it exists */
brd->bd_ops->vpd(brd); brd->bd_ops->vpd(brd);
@ -483,15 +486,17 @@ static int dgnc_found_board(struct pci_dev *pdev, int id)
brd->bd_uart_offset = 0x200; brd->bd_uart_offset = 0x200;
brd->bd_dividend = 921600; brd->bd_dividend = 921600;
dgnc_do_remap(brd); rc = dgnc_do_remap(brd);
if (brd->re_map_membase) { if (rc < 0)
/* Read and store the dvid after remapping */ goto failed;
brd->dvid = readb(brd->re_map_membase + 0x8D);
/* Read and store the dvid after remapping */
brd->dvid = readb(brd->re_map_membase + 0x8D);
/* Get and store the board VPD, if it exists */
brd->bd_ops->vpd(brd);
/* Get and store the board VPD, if it exists */
brd->bd_ops->vpd(brd);
}
break; break;
default: default:
@ -566,9 +571,15 @@ static int dgnc_finalize_board_init(struct dgnc_board *brd)
/* /*
* Remap PCI memory. * Remap PCI memory.
*/ */
static void dgnc_do_remap(struct dgnc_board *brd) static int dgnc_do_remap(struct dgnc_board *brd)
{ {
int rc = 0;
brd->re_map_membase = ioremap(brd->membase, 0x1000); brd->re_map_membase = ioremap(brd->membase, 0x1000);
if (!brd->re_map_membase)
rc = -ENOMEM;
return rc;
} }
/* /*