X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmx.c;h=1b286aed1ed61835d92d77dab87fefb5e10aef3a;hp=47c01c7c003a4f7d50a6870c67553ceb93348c9d;hb=33bf43b34feba36dcbfa47f8f559e5862f531393;hpb=d8354e61f6346351f731e70e733841a37115d2cd diff --git a/palacios/src/palacios/vmx.c b/palacios/src/palacios/vmx.c index 47c01c7..1b286ae 100644 --- a/palacios/src/palacios/vmx.c +++ b/palacios/src/palacios/vmx.c @@ -612,6 +612,14 @@ int v3_vmx_load_core(struct guest_info * core, void * ctx){ #endif +void v3_flush_vmx_vm_core(struct guest_info * core) { + struct vmx_data * vmx_info = (struct vmx_data *)(core->vmm_data); + vmcs_clear(vmx_info->vmcs_ptr_phys); + vmx_info->state = VMX_UNLAUNCHED; +} + + + static int update_irq_exit_state(struct guest_info * info) { struct vmx_exit_idt_vec_info idt_vec_info; @@ -860,19 +868,22 @@ int v3_vmx_enter(struct guest_info * info) { ret = v3_vmx_resume(&(info->vm_regs), info, &(info->ctrl_regs)); } + + // PrintDebug("VMX Exit: ret=%d\n", ret); if (ret != VMX_SUCCESS) { uint32_t error = 0; - vmcs_read(VMCS_INSTR_ERR, &error); v3_enable_ints(); - PrintError("VMENTRY Error: %d\n", error); + PrintError("VMENTRY Error: %d (launch_ret = %d)\n", error, ret); return -1; } + + // Immediate exit from VM time bookkeeping v3_time_exit_vm(info);