diff options
author | Francois Romieu <romieu@fr.zoreil.com> | 2008-01-10 17:25:30 -0500 |
---|---|---|
committer | Francois Romieu <romieu@fr.zoreil.com> | 2008-01-17 17:35:09 -0500 |
commit | 227bc24d675d80de1cfb3ab72891cc932dadbc3b (patch) | |
tree | b84be422da6ae646f0a21de4937ab6cae18ae5a9 /drivers/net/ipg.c | |
parent | d8c89eb3a12f0da96d049bd515c7fa3702e511c5 (diff) |
ipg: balance locking in irq handler
Spotted-by: <linux@horizon.com>
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Diffstat (limited to 'drivers/net/ipg.c')
-rw-r--r-- | drivers/net/ipg.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/net/ipg.c b/drivers/net/ipg.c index dbd23bb65d1e..cd1650e99369 100644 --- a/drivers/net/ipg.c +++ b/drivers/net/ipg.c | |||
@@ -1630,6 +1630,8 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst) | |||
1630 | #ifdef JUMBO_FRAME | 1630 | #ifdef JUMBO_FRAME |
1631 | ipg_nic_rxrestore(dev); | 1631 | ipg_nic_rxrestore(dev); |
1632 | #endif | 1632 | #endif |
1633 | spin_lock(&sp->lock); | ||
1634 | |||
1633 | /* Get interrupt source information, and acknowledge | 1635 | /* Get interrupt source information, and acknowledge |
1634 | * some (i.e. TxDMAComplete, RxDMAComplete, RxEarly, | 1636 | * some (i.e. TxDMAComplete, RxDMAComplete, RxEarly, |
1635 | * IntRequested, MacControlFrame, LinkEvent) interrupts | 1637 | * IntRequested, MacControlFrame, LinkEvent) interrupts |
@@ -1647,9 +1649,7 @@ static irqreturn_t ipg_interrupt_handler(int irq, void *dev_inst) | |||
1647 | handled = 1; | 1649 | handled = 1; |
1648 | 1650 | ||
1649 | if (unlikely(!netif_running(dev))) | 1651 | if (unlikely(!netif_running(dev))) |
1650 | goto out; | 1652 | goto out_unlock; |
1651 | |||
1652 | spin_lock(&sp->lock); | ||
1653 | 1653 | ||
1654 | /* If RFDListEnd interrupt, restore all used RFDs. */ | 1654 | /* If RFDListEnd interrupt, restore all used RFDs. */ |
1655 | if (status & IPG_IS_RFD_LIST_END) { | 1655 | if (status & IPG_IS_RFD_LIST_END) { |
@@ -1733,9 +1733,9 @@ out_enable: | |||
1733 | ipg_w16(IPG_IE_TX_DMA_COMPLETE | IPG_IE_RX_DMA_COMPLETE | | 1733 | ipg_w16(IPG_IE_TX_DMA_COMPLETE | IPG_IE_RX_DMA_COMPLETE | |
1734 | IPG_IE_HOST_ERROR | IPG_IE_INT_REQUESTED | IPG_IE_TX_COMPLETE | | 1734 | IPG_IE_HOST_ERROR | IPG_IE_INT_REQUESTED | IPG_IE_TX_COMPLETE | |
1735 | IPG_IE_LINK_EVENT | IPG_IE_UPDATE_STATS, INT_ENABLE); | 1735 | IPG_IE_LINK_EVENT | IPG_IE_UPDATE_STATS, INT_ENABLE); |
1736 | 1736 | out_unlock: | |
1737 | spin_unlock(&sp->lock); | 1737 | spin_unlock(&sp->lock); |
1738 | out: | 1738 | |
1739 | return IRQ_RETVAL(handled); | 1739 | return IRQ_RETVAL(handled); |
1740 | } | 1740 | } |
1741 | 1741 | ||