I've finally gotten my APIC emulation to the point that I'm able to selectively deliver interrupts from the APIC to a guest succesfully. As part of this I'm setting the external interrupt control and maniputing the TPR and interrupt window controls. Like many hypervisor projects I'm starting with a machine that has booted an operating system and am taking control of the hardware from this operating system as I launch my hypervisor. My current issue seems to be that the HPET timer as previously programmed by the Windows OS triggers interrupts in a fashion that the overhead of intercepting the interrupt from the APIC and delivering it through my virtualization code leads to a sort of 'live lock' with the guest domain effectively making no forward progress and eventually bug checking with a DPC timer watchdog exception.Does this sound like a general problem with the efficency of my hypervisor interrupt handling code or is there some general advise for handling system resources like the HPET within hypervisors that I'm not presenty aware of, or does this sound like some other form of bug - like perhaps I need to do more than simply send EOI to the local APIC to de-assert the HPET device?Thanks for any input!
For more complete information about compiler optimizations, see our Optimization Notice.