vmd(8): fix an interrupt storm in ns8250.
authordv <dv@openbsd.org>
Mon, 30 Jan 2023 21:43:12 +0000 (21:43 +0000)
committerdv <dv@openbsd.org>
Mon, 30 Jan 2023 21:43:12 +0000 (21:43 +0000)
commit2a7454b28a30a4c3757bcbbe151e946e70400d55
tree4631c4b33028b9bffeecfb568c43bc6ecbd0fba3
parent6c331581a9941b71d2349287c284825ca4035b39
vmd(8): fix an interrupt storm in ns8250.

On slower hosts, such as those in a nested virtualization scenario
of OpenBSD guest inside OpenBSD atop Linux KVM, ns8250 can cause a
race between the kevent firing and the vcpu being kicked by an
assert/deassert of the irq.

The end user experiences a "stuck" serial console and the host will
see a vmd process peg the cpu.

This change only toggles the irq if we were in a position of being
ready to receive data on the device so while the kevent might
continuously fire, the vcpu will not be kicked repeatedly.

OK mlarkin@
usr.sbin/vmd/ns8250.c