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.


Cleanup based on cppcheck pass (Core)
[palacios.git] / palacios / src / palacios / vmm.c
index ffaf15c..eef2d3d 100644 (file)
@@ -359,7 +359,7 @@ struct v3_vm_info * v3_create_vm(void * cfg, void * priv_data, char * name, unsi
        PrintDebug(vm, VCORE_NONE, "Creating virtual core %u on logical core %u\n",
                   vcore_id, core->pcpu_id);
 
-       sprintf(core->exec_name, "%s-%u", vm->name, vcore_id);
+       sprintf(core->exec_name, "%s-%d", vm->name, vcore_id);
 
         PrintDebug(vm, VCORE_NONE, "run: core=%u, func=0x%p, arg=0x%p, name=%s\n",
                   core->pcpu_id, start_core, core, core->exec_name);
@@ -537,8 +537,12 @@ int v3_reset_vm_extended(struct v3_vm_info *vm, v3_vm_reset_type t, void *data)
 #endif
            break;
        case V3_VM_RESET_CORE_RANGE:
-           start = ((uint32_t*)data)[0];
-           end = ((uint32_t*)data)[1];
+           if (data) { 
+               start = ((uint32_t*)data)[0];
+               end = ((uint32_t*)data)[1];
+           } else {
+               return -1;
+           }
            break;
        default:
            PrintError(vm,VCORE_NONE,"Unsupported reset type %d for this VM\n",t);
@@ -977,9 +981,10 @@ int v3_get_state_vm(struct v3_vm_info        *vm,
     uint32_t numcores;
     uint32_t numregions; 
     extern uint64_t v3_mem_block_size;
+    void     *cur_gpa;
 
     if (!vm || !base || !core || !mem)  { 
-        PrintError(VM_NONE, VCORE_NONE, "Invalid rquest to v3_get_state_vm\n");
+        PrintError(VM_NONE, VCORE_NONE, "Invalid request to v3_get_state_vm\n");
        return -1;
     }
 
@@ -997,6 +1002,14 @@ int v3_get_state_vm(struct v3_vm_info        *vm,
        default: base->state = V3_VM_UNKNOWN; break;
     }
 
+    base->vm_type = V3_VM_GENERAL;
+
+#ifdef V3_CONFIG_HVM
+    if (vm->hvm_state.is_hvm) { 
+       base->vm_type = V3_VM_HVM;
+    } 
+#endif
+
     for (i=0;i<numcores;i++) {
        switch (vm->cores[i].core_run_state) {
            case CORE_INVALID: core->vcore[i].state = V3_VCORE_INVALID; break;
@@ -1024,6 +1037,18 @@ int v3_get_state_vm(struct v3_vm_info        *vm,
            case VIRTUAL_MEM: core->vcore[i].mem_mode=V3_VCORE_MEM_MODE_VIRTUAL; break;
            default: core->vcore[i].mem_mode=V3_VCORE_MEM_MODE_UNKNOWN; break;
        }
+
+       core->vcore[i].vcore_type = V3_VCORE_GENERAL;
+
+#ifdef V3_CONFIG_HVM
+       if (vm->hvm_state.is_hvm) { 
+           if (v3_is_hvm_ros_core(&vm->cores[i])) { 
+               core->vcore[i].vcore_type = V3_VCORE_ROS;
+           } else {
+               core->vcore[i].vcore_type = V3_VCORE_HRT;
+           }
+       }
+#endif
        
        core->vcore[i].pcore=vm->cores[i].pcpu_id;
        core->vcore[i].last_rip=(void*)(vm->cores[i].rip);
@@ -1032,7 +1057,10 @@ int v3_get_state_vm(struct v3_vm_info        *vm,
     
     core->num_vcores=numcores;
 
+    cur_gpa=0;
+
     for (i=0;i<numregions;i++) {
+       mem->region[i].guest_paddr = cur_gpa;
        mem->region[i].host_paddr =  (void*)(vm->mem_map.base_regions[i].host_addr);
        mem->region[i].size = v3_mem_block_size;
 #ifdef V3_CONFIG_SWAPPING
@@ -1043,9 +1071,35 @@ int v3_get_state_vm(struct v3_vm_info        *vm,
        mem->region[i].pinned = 0;
 #endif
 
+       cur_gpa += mem->region[i].size;
     }
 
     mem->num_regions=numregions;
+
+
+    mem->mem_size=vm->mem_size;
+    mem->ros_mem_size=vm->mem_size;
+
+#ifdef V3_CONFIG_HVM
+    if (vm->hvm_state.is_hvm) { 
+       mem->ros_mem_size=v3_get_hvm_ros_memsize(vm);
+    }
+#endif
+
+    return 0;
+}
+
+int v3_get_state_sizes_vm(struct v3_vm_info        *vm, 
+                         unsigned long long       *num_vcores, 
+                         unsigned long long       *num_regions)
+{
+    if (!vm || !num_vcores || !num_regions) {
+        PrintError(VM_NONE, VCORE_NONE, "Invalid request to v3_get_state_sizes\n");
+       return -1;
+    }
+
+    *num_vcores = vm->num_cores;
+    *num_regions = vm->mem_map.num_base_regions;
     
     return 0;
 }