X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm.c;h=752e2490866760f0e1e22eb0c632f68fb275f378;hb=8fff7af827c4d7c5a3625f1ca5bdeac7e6538742;hp=b6bd770bdc455e3e4527f060d95e19039017383d;hpb=46113012016d5064ca8617dbb39f04c9763fd911;p=palacios-OLD.git diff --git a/palacios/src/palacios/svm.c b/palacios/src/palacios/svm.c index b6bd770..752e249 100644 --- a/palacios/src/palacios/svm.c +++ b/palacios/src/palacios/svm.c @@ -286,6 +286,9 @@ int v3_init_svm_vmcb(struct guest_info * info, v3_vm_class_t vm_class) { static int update_irq_exit_state(struct guest_info * info) { vmcb_ctrl_t * guest_ctrl = GET_VMCB_CTRL_AREA((vmcb_t*)(info->vmm_data)); + // Fix for QEMU bug using EVENTINJ as an internal cache + guest_ctrl->EVENTINJ.valid = 0; + if ((info->intr_core_state.irq_pending == 1) && (guest_ctrl->guest_ctrl.V_IRQ == 0)) { #ifdef CONFIG_DEBUG_INTERRUPTS @@ -468,8 +471,7 @@ int v3_svm_enter(struct guest_info * info) { rdtscll(tmp_tsc); - v3_update_time(info, (tmp_tsc - info->time_state.cached_host_tsc - info->time_state.cached_hlt_tsc)); - info->time_state.cached_hlt_tsc = 0; + v3_update_time(info, (tmp_tsc - info->time_state.cached_host_tsc)); rdtscll(info->time_state.cached_host_tsc); // guest_ctrl->TSC_OFFSET = info->time_state.guest_tsc - info->time_state.cached_host_tsc; @@ -584,9 +586,9 @@ int v3_start_svm_guest(struct guest_info *info) { linear_addr = get_addr_linear(info, info->rip, &(info->segments.cs)); if (info->mem_mode == PHYSICAL_MEM) { - guest_pa_to_host_va(info, linear_addr, &host_addr); + v3_gpa_to_hva(info, linear_addr, &host_addr); } else if (info->mem_mode == VIRTUAL_MEM) { - guest_va_to_host_va(info, linear_addr, &host_addr); + v3_gva_to_hva(info, linear_addr, &host_addr); } V3_Print("Host Address of rip = 0x%p\n", (void *)host_addr);