aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-09-24 22:10:14 +0000
committerkaf24@scramble.cl.cam.ac.uk <kaf24@scramble.cl.cam.ac.uk>2003-09-24 22:10:14 +0000
commitc9f8b0b3e9bca92b73e92fa42090278c0581bfd5 (patch)
tree873d33040c600c8a412d3775f422f9b4cbece1c9
parentfea6971a1dad03fcf5aa070ca80ef28bf516a177 (diff)
downloadxen-c9f8b0b3e9bca92b73e92fa42090278c0581bfd5.tar.gz
xen-c9f8b0b3e9bca92b73e92fa42090278c0581bfd5.tar.bz2
xen-c9f8b0b3e9bca92b73e92fa42090278c0581bfd5.zip
bitkeeper revision 1.463 (3f721646eB7aycwk0W8Qp2kzIZ1KhA)
dev.c: Fix network start-of-day race.
-rw-r--r--xen/net/dev.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/xen/net/dev.c b/xen/net/dev.c
index 83d057a378..af23219796 100644
--- a/xen/net/dev.c
+++ b/xen/net/dev.c
@@ -2152,33 +2152,32 @@ int setup_network_devices(void)
{
int i, ret;
extern char opt_ifname[];
- struct net_device *dev;
- if ( (dev = dev_get_by_name(opt_ifname)) == NULL )
+ for ( i = 0; i < smp_num_cpus; i++ )
+ skb_queue_head_init(&rx_skb_queue[i]);
+
+ open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
+ tasklet_enable(&net_tx_tasklet);
+
+ if ( (the_dev = dev_get_by_name(opt_ifname)) == NULL )
{
printk("Could not find device %s: using dummy device\n", opt_ifname);
strcpy(opt_ifname, "dummy");
- if ( (dev = dev_get_by_name(opt_ifname)) == NULL )
+ if ( (the_dev = dev_get_by_name(opt_ifname)) == NULL )
{
printk("Failed to find the dummy device!\n");
return 0;
}
}
- if ( (ret = dev_open(dev)) != 0 )
+ if ( (ret = dev_open(the_dev)) != 0 )
{
printk("Error opening device %s for use (%d)\n", opt_ifname, ret);
+ the_dev = NULL;
return 0;
}
printk("Device %s opened and ready for use.\n", opt_ifname);
- the_dev = dev;
-
- for ( i = 0; i < smp_num_cpus; i++ )
- skb_queue_head_init(&rx_skb_queue[i]);
-
- open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL);
- tasklet_enable(&net_tx_tasklet);
return 1;
}