X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm_handler.c;h=f7916fca4693132e791e48ac3e66fe022c969979;hb=a4b341afa075a6620dd087ee3a8ed850730c05c7;hp=3da68a685b854b631b0531be1778eee3ad7861ff;hpb=d8fc6aa4bc2a5d9cec50923e9d2bd30f867dd50a;p=palacios.releases.git diff --git a/palacios/src/palacios/svm_handler.c b/palacios/src/palacios/svm_handler.c index 3da68a6..f7916fc 100644 --- a/palacios/src/palacios/svm_handler.c +++ b/palacios/src/palacios/svm_handler.c @@ -38,10 +38,10 @@ int handle_svm_exit(struct guest_info * info) { // Disable printing io exits due to bochs debug messages - if (!((exit_code == VMEXIT_IOIO) && ((ushort_t)(guest_ctrl->exit_info1 >> 16) == 0x402))) { + //if (!((exit_code == VMEXIT_IOIO) && ((ushort_t)(guest_ctrl->exit_info1 >> 16) == 0x402))) { - PrintDebug("SVM Returned: Exit Code: %x \t\t(tsc=%ul)\n",exit_code, (uint_t)info->time_state.guest_tsc); - } + PrintDebug("SVM Returned: Exit Code: %x \t\t(tsc=%ul)\n",exit_code, (uint_t)info->time_state.guest_tsc); + // } // PrintDebugVMCB((vmcb_t*)(info->vmm_data)); @@ -186,10 +186,19 @@ int handle_svm_exit(struct guest_info * info) { case EXTERNAL_IRQ: { uint_t irq = get_intr_number(info); - guest_ctrl->EVENTINJ.vector = irq; - guest_ctrl->EVENTINJ.valid = 1; - guest_ctrl->EVENTINJ.type = SVM_INJECTION_EXTERNAL_INTR; + /* + guest_ctrl->EVENTINJ.vector = irq; + guest_ctrl->EVENTINJ.valid = 1; + guest_ctrl->EVENTINJ.type = SVM_INJECTION_EXTERNAL_INTR; + */ + guest_ctrl->guest_ctrl.V_IRQ = 1; + guest_ctrl->guest_ctrl.V_INTR_VECTOR = irq; + guest_ctrl->guest_ctrl.V_IGN_TPR = 1; + guest_ctrl->guest_ctrl.V_INTR_PRIO = 0xf; + + PrintDebug("Injecting Interrupt %d (EIP=%x)\n", guest_ctrl->guest_ctrl.V_INTR_VECTOR, info->rip); + injecting_intr(info, irq, EXTERNAL_IRQ); break; @@ -210,6 +219,7 @@ int handle_svm_exit(struct guest_info * info) { guest_ctrl->EVENTINJ.vector = excp; + PrintDebug("Injecting Interrupt %d (EIP=%x)\n", guest_ctrl->EVENTINJ.vector, info->rip); injecting_intr(info, excp, EXCEPTION); break; } @@ -226,7 +236,6 @@ int handle_svm_exit(struct guest_info * info) { return -1; } - PrintDebug("Injecting Interrupt %d (EIP=%x)\n", guest_ctrl->EVENTINJ.vector, info->rip); }