Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Merge branch 'devel' of newskysaw.cs.northwestern.edu:/home/palacios/palacios into...
Jack Lange [Wed, 14 Sep 2011 16:33:31 +0000 (12:33 -0400)]
1  2 
linux_usr/Makefile
palacios/src/palacios/vmx.c

diff --combined 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
@@@ -31,7 -31,6 +31,7 @@@
  #include <palacios/vmm_direct_paging.h>
  #include <palacios/vmx_io.h>
  #include <palacios/vmx_msr.h>
 +#include <palacios/vmm_decoder.h>
  
  #include <palacios/vmx_ept.h>
  #include <palacios/vmx_assist.h>
@@@ -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);
      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");
  
      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 {
      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;