mv643xx_eth: prevent interrupt storm on ifconfig down
diff mbox

Message ID 20090119100921.GG17124@xi.wantstofly.org
State Accepted, archived
Delegated to: David Miller
Headers show

Commit Message

Lennert Buytenhek Jan. 19, 2009, 10:09 a.m. UTC
From: Gabriel Paubert <paubert@iram.es>

Contrary to what the docs say, the 'extended interrupt cause' bit in
the interrupt cause register (bit 1) appears to not be maskable on at
least some of the mv643xx_eth platforms, making writing zeroes to the
interrupt mask register but not the extended interrupt mask register
insufficient to stop interrupts from occuring.  Therefore, also write
zeroes to the extended interrupt mask register when shutting down the
port.

This fixes the interrupt storm seen on the Pegasos board when shutting
down the interface.

Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
---
 drivers/net/mv643xx_eth.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

Comments

David Miller Jan. 20, 2009, 1:18 a.m. UTC | #1
From: Lennert Buytenhek <buytenh@wantstofly.org>
Date: Mon, 19 Jan 2009 11:09:21 +0100

> From: Gabriel Paubert <paubert@iram.es>
> 
> Contrary to what the docs say, the 'extended interrupt cause' bit in
> the interrupt cause register (bit 1) appears to not be maskable on at
> least some of the mv643xx_eth platforms, making writing zeroes to the
> interrupt mask register but not the extended interrupt mask register
> insufficient to stop interrupts from occuring.  Therefore, also write
> zeroes to the extended interrupt mask register when shutting down the
> port.
> 
> This fixes the interrupt storm seen on the Pegasos board when shutting
> down the interface.
> 
> Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>

Also applied, thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch
diff mbox

diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c
index 8c6979a..5f31bbb 100644
--- a/drivers/net/mv643xx_eth.c
+++ b/drivers/net/mv643xx_eth.c
@@ -2212,6 +2212,7 @@  static int mv643xx_eth_stop(struct net_device *dev)
 	struct mv643xx_eth_private *mp = netdev_priv(dev);
 	int i;
 
+	wrlp(mp, INT_MASK_EXT, 0x00000000);
 	wrlp(mp, INT_MASK, 0x00000000);
 	rdlp(mp, INT_MASK);