diff options
author | Mike McCormack <mikem@ring3k.org> | 2009-07-31 01:57:42 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-03 19:02:36 -0700 |
commit | f6caa14aa0b126d4a2933907d1519611b2a8524a (patch) | |
tree | 27f01a9597e56f0489746ad5fc9fc8b01e4f5368 /drivers/net/sky2.h | |
parent | 202ff1ec8e53d5dd36e1a5bd4b0a7ed7dbd45087 (diff) | |
download | op-kernel-dev-f6caa14aa0b126d4a2933907d1519611b2a8524a.zip op-kernel-dev-f6caa14aa0b126d4a2933907d1519611b2a8524a.tar.gz |
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>
Diffstat (limited to 'drivers/net/sky2.h')
-rw-r--r-- | drivers/net/sky2.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/sky2.h b/drivers/net/sky2.h index b5549c9..4486b06 100644 --- a/drivers/net/sky2.h +++ b/drivers/net/sky2.h @@ -2051,6 +2051,7 @@ struct sky2_port { u8 duplex; /* DUPLEX_HALF, DUPLEX_FULL */ u8 rx_csum; u8 wol; + u8 restarting; enum flow_control flow_mode; enum flow_control flow_status; |