core->dbg_regs.dr7 = 0x0000000000000400LL;
- /** THESE NEED TO BE MOVED TO GLOBAL LOCATION **/
- v3_init_svm_io_map(core->vm_info);
ctrl_area->IOPM_BASE_PA = (addr_t)V3_PAddr(core->vm_info->io_map.arch_data);
ctrl_area->instrs.IOIO_PROT = 1;
-
- v3_init_svm_msr_map(core->vm_info);
+
ctrl_area->MSRPM_BASE_PA = (addr_t)V3_PAddr(core->vm_info->msr_map.arch_data);
- ctrl_area->instrs.MSR_PROT = 1;
- /** *** **/
+ ctrl_area->instrs.MSR_PROT = 1;
PrintDebug("Exiting on interrupts\n");
// Interrupt was taken fully vectored
info->intr_core_state.irq_started = 0;
- } else {
+ } else if ((info->intr_core_state.irq_started == 1) && (guest_ctrl->exit_int_info.valid == 1)) {
#ifdef CONFIG_DEBUG_INTERRUPTS
PrintDebug("EXIT INT INFO is set (vec=%d)\n", guest_ctrl->exit_int_info.vector);
#endif
static int update_irq_entry_state(struct guest_info * info) {
vmcb_ctrl_t * guest_ctrl = GET_VMCB_CTRL_AREA((vmcb_t*)(info->vmm_data));
+
+ if (info->intr_core_state.irq_pending == 0) {
+ guest_ctrl->guest_ctrl.V_IRQ = 0;
+ guest_ctrl->guest_ctrl.V_INTR_VECTOR = 0;
+ }
+
if (v3_excp_pending(info)) {
uint_t excp = v3_get_excp_number(info);