net/irda: sh_sir: Modify iounmap wrong execution
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 5 Apr 2010 18:43:18 +0000 (18:43 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 7 Apr 2010 02:50:21 +0000 (19:50 -0700)
On sh_sir_probe function, there was a possibility that
iounmap is executed even though self->membase was NULL when error case.
This patch modify it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/irda/sh_sir.c

index 761ed01..7c17ab8 100644 (file)
@@ -708,7 +708,6 @@ static int __devinit sh_sir_probe(struct platform_device *pdev)
        struct sh_sir_self *self;
        struct resource *res;
        char clk_name[8];
-       void __iomem *base;
        unsigned int irq;
        int err = -ENOMEM;
 
@@ -723,14 +722,14 @@ static int __devinit sh_sir_probe(struct platform_device *pdev)
        if (!ndev)
                goto exit;
 
-       base = ioremap_nocache(res->start, resource_size(res));
-       if (!base) {
+       self = netdev_priv(ndev);
+       self->membase = ioremap_nocache(res->start, resource_size(res));
+       if (!self->membase) {
                err = -ENXIO;
                dev_err(&pdev->dev, "Unable to ioremap.\n");
                goto err_mem_1;
        }
 
-       self = netdev_priv(ndev);
        err = sh_sir_init_iobuf(self, IRDA_SKB_MAX_MTU, IRDA_SIR_MAX_FRAME);
        if (err)
                goto err_mem_2;
@@ -747,7 +746,6 @@ static int __devinit sh_sir_probe(struct platform_device *pdev)
        ndev->netdev_ops        = &sh_sir_ndo;
        ndev->irq               = irq;
 
-       self->membase                   = base;
        self->ndev                      = ndev;
        self->qos.baud_rate.bits        &= IR_9600; /* FIXME */
        self->qos.min_turn_time.bits    = 1; /* 10 ms or more */