#include <palacios/vmx_lowlevel.h>
#include <palacios/vmx_io.h>
#include <palacios/vmm_cpuid.h>
+#include <palacios/vmm_debug.h>
#include <palacios/vmx.h>
#include <palacios/vmm_ctrl_regs.h>
#include <palacios/vmx_ctrl_regs.h>
#include <palacios/vmx_assist.h>
#include <palacios/vmm_halt.h>
+#include <palacios/vmm_mwait.h>
#include <palacios/vmx_ept.h>
+
#ifndef V3_CONFIG_DEBUG_VMX
#undef PrintDebug
#define PrintDebug(fmt, args...)
}
} 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);
return -1;
}
break;
+ case 8:
+ if (v3_vmx_handle_cr8_access(info, cr_qual) == -1) {
+ PrintError("Error in CR8 access handler\n");
+ return -1;
+ }
+ break;
default:
PrintError("Unhandled CR access: %d\n", cr_qual->cr_id);
return -1;
break;
+ case VMX_EXIT_MONITOR:
+ PrintDebug("Guest Executing monitor\n");
+
+ if (v3_handle_monitor(info) == -1) {
+ PrintError("Error handling monitor instruction\n");
+ return -1;
+ }
+
+ break;
+
+ case VMX_EXIT_MWAIT:
+ PrintDebug("Guest Executing mwait\n");
+
+ if (v3_handle_mwait(info) == -1) {
+ PrintError("Error handling mwait instruction\n");
+ return -1;
+ }
+
+ break;
case VMX_EXIT_PAUSE: