This is an edit of my previous post ... 'better' understanding of the problem.
In my VMM I have enabled the following PIN Cntrl Bits:
- Pre-emption timer
- External Interrupts exit
- NMI exit
For the Primary Proc cntrl bits:
- CR3 load/store exiting (these are enabled in the MSR)
No Secondary Proc bits enabled
For the VM Enter bits:
- Guest LMA
For the VM Exit bits:
- Host LMA
- Save timer
So a pretty simple configuration ...
With this configuration, I can run some basic looping code in the virtual env and I receive vmexits for the pre-emption timer as expected. I also receive vmexits for external interrupts, as expected. The problem occurs when an IPI is issued at the processor I am running on while I have my code running on it. In this case, I do NOT receive a vmexit.
According to the Intel docs, IPIs are handled special through the local APIC but even having the 'virtualize APIC accesses' bit set in the Secondary Proc control bits does not trigger a vmexit.
Any suggestions on how I can get these IPIs to trigger a vmexit would be great.