From: Jack Lange Date: Wed, 14 Sep 2011 16:33:31 +0000 (-0400) Subject: Merge branch 'devel' of newskysaw.cs.northwestern.edu:/home/palacios/palacios into... X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=b1aec98739d57c1bc4d1834414a0206eb37aab92;hp=-c;p=palacios.git Merge branch 'devel' of newskysaw.cs.northwestern.edu:/home/palacios/palacios into devel --- b1aec98739d57c1bc4d1834414a0206eb37aab92 diff --combined linux_usr/Makefile index b8a1014,2a09f45..3aa822c --- a/linux_usr/Makefile +++ b/linux_usr/Makefile @@@ -1,4 -1,4 +1,4 @@@ - all: v3_ctrl v3_stop v3_cons v3_mem v3_monitor v3_stream v3_user_host_dev_example v3_os_debug v3_user_keyed_stream_example v3_user_keyed_stream_file + all: v3_ctrl v3_stop v3_cons v3_mem v3_monitor v3_stream v3_user_host_dev_example v3_os_debug v3_user_keyed_stream_example v3_user_keyed_stream_file v3_core_move @@@ -12,9 -12,8 +12,9 @@@ v3_mem : v3_mem.c v3_ctrl. gcc -static v3_mem.c -o v3_mem -v3_cons : v3_cons.c v3_ctrl.h - gcc -static v3_cons.c -o v3_cons -lcurses +v3_cons : v3_cons.c v3_cons_sc.c v3_ctrl.h + gcc v3_cons.c -o v3_cons -lcurses + gcc v3_cons_sc.c -o v3_cons_sc -lcurses v3_stream : v3_stream.c v3_ctrl.h gcc -static v3_stream.c -o v3_stream @@@ -35,8 -34,11 +35,11 @@@ v3_user_keyed_stream_example: v3_user_k v3_user_keyed_stream_file: v3_user_keyed_stream_file.c v3_user_keyed_stream.h v3_user_keyed_stream.c gcc -static -I../linux_module v3_user_keyed_stream_file.c v3_user_keyed_stream.c -o v3_user_keyed_stream_file + v3_core_move : v3_core_move.c v3_ctrl.h + gcc -static v3_core_move.c -o v3_core_move + v3_inject_ecc_scrubber_mce: v3_inject_ecc_scrubber_mce.c gcc -static -I../linux_module v3_inject_ecc_scrubber_mce.c -o v3_inject_ecc_scrubber_mce clean: - rm -f v3_ctrl v3_cons v3_mem v3_monitor v3_stream v3_user_host_dev_example v3_os_debug v3_user_keyed_stream_example v3_user_keyed_stream_file + rm -f v3_ctrl v3_cons v3_mem v3_monitor v3_stream v3_user_host_dev_example v3_os_debug v3_user_keyed_stream_example v3_user_keyed_stream_file v3_core_migrate diff --combined palacios/src/palacios/vmx.c index e1b427a,54ccd3c..18f7ee7 --- a/palacios/src/palacios/vmx.c +++ b/palacios/src/palacios/vmx.c @@@ -31,7 -31,6 +31,7 @@@ #include #include #include +#include #include #include @@@ -759,7 -758,9 +759,9 @@@ int v3_vmx_enter(struct guest_info * in v3_update_timers(info); if (vmcs_store() != vmx_info->vmcs_ptr_phys) { + vmcs_clear(vmx_info->vmcs_ptr_phys); vmcs_load(vmx_info->vmcs_ptr_phys); + vmx_info->state = VMX_UNLAUNCHED; } v3_vmx_restore_vmcs(info); @@@ -787,6 -788,7 +789,7 @@@ check_vmcs_write(VMCS_TSC_OFFSET_HIGH, tsc_offset_high); check_vmcs_write(VMCS_TSC_OFFSET, tsc_offset_low); + if (v3_update_vmcs_host_state(info)) { v3_enable_ints(); PrintError("Could not write host state\n"); @@@ -796,6 -798,7 +799,7 @@@ if (vmx_info->state == VMX_UNLAUNCHED) { vmx_info->state = VMX_LAUNCHED; + info->vm_info->run_state = VM_RUNNING; ret = v3_vmx_launch(&(info->vm_regs), info, &(info->ctrl_regs)); } else { @@@ -872,7 -875,7 +876,7 @@@ v3_yield_cond(info); if (v3_handle_vmx_exit(info, &exit_info) == -1) { - PrintError("Error in VMX exit handler\n"); + PrintError("Error in VMX exit handler (Exit reason=%x)\n", exit_info.exit_reason); return -1; } @@@ -917,36 -920,6 +921,36 @@@ int v3_start_vmx_guest(struct guest_inf } if (v3_vmx_enter(info) == -1) { + + addr_t host_addr; + addr_t linear_addr = 0; + + info->vm_info->run_state = VM_ERROR; + + V3_Print("VMX core %u: VMX ERROR!!\n", info->vcpu_id); + + v3_print_guest_state(info); + + V3_Print("VMX core %u\n", info->vcpu_id); + + + + linear_addr = get_addr_linear(info, info->rip, &(info->segments.cs)); + + if (info->mem_mode == PHYSICAL_MEM) { + v3_gpa_to_hva(info, linear_addr, &host_addr); + } else if (info->mem_mode == VIRTUAL_MEM) { + v3_gva_to_hva(info, linear_addr, &host_addr); + } + + V3_Print("VMX core %u: Host Address of rip = 0x%p\n", info->vcpu_id, (void *)host_addr); + + V3_Print("VMX core %u: Instr (15 bytes) at %p:\n", info->vcpu_id, (void *)host_addr); + v3_dump_mem((uint8_t *)host_addr, 15); + + v3_print_stack(info); + + v3_print_vmcs(); print_exit_log(info); return -1;