[netdrvr] convert sbmac tx to spin_lock_irqsave to prevent early IRQ enable
Netpoll will call the interrupt handler with interrupts disabled when using kgdboe, so spin_lock_irqsave() should be used instead of spin_lock_irq() to prevent interrupts from being incorrectly enabled. Signed-off-by: Weiwei Wang <weiwei.wang@windriver.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
315781408e
commit
be61ea5290
@ -2069,9 +2069,10 @@ static irqreturn_t sbmac_intr(int irq,void *dev_instance)
|
||||
static int sbmac_start_tx(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct sbmac_softc *sc = netdev_priv(dev);
|
||||
unsigned long flags;
|
||||
|
||||
/* lock eth irq */
|
||||
spin_lock_irq (&sc->sbm_lock);
|
||||
spin_lock_irqsave(&sc->sbm_lock, flags);
|
||||
|
||||
/*
|
||||
* Put the buffer on the transmit ring. If we
|
||||
@ -2081,14 +2082,14 @@ static int sbmac_start_tx(struct sk_buff *skb, struct net_device *dev)
|
||||
if (sbdma_add_txbuffer(&(sc->sbm_txdma),skb)) {
|
||||
/* XXX save skb that we could not send */
|
||||
netif_stop_queue(dev);
|
||||
spin_unlock_irq(&sc->sbm_lock);
|
||||
spin_unlock_irqrestore(&sc->sbm_lock, flags);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
dev->trans_start = jiffies;
|
||||
|
||||
spin_unlock_irq (&sc->sbm_lock);
|
||||
spin_unlock_irqrestore(&sc->sbm_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -2568,14 +2569,15 @@ static void sbmac_mii_poll(struct net_device *dev)
|
||||
static void sbmac_tx_timeout (struct net_device *dev)
|
||||
{
|
||||
struct sbmac_softc *sc = netdev_priv(dev);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irq (&sc->sbm_lock);
|
||||
spin_lock_irqsave(&sc->sbm_lock, flags);
|
||||
|
||||
|
||||
dev->trans_start = jiffies;
|
||||
dev->stats.tx_errors++;
|
||||
|
||||
spin_unlock_irq (&sc->sbm_lock);
|
||||
spin_unlock_irqrestore(&sc->sbm_lock, flags);
|
||||
|
||||
printk (KERN_WARNING "%s: Transmit timed out\n",dev->name);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user