#include <palacios/vmm_sprintf.h>
+uint32_t v3_last_exit;
+
// This is a global pointer to the host's VMCB
static addr_t host_vmcbs[CONFIG_MAX_CPUS] = { [0 ... CONFIG_MAX_CPUS - 1] = 0};
// disable global interrupts for vm state transition
v3_clgi();
+ /// checkpoint
+
// Synchronize the guest state to the VMCB
guest_state->cr0 = info->ctrl_regs.cr0;
guest_state->cr2 = info->ctrl_regs.cr2;
rdtscll(info->time_state.cached_host_tsc);
- // guest_ctrl->TSC_OFFSET = info->time_state.guest_tsc - info->time_state.cached_host_tsc;
+ guest_ctrl->TSC_OFFSET = info->time_state.guest_tsc - info->time_state.cached_host_tsc;
v3_svm_launch((vmcb_t *)V3_PAddr(info->vmm_data), &(info->vm_regs), (vmcb_t *)host_vmcbs[info->cpu_id]);
+
+ v3_last_exit = (uint32_t)(guest_ctrl->exit_code);
+
+ // v3_print_cond("SVM Returned: Exit Code: %x\n", (uint32_t)(guest_ctrl->exit_code));
+
rdtscll(tmp_tsc);
//PrintDebug("SVM Returned\n");
break;
}
+/*
if ((info->num_exits % 5000) == 0) {
V3_Print("SVM Exit number %d\n", (uint32_t)info->num_exits);
}
-
-
+*/
-
}
return 0;
}