I am working on supporting posted interrupts in a VMM that I'm writing that uses Intel VT-x virtualization. One of the VM entry requirements specified in the documentation for enabling posted interrupts is that the "Acknowledge interrupt on exit" VM-exit control must be set to 1.
When I set this control to 1, my guest OS runs for a short while before it stops responding. Then, the host OS stops responding as well, and a message is printed to the host kernel log that says that the CPU core that the guest OS was running on has experienced a hard lockup (NMI watchdog: Watchdog detected hard LOCKUP on cpu 10
).
I'm reading the Intel documentation and trying to think through this, but was wondering if anyone else knew what's going on. My general thoughts right now are that the host OS must be sending an interrupt to the core that the guest OS is running on at the moment (i.e. my guest OS is not involved in sending the interrupt), which causes a VM exit. Since I set the "Acknowledge interrupt on exit" control to 1, the processor acknowledges to the interrupt controller that the interrupt was received, and puts the vector in the VM-exit interruption-information field. Furthermore, since I don't do anything with the interruption-information field in my VMM at the moment, the interrupt then doesn't get handled by the host OS, which causes the problem. Am I heading in the right direction?