diff options
author | Finn Thain <fthain@telegraphics.com.au> | 2007-05-01 22:33:02 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-04 17:59:08 -0700 |
commit | d74472f0b2553e59eafb7feee0ff9558136a17e0 (patch) | |
tree | 38d85faf098e7c5b1e41dc23ea6c9044f8ae3e91 /drivers/net/sonic.c | |
parent | 8b6aaab8c8bdbe011aac79af218dd1e657984bab (diff) | |
download | kernel-crypto-d74472f0b2553e59eafb7feee0ff9558136a17e0.tar.gz kernel-crypto-d74472f0b2553e59eafb7feee0ff9558136a17e0.tar.xz kernel-crypto-d74472f0b2553e59eafb7feee0ff9558136a17e0.zip |
SONIC: small fix and cleanup
Fix a potential problem in the timeout handling: don't free the DMA buffers
before resetting the chip.
Also a trivial cleanup. Bring macsonic and jazzsonic into sync.
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/net/sonic.c')
-rw-r--r-- | drivers/net/sonic.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/net/sonic.c b/drivers/net/sonic.c index c6320c71993..687c1413c4e 100644 --- a/drivers/net/sonic.c +++ b/drivers/net/sonic.c @@ -178,8 +178,13 @@ static void sonic_tx_timeout(struct net_device *dev) { struct sonic_local *lp = netdev_priv(dev); int i; - /* Stop the interrupts for this */ + /* + * put the Sonic into software-reset mode and + * disable all interrupts before releasing DMA buffers + */ SONIC_WRITE(SONIC_IMR, 0); + SONIC_WRITE(SONIC_ISR, 0x7fff); + SONIC_WRITE(SONIC_CMD, SONIC_CR_RST); /* We could resend the original skbs. Easier to re-initialise. */ for (i = 0; i < SONIC_NUM_TDS; i++) { if(lp->tx_laddr[i]) { |