In vldcp(8) fix a race between vldcpread() and vldcp_rx_intr() which
authorstsp <stsp@openbsd.org>
Sat, 13 Jan 2018 15:10:02 +0000 (15:10 +0000)
committerstsp <stsp@openbsd.org>
Sat, 13 Jan 2018 15:10:02 +0000 (15:10 +0000)
commit2624aec262440f89141b9838683cbfada1c736a8
treeb6028951fa85563e5d0169a1cb45b695643716b8
parent0dc96f4f93aef272a04999b341126a399923f34b
In vldcp(8) fix a race between vldcpread() and vldcp_rx_intr() which
was overlooked by my previous fix.

Keep SPL at TTY in vldcpread() while manipulating the rx queue head.
Otherwise we could end up in a situation where:
1: vldcpread() reads rx_head
2: vldcpread() calls splx()
3: vldcp_rx_intr() fires, finds rx link is down, and sets rx_head = rx_tail
4: vlcdpread() resumes and sets rx_head to the value it read in step 1
-> same interrupt storm problem as described in my previous commit

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