vmd(8): stop toggling irq deassert for edge triggered devs.
authordv <dv@openbsd.org>
Wed, 25 Oct 2023 12:44:28 +0000 (12:44 +0000)
committerdv <dv@openbsd.org>
Wed, 25 Oct 2023 12:44:28 +0000 (12:44 +0000)
commit9bd123e240576787c2c530af189dbac4d1303d47
treed90b652ca11d30067ea06cdcf820cb068d1a2042
parent77679933cb537a572105552695ac86b5d4efd3a1
vmd(8): stop toggling irq deassert for edge triggered devs.

For edge-triggered devices, there's no need to deassert an irq given
how vmd(8) emulates a pic.  Deassertion grabs a lock and can trigger
the ioctl for toggling pending interrupts causing a race condition.
This results in a storm of vm-exits and guest vcpu becoming
unresponsive.

The original sign of this issue is guest "pauses" when pasting text
into a serial console connection in something like xterm(1).

Tested by mbuhl@, cheloha@, sashan@, kn@, and mlarkin@.

"go for it", mlarkin@
usr.sbin/vmd/i8253.c
usr.sbin/vmd/mc146818.c
usr.sbin/vmd/ns8250.c