Sporadically the network over gem(4) interface hang on sparc64 and
authorbluhm <bluhm@openbsd.org>
Wed, 7 Feb 2018 22:35:14 +0000 (22:35 +0000)
committerbluhm <bluhm@openbsd.org>
Wed, 7 Feb 2018 22:35:14 +0000 (22:35 +0000)
commit7379147ac38e139e31ca13c253bc8c56ed7ff10b
treeb3388c56aa6dbe4f21738dbcb283e29d213927fb
parent93b1bb5ed3171e840a827ca84b1626b41fefce81
Sporadically the network over gem(4) interface hang on sparc64 and
macppc.  Receiving packets stopped, ifconfig down/up made it work
again.
In the tick timeout handler refill the receive ring if it is empty.
The logic is taken from hme(4).  Also protect the register access
and ifp counters with splnet().
In gem_rx_watchdog() is a workaround for a hardware bug.  It resets
the hardware when there is no progress.  If the fifo pointers
advanced a bit, it got stuck anyway.  So restart the receive watchdog
timeout in that case.
OK mpi@
sys/dev/ic/gem.c