From: Patrick G. Bridges Date: Thu, 9 Feb 2012 20:13:41 +0000 (-0700) Subject: Minor time fixes X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=aace4c114e63de21c289c69a9b498a19f79dab80;p=palacios.git Minor time fixes --- diff --git a/palacios/include/palacios/vmm_time.h b/palacios/include/palacios/vmm_time.h index 25eed02..7b816a5 100644 --- a/palacios/include/palacios/vmm_time.h +++ b/palacios/include/palacios/vmm_time.h @@ -121,7 +121,7 @@ static inline uint64_t v3_compute_guest_time(struct vm_time *t, uint64_t ht) { V3_ASSERT(t->exit_time); return t->exit_time + t->guest_host_offset; #else - return v3_get_host_time(t) + t->guest_host_offset; + return ht + t->guest_host_offset; #endif } diff --git a/palacios/src/palacios/vmm.c b/palacios/src/palacios/vmm.c index 855b11c..fe9a071 100644 --- a/palacios/src/palacios/vmm.c +++ b/palacios/src/palacios/vmm.c @@ -441,7 +441,7 @@ int v3_stop_vm(struct v3_vm_info * vm) { vm->run_state = VM_STOPPED; - // force exit all cores via a cross call/IPI + // XXX force exit all cores via a cross call/IPI XXX while (1) { int i = 0; diff --git a/palacios/src/palacios/vmx.c b/palacios/src/palacios/vmx.c index f76f876..450b18f 100644 --- a/palacios/src/palacios/vmx.c +++ b/palacios/src/palacios/vmx.c @@ -805,6 +805,7 @@ v3_vmx_schedule_timeout(struct guest_info * info) */ int v3_vmx_enter(struct guest_info * info) { int ret = 0; + sint64_t tsc_offset; uint32_t tsc_offset_low, tsc_offset_high; struct vmx_exit_info exit_info; struct vmx_data * vmx_info = (struct vmx_data *)(info->vmm_data); @@ -859,8 +860,10 @@ int v3_vmx_enter(struct guest_info * info) { // Perform last-minute time bookkeeping prior to entering the VM v3_time_enter_vm(info); - tsc_offset_high = (uint32_t)((v3_tsc_host_offset(&info->time_state) >> 32) & 0xffffffff); - tsc_offset_low = (uint32_t)(v3_tsc_host_offset(&info->time_state) & 0xffffffff); + tsc_offset = v3_tsc_host_offset(&info->time_state); + tsc_offset_high = (uint32_t)(( tsc_offset >> 32) & 0xffffffff); + tsc_offset_low = (uint32_t)(tsc_offset & 0xffffffff); + check_vmcs_write(VMCS_TSC_OFFSET_HIGH, tsc_offset_high); check_vmcs_write(VMCS_TSC_OFFSET, tsc_offset_low);