]> err.no Git - linux-2.6/commitdiff
[PATCH] b44: late request_irq in b44_open
authorFrancois Romieu <romieu@fr.zoreil.com>
Mon, 7 Nov 2005 00:52:57 +0000 (01:52 +0100)
committerJeff Garzik <jgarzik@pobox.com>
Mon, 7 Nov 2005 08:37:05 +0000 (03:37 -0500)
Don't request_irq before the registers are reset/init.

Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
drivers/net/b44.c

index 09e1b4deae59c7c583c14c3c7af04e22b27c4862..ecc2e32c38c1f55c92c0c2b7ff2159461f66d8ad 100644 (file)
@@ -1388,13 +1388,7 @@ static int b44_open(struct net_device *dev)
 
        err = b44_alloc_consistent(bp);
        if (err)
-               return err;
-
-       err = request_irq(dev->irq, b44_interrupt, SA_SHIRQ, dev->name, dev);
-       if (err)
-               goto err_out_free;
-
-       spin_lock_irq(&bp->lock);
+               goto out;
 
        b44_init_rings(bp);
        b44_init_hw(bp);
@@ -1403,7 +1397,13 @@ static int b44_open(struct net_device *dev)
        netif_carrier_off(dev);
        b44_check_phy(bp);
 
-       spin_unlock_irq(&bp->lock);
+       err = request_irq(dev->irq, b44_interrupt, SA_SHIRQ, dev->name, dev);
+       if (unlikely(err < 0)) {
+               b44_chip_reset(bp);
+               b44_free_rings(bp);
+               b44_free_consistent(bp);
+               goto out;
+       }
 
        init_timer(&bp->timer);
        bp->timer.expires = jiffies + HZ;
@@ -1412,11 +1412,7 @@ static int b44_open(struct net_device *dev)
        add_timer(&bp->timer);
 
        b44_enable_ints(bp);
-
-       return 0;
-
-err_out_free:
-       b44_free_consistent(bp);
+out:
        return err;
 }