Fix an interrupt storm condition in vldcp(8) (sparc64).
authorstsp <stsp@openbsd.org>
Sat, 6 Jan 2018 21:35:45 +0000 (21:35 +0000)
committerstsp <stsp@openbsd.org>
Sat, 6 Jan 2018 21:35:45 +0000 (21:35 +0000)
commite36e7d99e64b9791877b11b1efc3ef24a1876eb7
tree6572a864c97129a14c757b01e00338a2c829a58e
parent5f9b80c09d01899b9236c70716888c6ce8f727d7
Fix an interrupt storm condition in vldcp(8) (sparc64).

If the Rx channel goes down with pending data on the ring, toss the pending
data to ensure that the firmware's rx ring head index matches the rx ring
tail index. Otherwise we trigger an interrupt storm since vldcpread() never
consumes pending data while the channel is down, and the firmware keeps
triggering the interrupt until all data on the ring is consumed.

Interrupt storm observed and fix tested on a T5220 (which can now run
ldom guests; without this fix starting ldomd would trigger the problem).

ok kettenis@
sys/arch/sparc64/dev/vldcp.c