patchset against 2.6.23-rc2.  
corrects missing ioremap return checks and balancing on iounmap 
calls in /drivers/atm...

Signed-off-by: Scott Thompson <postfail <at> hushmail.com>
----------------------------------------------------------
diff --git a/drivers/atm/fore200e.c b/drivers/atm/fore200e.c
index 405ee5e..99e4ae4 100644
--- a/drivers/atm/fore200e.c
+++ b/drivers/atm/fore200e.c
@@ -795,8 +795,9 @@ fore200e_sba_map(struct fore200e* fore200e)
     fore200e->regs.sba.isr = sbus_ioremap(&sbus_dev->resource[2], 
0, SBA200E_ISR_LENGTH, "SBA ISR");
     fore200e->virt_base    = sbus_ioremap(&sbus_dev->resource[3], 
0, SBA200E_RAM_LENGTH, "SBA RAM");
 
-    if (fore200e->virt_base == NULL) {
+    if (!fore200e->regs.sba.hcr || !fore200e->regs.sba.bsr || 
!fore200e->regs.sba.isr || !fore200e->virt_base) {
        printk(FORE200E "unable to map RAM of device %s\n", fore200e-
>name);
+       fore200e_sba_unmap(fore200e);
        return -EFAULT;
     }
 
diff --git a/drivers/atm/he.c b/drivers/atm/he.c
index d33aba6..92d0d51 100644
--- a/drivers/atm/he.c
+++ b/drivers/atm/he.c
@@ -1107,6 +1107,7 @@ he_start(struct atm_dev *dev)
        status = he_readl(he_dev, RESET_CNTL);
        if ((status & BOARD_RST_STATUS) == 0) {
                hprintk("reset failed\n");
+               iounmap(he_dev->membase);
                return -EINVAL;
        }
 
@@ -1170,8 +1171,10 @@ he_start(struct atm_dev *dev)
        he_writel(he_dev, lb_swap, LB_SWAP);
 
        /* 4.10 initialize the interrupt queues */
-       if ((err = he_init_irq(he_dev)) != 0)
+       if ((err = he_init_irq(he_dev)) != 0) {
+               iounmap(he_dev->membase);
                return err;
+       }
 
 #ifdef USE_TASKLET
        tasklet_init(&he_dev->tasklet, he_tasklet, (unsigned long) 
he_dev);
@@ -1226,6 +1229,7 @@ he_start(struct atm_dev *dev)
 
        if (nvpibits != -1 && nvcibits != -1 && nvpibits+nvcibits != 
HE_MAXCIDBITS) {
                hprintk("nvpibits + nvcibits != %d\n", HE_MAXCIDBITS);
+               iounmap(he_dev->membase);
                return -ENODEV;
        }
 
@@ -1474,9 +1478,10 @@ he_start(struct atm_dev *dev)
 
        /* 5.1.8 cs block connection memory initialization */
        
-       if (he_init_cs_block_rcm(he_dev) < 0)
+       if (he_init_cs_block_rcm(he_dev) < 0) {
+               iounmap(he_dev->membase);
                return -ENOMEM;
-
+       }
        /* 5.1.10 initialize host structures */
 
        he_init_tpdrq(he_dev);
@@ -1486,6 +1491,7 @@ he_start(struct atm_dev *dev)
                sizeof(struct he_tpd), TPD_ALIGNMENT, 0);
        if (he_dev->tpd_pool == NULL) {
                hprintk("unable to create tpd pci_pool\n");
+               iounmap(he_dev->membase);
                return -ENOMEM;         
        }
 
@@ -1493,8 +1499,10 @@ he_start(struct atm_dev *dev)
 #else
        he_dev->tpd_base = (void *) pci_alloc_consistent(he_dev->pci_dev,
                        CONFIG_NUMTPDS * sizeof(struct he_tpd), 
&he_dev->tpd_base_phys);
-       if (!he_dev->tpd_base)
+       if (!he_dev->tpd_base) {
+               iounmap(he_dev->membase);
                return -ENOMEM;
+       }
 
        for (i = 0; i < CONFIG_NUMTPDS; ++i) {
                he_dev->tpd_base[i].status = (i << TPD_ADDR_SHIFT);
@@ -1505,8 +1513,10 @@ he_start(struct atm_dev *dev)
        he_dev->tpd_end = &he_dev->tpd_base[CONFIG_NUMTPDS - 1];
 #endif
 
-       if (he_init_group(he_dev, 0) != 0)
+       if (he_init_group(he_dev, 0) != 0) {
+               iounmap(he_dev->membase);
                return -ENOMEM;
+       }
 
        for (group = 1; group < HE_NUM_GROUPS; ++group) {
                he_writel(he_dev, 0x0, G0_RBPS_S + (group * 32));
@@ -1540,6 +1550,7 @@ he_start(struct atm_dev *dev)
                                sizeof(struct he_hsp), &he_dev->hsp_phys);
        if (he_dev->hsp == NULL) {
                hprintk("failed to allocate host status page\n");
+               iounmap(he_dev->membase);
                return -ENOMEM;
        }
        memset(he_dev->hsp, 0, sizeof(struct he_hsp));


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to