[vortex] 3c905c hang (part 3) possibly identified
Kambo Lohan
kambo77@hotmail.com
Tue Jan 14 13:51:01 2003
first of all: to produce the problem, we put a 905c into promiscuous mode
and did not assign an ip. it is only a sniffer and never sends anything.
we lowered the max_interrupt_work to 3 (just to test) and flooded it, on an
isolated 100mbps hub. after 2 too much work in irq messages the card would
then not rx any packets, merely add them up as overruns. we would have to
down and up it again to get it to rx.
solution:
We believe the driver is not removing the card from upstall status. Looking
at the vortex-diag output when the card is hung, the register at offset 0x30
- uppktstatus - indicates upStalled and upPktComplete.
Vortex chip registers at 0xdc00
0xDC10: **FIFO** 00000000 00000000 *STATUS*
0xDC20: 00000020 00000000 00080000 00001404
0xDC30: 0000a000 7cf5830b 07430900 00080004
As a temporary patch, we added this line to the (status & IntReq) handler in
vortex_error():
boomerang_rx(dev);
because boomerang_rx is the only place which seems to issue an unstall
command. we verified boomerang_rx is what is being called on rx with this
905c (kind of surprised us). anyway this patch solved the problem of the
card not rx'ing any more after the too much work in irq shutdown. once the
intreq handler restores the irq enabling AND calls boomerang rx to issue the
unstall the card starts rxing again.
_________________________________________________________________
MSN 8: advanced junk mail protection and 2 months FREE*.
http://join.msn.com/?page=features/junkmail