[PATCH] WAN: ioremap() failure checks in drivers
Eric Sesterhenn found that pci200syn initialization lacks return statement in ioremap() error path (coverity bug id #195). It looks like more WAN drivers have problems with ioremap(). Signed-off-by: Krzysztof Halasa <khc@pm.waw.pl> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
committed by
Jeff Garzik
parent
4a31e348e3
commit
4446065a2c
@@ -326,21 +326,21 @@ static int __init c101_run(unsigned long irq, unsigned long winbase)
|
|||||||
if (request_irq(irq, sca_intr, 0, devname, card)) {
|
if (request_irq(irq, sca_intr, 0, devname, card)) {
|
||||||
printk(KERN_ERR "c101: could not allocate IRQ\n");
|
printk(KERN_ERR "c101: could not allocate IRQ\n");
|
||||||
c101_destroy_card(card);
|
c101_destroy_card(card);
|
||||||
return(-EBUSY);
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
card->irq = irq;
|
card->irq = irq;
|
||||||
|
|
||||||
if (!request_mem_region(winbase, C101_MAPPED_RAM_SIZE, devname)) {
|
if (!request_mem_region(winbase, C101_MAPPED_RAM_SIZE, devname)) {
|
||||||
printk(KERN_ERR "c101: could not request RAM window\n");
|
printk(KERN_ERR "c101: could not request RAM window\n");
|
||||||
c101_destroy_card(card);
|
c101_destroy_card(card);
|
||||||
return(-EBUSY);
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
card->phy_winbase = winbase;
|
card->phy_winbase = winbase;
|
||||||
card->win0base = ioremap(winbase, C101_MAPPED_RAM_SIZE);
|
card->win0base = ioremap(winbase, C101_MAPPED_RAM_SIZE);
|
||||||
if (!card->win0base) {
|
if (!card->win0base) {
|
||||||
printk(KERN_ERR "c101: could not map I/O address\n");
|
printk(KERN_ERR "c101: could not map I/O address\n");
|
||||||
c101_destroy_card(card);
|
c101_destroy_card(card);
|
||||||
return -EBUSY;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
card->tx_ring_buffers = TX_RING_BUFFERS;
|
card->tx_ring_buffers = TX_RING_BUFFERS;
|
||||||
|
@@ -387,6 +387,11 @@ static int __init n2_run(unsigned long io, unsigned long irq,
|
|||||||
}
|
}
|
||||||
card->phy_winbase = winbase;
|
card->phy_winbase = winbase;
|
||||||
card->winbase = ioremap(winbase, USE_WINDOWSIZE);
|
card->winbase = ioremap(winbase, USE_WINDOWSIZE);
|
||||||
|
if (!card->winbase) {
|
||||||
|
printk(KERN_ERR "n2: ioremap() failed\n");
|
||||||
|
n2_destroy_card(card);
|
||||||
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
outb(0, io + N2_PCR);
|
outb(0, io + N2_PCR);
|
||||||
outb(winbase >> 12, io + N2_BAR);
|
outb(winbase >> 12, io + N2_BAR);
|
||||||
|
@@ -354,6 +354,7 @@ static int __devinit pci200_pci_init_one(struct pci_dev *pdev,
|
|||||||
card->rambase == NULL) {
|
card->rambase == NULL) {
|
||||||
printk(KERN_ERR "pci200syn: ioremap() failed\n");
|
printk(KERN_ERR "pci200syn: ioremap() failed\n");
|
||||||
pci200_pci_remove_one(pdev);
|
pci200_pci_remove_one(pdev);
|
||||||
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset PLX */
|
/* Reset PLX */
|
||||||
|
@@ -634,7 +634,13 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
|
|||||||
|
|
||||||
/* set up PLX mapping */
|
/* set up PLX mapping */
|
||||||
plx_phy = pci_resource_start(pdev, 0);
|
plx_phy = pci_resource_start(pdev, 0);
|
||||||
|
|
||||||
card->plx = ioremap_nocache(plx_phy, 0x70);
|
card->plx = ioremap_nocache(plx_phy, 0x70);
|
||||||
|
if (!card->plx) {
|
||||||
|
printk(KERN_ERR "wanxl: ioremap() failed\n");
|
||||||
|
wanxl_pci_remove_one(pdev);
|
||||||
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
#if RESET_WHILE_LOADING
|
#if RESET_WHILE_LOADING
|
||||||
wanxl_reset(card);
|
wanxl_reset(card);
|
||||||
@@ -700,6 +706,12 @@ static int __devinit wanxl_pci_init_one(struct pci_dev *pdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
mem = ioremap_nocache(mem_phy, PDM_OFFSET + sizeof(firmware));
|
mem = ioremap_nocache(mem_phy, PDM_OFFSET + sizeof(firmware));
|
||||||
|
if (!mem) {
|
||||||
|
printk(KERN_ERR "wanxl: ioremap() failed\n");
|
||||||
|
wanxl_pci_remove_one(pdev);
|
||||||
|
return -EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < sizeof(firmware); i += 4)
|
for (i = 0; i < sizeof(firmware); i += 4)
|
||||||
writel(htonl(*(u32*)(firmware + i)), mem + PDM_OFFSET + i);
|
writel(htonl(*(u32*)(firmware + i)), mem + PDM_OFFSET + i);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user