I've made a very simple hypervisor. It works at one CPU, at base of Windows7 x64 and has no usefull functionality.
I can not solve two big problem:
1) If I run it at one CPU, I've got a tripple fault after some success VM exits. But if i set "int 3" at begin of non-root code after vmlaunch - host OS works almost very well.
2) If I try to repeat starting VMM at every CPU - I'v got a freezing and then random fatal error.
I suggest, I've done something wrong around interrupt tuning and has corrupt interrupt handling on the host
At startup I initialize VMCS member:
__vmx_vmwrite( VMCS_CONTROL_ENTRY_INTERRUPT_INFO, 0 );
__vmx_vmwrite( VMCS_CONTROL_ENTRY_EXCEPTION_ERROR, 0 );
__vmx_vmwrite( VMCS_CONTROL_ENTRY_INSTRUCTION_LENGTH, 0 );
__vmx_vmwrite( VMCS_GUEST_INTERRUPT_INFO, 0 );
__vmx_vmwrite( VMCS_GUEST_ACTIVITY_STATE, 0 );
I try to sratup hypervisor from working thread, IPI routine, DPC routine - the result is the same
What can be wrong?