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
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;
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);