X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fgeekos%2Fsvm_handler.c;h=6cd7afe55f6a4e6a20b4a3d11358b0b2f36ba138;hb=9be2a31f574121ab4aa0289b7714eefe070b0db0;hp=6624da63cf6a6655e5ab2c28144e797588ae1d3b;hpb=959ed075fac59969a8dc299e51824166f50bb2d0;p=palacios.git diff --git a/palacios/src/geekos/svm_handler.c b/palacios/src/geekos/svm_handler.c index 6624da6..6cd7afe 100644 --- a/palacios/src/geekos/svm_handler.c +++ b/palacios/src/geekos/svm_handler.c @@ -21,7 +21,7 @@ int handle_svm_exit(struct guest_info * info) { info->vm_regs.rsp = guest_state->rsp; - PrintDebug("SVM Returned: (Exit Code=%x) (VMCB=%x)\n", &(guest_ctrl->exit_code), info->vmm_data); + PrintDebug("SVM Returned:(VMCB=%x)\n", info->vmm_data); PrintDebug("RIP: %x\n", guest_state->rip); @@ -30,21 +30,22 @@ int handle_svm_exit(struct guest_info * info) { // PrintDebugVMCB((vmcb_t*)(info->vmm_data)); PrintDebug("SVM Returned: Exit Code: %x\n",exit_code); + PrintDebug("io_info1 low = 0x%.8x\n", *(uint_t*)&(guest_ctrl->exit_info1)); PrintDebug("io_info1 high = 0x%.8x\n", *(uint_t *)(((uchar_t *)&(guest_ctrl->exit_info1)) + 4)); PrintDebug("io_info2 low = 0x%.8x\n", *(uint_t*)&(guest_ctrl->exit_info2)); PrintDebug("io_info2 high = 0x%.8x\n", *(uint_t *)(((uchar_t *)&(guest_ctrl->exit_info2)) + 4)); + if (exit_code == VMEXIT_IOIO) { handle_svm_io(info); } else if (exit_code == VMEXIT_CR0_WRITE) { PrintDebug("CR0 Write\n"); - ullong_t new_cr0 = 0; - - handle_cr0_write(info, &new_cr0); - guest_state->cr0 = new_cr0; + if (handle_cr0_write(info) == -1) { + return -1; + } } else if (( (exit_code == VMEXIT_CR3_READ) || (exit_code == VMEXIT_CR3_WRITE) ||