/* Add external interrupts, NMI exiting, and virtual NMI */
vmx_state->pin_ctrls.nmi_exit = 1;
+ vmx_state->pin_ctrls.virt_nmi = 1;
vmx_state->pin_ctrls.ext_int_exit = 1;
#endif
}
+
+ // Lastly we check for an NMI exit, and reinject if so
+ {
+ struct vmx_basic_exit_info * basic_info = (struct vmx_basic_exit_info *)&(exit_info.exit_reason);
+
+ if (basic_info->reason == VMX_EXIT_INFO_EXCEPTION_OR_NMI) {
+ if ((uint8_t)exit_info.int_info == 2) {
+ asm("int $2");
+ }
+ }
+ }
+
// reenable global interrupts after vm exit
v3_enable_ints();
}
} else if ((uint8_t)exit_info->int_info == 2) {
// NMI. Don't do anything
- V3_Print("NMI Exception Received\n");
} else {
PrintError("Unknown exception: 0x%x\n", (uint8_t)exit_info->int_info);
v3_print_GPRs(info);