X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm_handler.c;h=a2e7e14e5443dcea85820d8db74eb11bf1705c6f;hb=ace8f0532fa5650c6642a3a7174f3aa19b09095a;hp=c7ee14c4950fd3d70a8838be6764bfa70c2fbc50;hpb=df58bd3c484a52b1e166dc28e7b9b6fd94e5a023;p=palacios.git diff --git a/palacios/src/palacios/svm_handler.c b/palacios/src/palacios/svm_handler.c index c7ee14c..a2e7e14 100644 --- a/palacios/src/palacios/svm_handler.c +++ b/palacios/src/palacios/svm_handler.c @@ -29,20 +29,35 @@ int handle_svm_exit(struct guest_info * info) { // PrintDebugVMCB((vmcb_t*)(info->vmm_data)); + + // PrintDebug("SVM Returned:(VMCB=%x)\n", info->vmm_data); + //PrintDebug("RIP: %x\n", guest_state->rip); + + + //PrintDebug("SVM Returned: Exit Code: %x\n",exit_code); + if (exit_code == VMEXIT_IOIO) { struct svm_io_info * io_info = (struct svm_io_info *)&(guest_ctrl->exit_info1); if (io_info->type == 0) { if (io_info->str) { - handle_svm_io_outs(info); + if (handle_svm_io_outs(info) == -1 ) { + return -1; + } } else { - handle_svm_io_out(info); + if (handle_svm_io_out(info) == -1) { + return -1; + } } } else { if (io_info->str) { - handle_svm_io_ins(info); + if (handle_svm_io_ins(info) == -1) { + return -1; + } } else { - handle_svm_io_in(info); + if (handle_svm_io_in(info) == -1) { + return -1; + } } } } else if (exit_code == VMEXIT_CR0_WRITE) { @@ -62,7 +77,8 @@ int handle_svm_exit(struct guest_info * info) { */ } else if (exit_code == VMEXIT_INTR) { - handle_svm_intr(info); + + // handle_svm_intr(info); } else { addr_t rip_addr = get_addr_linear(info, guest_state->rip, guest_state->cs.selector); char buf[15];