diff options
Diffstat (limited to 'drivers/net/via-rhine.c')
-rw-r--r-- | drivers/net/via-rhine.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/via-rhine.c b/drivers/net/via-rhine.c index 081402cb05fd..1fd70583be44 100644 --- a/drivers/net/via-rhine.c +++ b/drivers/net/via-rhine.c | |||
@@ -1220,6 +1220,7 @@ static netdev_tx_t rhine_start_tx(struct sk_buff *skb, | |||
1220 | struct rhine_private *rp = netdev_priv(dev); | 1220 | struct rhine_private *rp = netdev_priv(dev); |
1221 | void __iomem *ioaddr = rp->base; | 1221 | void __iomem *ioaddr = rp->base; |
1222 | unsigned entry; | 1222 | unsigned entry; |
1223 | unsigned long flags; | ||
1223 | 1224 | ||
1224 | /* Caution: the write order is important here, set the field | 1225 | /* Caution: the write order is important here, set the field |
1225 | with the "ownership" bits last. */ | 1226 | with the "ownership" bits last. */ |
@@ -1263,7 +1264,7 @@ static netdev_tx_t rhine_start_tx(struct sk_buff *skb, | |||
1263 | cpu_to_le32(TXDESC | (skb->len >= ETH_ZLEN ? skb->len : ETH_ZLEN)); | 1264 | cpu_to_le32(TXDESC | (skb->len >= ETH_ZLEN ? skb->len : ETH_ZLEN)); |
1264 | 1265 | ||
1265 | /* lock eth irq */ | 1266 | /* lock eth irq */ |
1266 | spin_lock_irq(&rp->lock); | 1267 | spin_lock_irqsave(&rp->lock, flags); |
1267 | wmb(); | 1268 | wmb(); |
1268 | rp->tx_ring[entry].tx_status = cpu_to_le32(DescOwn); | 1269 | rp->tx_ring[entry].tx_status = cpu_to_le32(DescOwn); |
1269 | wmb(); | 1270 | wmb(); |
@@ -1282,7 +1283,7 @@ static netdev_tx_t rhine_start_tx(struct sk_buff *skb, | |||
1282 | 1283 | ||
1283 | dev->trans_start = jiffies; | 1284 | dev->trans_start = jiffies; |
1284 | 1285 | ||
1285 | spin_unlock_irq(&rp->lock); | 1286 | spin_unlock_irqrestore(&rp->lock, flags); |
1286 | 1287 | ||
1287 | if (debug > 4) { | 1288 | if (debug > 4) { |
1288 | printk(KERN_DEBUG "%s: Transmit frame #%d queued in slot %d.\n", | 1289 | printk(KERN_DEBUG "%s: Transmit frame #%d queued in slot %d.\n", |