X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm.c;h=9f725143caf6ba86d5129d01fa68e2bdab3a9741;hp=7dcd68d4bdac36ab7eca00c357b1e9fc1b32f158;hb=87b1679efe8bee960b65cfd730188ccc94966b71;hpb=5bf6d0c260240e314876a2fca8e3fd56bd6a1029 diff --git a/palacios/src/palacios/svm.c b/palacios/src/palacios/svm.c index 7dcd68d..9f72514 100644 --- a/palacios/src/palacios/svm.c +++ b/palacios/src/palacios/svm.c @@ -44,6 +44,8 @@ #include +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}; @@ -417,6 +419,8 @@ int v3_svm_enter(struct guest_info * info) { // 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; @@ -463,10 +467,15 @@ int v3_svm_enter(struct guest_info * info) { 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"); @@ -583,13 +592,12 @@ int v3_start_svm_guest(struct guest_info *info) { break; } +/* if ((info->num_exits % 5000) == 0) { V3_Print("SVM Exit number %d\n", (uint32_t)info->num_exits); } - - +*/ - } return 0; }