Don't write a 1 to the RIRR bit in the IOAPIC redirection register. This bit
authormlarkin <mlarkin@openbsd.org>
Wed, 29 Jun 2016 06:05:15 +0000 (06:05 +0000)
committermlarkin <mlarkin@openbsd.org>
Wed, 29 Jun 2016 06:05:15 +0000 (06:05 +0000)
commit2af81419dfe8d248bc46ea646ac10896bf4f5440
tree998da329d864102adff5027e7abbb96ec10ab959
parent7d62d86a5efabf7e7941310c1b074b4072630901
Don't write a 1 to the RIRR bit in the IOAPIC redirection register. This bit
is R/O, and although it should not matter what value is written there,
Hyper-V's emulated IOAPIC interprets a write of 1 in some unexpected way and
subsequently blocks interrupt delivery. This primarily manifests itself as
de(4) timeouts when using Hyper-V VMs with the "Legacy Network Adapter"
interface.

This diff has been in snaps for almost a month with no reported fallout.

Based on an idea originally from mikeb with further input from kettenis and
deraadt.
sys/arch/amd64/amd64/ioapic.c
sys/arch/amd64/include/i82093reg.h