X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmx.c;h=253ae476af0ccc28df221a1cff3d60a202bbf52e;hb=2fa62a8319b951b761c235bde156e1eeacce996a;hp=4c37ddf4d2ecd7318e1707e5021f59ee067fc159;hpb=ee1279646a778613b23a42350b903ebb57c068f8;p=palacios.git diff --git a/palacios/src/palacios/vmx.c b/palacios/src/palacios/vmx.c index 4c37ddf..253ae47 100644 --- a/palacios/src/palacios/vmx.c +++ b/palacios/src/palacios/vmx.c @@ -494,7 +494,7 @@ static int update_irq_entry_state(struct guest_info * info) { int_info.valid = 1; #ifdef CONFIG_DEBUG_INTERRUPTS - PrintDebug("Injecting exception %d (EIP=%p)\n", int_info.vector, (void *)info->rip); + PrintDebug("Injecting exception %d (EIP=%p)\n", int_info.vector, (void *)(addr_t)info->rip); #endif check_vmcs_write(VMCS_ENTRY_INT_INFO, int_info.value); @@ -536,7 +536,7 @@ static int update_irq_entry_state(struct guest_info * info) { PrintDebug("Injecting Interrupt %d at exit %u(EIP=%p)\n", info->intr_core_state.irq_vector, (uint32_t)info->num_exits, - (void *)info->rip); + (void *)(addr_t)info->rip); #endif check_vmcs_write(VMCS_ENTRY_INT_INFO, ent_int.value); @@ -658,6 +658,9 @@ int v3_vmx_enter(struct guest_info * info) { vmcs_write(VMCS_GUEST_CR3, guest_cr3); } + // We do timer injection here to track real host time. + rdtscll(tmp_tsc); + v3_update_time(info, tmp_tsc - info->time_state.cached_host_tsc); rdtscll(info->time_state.cached_host_tsc); if (info->vm_info->run_state == VM_STOPPED) { @@ -678,11 +681,11 @@ int v3_vmx_enter(struct guest_info * info) { return -1; } - rdtscll(tmp_tsc); + // rdtscll(tmp_tsc); + // v3_update_time(info, tmp_tsc - info->time_state.cached_host_tsc); info->num_exits++; - v3_update_time(info, tmp_tsc - info->time_state.cached_host_tsc); /* Update guest state */ v3_vmx_save_vmcs(info); @@ -825,9 +828,9 @@ void v3_init_vmx_cpu(int cpu_id) { ); #elif __V3_32BIT__ __asm__ __volatile__ ( - "movq %%cr4, %%ecx;" - "orq $0x00002000, %%ecx;" - "movq %%ecx, %0;" + "movl %%cr4, %%ecx;" + "orl $0x00002000, %%ecx;" + "movl %%ecx, %0;" : "=m"(ret) : : "%ecx" @@ -835,7 +838,7 @@ void v3_init_vmx_cpu(int cpu_id) { if ((~ret & tmp_msr.value) == 0) { __asm__ __volatile__ ( - "movq %0, %%cr4;" + "movl %0, %%cr4;" : : "q"(ret) ); @@ -845,9 +848,9 @@ void v3_init_vmx_cpu(int cpu_id) { } __asm__ __volatile__ ( - "movq %%cr0, %%ecx; " - "orq $0x00000020,%%ecx; " - "movq %%ecx, %%cr0;" + "movl %%cr0, %%ecx; " + "orl $0x00000020,%%ecx; " + "movl %%ecx, %%cr0;" : : : "%ecx"