sky2: Avoid transmits during sky2_down()
authorMike McCormack <mikem@ring3k.org>
Fri, 31 Jul 2009 01:57:42 +0000 (01:57 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 4 Aug 2009 02:02:36 +0000 (19:02 -0700)
commitf6caa14aa0b126d4a2933907d1519611b2a8524a
tree27f01a9597e56f0489746ad5fc9fc8b01e4f5368
parent202ff1ec8e53d5dd36e1a5bd4b0a7ed7dbd45087
sky2: Avoid transmits during sky2_down()

This patch supersedes my previous patch "sky2: Avoid transmitting
during sky2_restart".

I have reworked the patch to avoid crashes during both sky2_restart()
and sky2_set_ringparam().

Without this patch, the sky2 driver can be crashed by doing:

# pktgen eth1 &    (transmit many packets on eth1)
# ethtool -G eth1 tx 510

I am aware you object to storing extra state, but I can't see a way
around this. Without remembering that we're restarting,
netif_wake_queue() is called in the ISR from sky2_tx_complete(), and
netif_tx_lock() is used in sky2_tx_done().  If anybody can see a way
around this, please let me know.

Signed-off-by: Mike McCormack <mikem@ring3k.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/sky2.c
drivers/net/sky2.h