diff options
author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-09 15:50:06 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-09 15:50:06 -0700 |
commit | c87fed1546bd00b42ee75f26c6b45393e4bf7559 (patch) | |
tree | 2ef383dcd1cb569e1b0da9c26c7e868f114bfd7b /drivers/net/8139too.c | |
parent | 84e74f6b770efe7c9beb604118695aa311b969f5 (diff) | |
parent | 70f05366b71c51c35c25c0b76b4318fbc26c975a (diff) |
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6
* 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6: (23 commits)
[PATCH] 8139too deadlock fix
[netdrvr] 3c59x: snip changelog from source code
e1000: increase version to 7.1.9-k2
e1000: add ich8lan device ID's
e1000: allow user to disable ich8 lock loss workaround
e1000: integrate ich8 support into driver
e1000: add ich8lan core functions
e1000: disable ERT
e1000: check return value of _get_speed_and_duplex
e1000: M88 PHY workaround
e1000: fix adapter led blinking inconsistency
e1000: disable CRC stripping workaround
e1000: force register write flushes to circumvent broken platforms
e1000: rework module param code with uninitialized values
e1000: recycle skb
e1000: change printk into DPRINTK
e1000: add smart power down code
e1000: small performance tweak by removing double code
e1000: fix CONFIG_PM blocks
e1000: Make PHY powerup/down a function
...
Diffstat (limited to 'drivers/net/8139too.c')
-rw-r--r-- | drivers/net/8139too.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/8139too.c b/drivers/net/8139too.c index cd9718512d1..e4f4eaff767 100644 --- a/drivers/net/8139too.c +++ b/drivers/net/8139too.c @@ -1709,6 +1709,7 @@ static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev) void __iomem *ioaddr = tp->mmio_addr; unsigned int entry; unsigned int len = skb->len; + unsigned long flags; /* Calculate the next Tx descriptor entry. */ entry = tp->cur_tx % NUM_TX_DESC; @@ -1725,7 +1726,7 @@ static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev) return 0; } - spin_lock_irq(&tp->lock); + spin_lock_irqsave(&tp->lock, flags); RTL_W32_F (TxStatus0 + (entry * sizeof (u32)), tp->tx_flag | max(len, (unsigned int)ETH_ZLEN)); @@ -1736,7 +1737,7 @@ static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev) if ((tp->cur_tx - NUM_TX_DESC) == tp->dirty_tx) netif_stop_queue (dev); - spin_unlock_irq(&tp->lock); + spin_unlock_irqrestore(&tp->lock, flags); if (netif_msg_tx_queued(tp)) printk (KERN_DEBUG "%s: Queued Tx packet size %u to slot %d.\n", |