firewire net: Setup broadcast and local fifo independently.
authorYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Fri, 8 Mar 2013 01:42:38 +0000 (10:42 +0900)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Wed, 13 Mar 2013 15:11:11 +0000 (16:11 +0100)
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
drivers/firewire/net.c

index 96f6ee5bffd4ddd54e4627c4fe4424fdb6c2be0d..fbd07ebd3f5fa2a6d07f2a83683bfccb5cd93cec 100644 (file)
@@ -1156,10 +1156,6 @@ static int fwnet_broadcast_start(struct fwnet_device *dev)
        unsigned long offset;
        unsigned u;
 
-       retval = fwnet_fifo_start(dev);
-       if (retval < 0)
-               goto failed_initial;
-
        max_receive = 1U << (dev->card->max_receive + 1);
        num_packets = (FWNET_ISO_PAGE_COUNT * PAGE_SIZE) / max_receive;
 
@@ -1240,8 +1236,6 @@ static int fwnet_broadcast_start(struct fwnet_device *dev)
        fw_iso_context_destroy(context);
        dev->broadcast_rcv_context = NULL;
  failed_context_create:
-       fwnet_fifo_stop(dev);
- failed_initial:
 
        return retval;
 }
@@ -1260,10 +1254,14 @@ static int fwnet_open(struct net_device *net)
        struct fwnet_device *dev = netdev_priv(net);
        int ret;
 
+       ret = fwnet_fifo_start(dev);
+       if (ret)
+               return ret;
+
        if (dev->broadcast_state == FWNET_BROADCAST_ERROR) {
                ret = fwnet_broadcast_start(dev);
                if (ret)
-                       return ret;
+                       goto out;
        }
        netif_start_queue(net);
 
@@ -1272,6 +1270,9 @@ static int fwnet_open(struct net_device *net)
        spin_unlock_irq(&dev->lock);
 
        return 0;
+out:
+       fwnet_fifo_stop(dev);
+       return ret;
 }
 
 /* ifdown */