skge: fix occasional BUG during MTU change
authorMichal Schmidt <mschmidt@redhat.com>
Tue, 14 Apr 2009 22:16:55 +0000 (15:16 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 14 Apr 2009 22:16:55 +0000 (15:16 -0700)
commitd119b3927994e3d620d6adb0dd1ea6bf24427875
treece1222713dcb3ea7486f0a164a34005ea43bd4aa
parentfc59f9a3bf8096a1f68a8b78ada7a0e0ab9236b2
skge: fix occasional BUG during MTU change

The BUG_ON(skge->tx_ring.to_use != skge->tx_ring.to_clean) in skge_up()
was sometimes observed when setting MTU.

skge_down() disables the TX queue, but then reenables it by mistake via
skge_tx_clean().
Fix it by moving the waking of the queue from skge_tx_clean() to the
other caller. And to make sure start_xmit is not in progress on another
CPU, skge_down() should call netif_tx_disable().

The bug was reported to me by Jiri Jilek whose Debian system sometimes
failed to boot. He tested the patch and the bug did not happen anymore.

Signed-off-by: Michal Schmidt <mschmidt@redhat.com>
Acked-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/skge.c