* All rights reserved.
*
* Author: Jack Lange <jarusl@cs.northwestern.edu>
+ * Peter Dinda <jarusl@cs.northwestern.edu> (Reset)
*
* This is free software. You are permitted to use,
* redistribute, and modify it as specified in the file "V3VEE_LICENSE".
// I could be a ROS core, or I could be in a non-HVM
// either way, if I'm core 0, I'm the leader
if (core->vcpu_id==0) {
+ uint64_t mem_size=core->vm_info->mem_size;
+
+#ifdef V3_CONFIG_HVM
+ // on a ROS reset, we should only
+ // manipulate the part of the memory seen by
+ // the ROS
+ if (core->vm_info->hvm_state.is_hvm) {
+ mem_size=v3_get_hvm_ros_memsize(core->vm_info);
+ }
+#endif
core->vm_info->run_state = VM_RESETTING;
// copy bioses again because some,
// like seabios, assume
// this should also blow away the BDA and EBDA
PrintDebug(core->vm_info,core,"Clear memory (%p bytes)\n",(void*)core->vm_info->mem_size);
- if (v3_set_gpa_memory(core, 0, core->vm_info->mem_size, 0)!=core->vm_info->mem_size) {
+ if (v3_set_gpa_memory(core, 0, mem_size, 0)!=mem_size) {
PrintError(core->vm_info,core,"Clear of memory failed\n");
}
PrintDebug(core->vm_info,core,"Copying bioses\n");
core->cpl = 0;
core->cpu_mode = REAL;
core->mem_mode = PHYSICAL_MEM;
- core->num_exits=0;
+ //core->num_exits=0;
PrintDebug(core->vm_info,core,"Machine reset to REAL/PHYSICAL\n");
// and recopy the .data, but for now we'll just
// do everything
rc |= v3_setup_hvm_vm_for_boot(core->vm_info);
+
+ if (rc) {
+ PrintError(core->vm_info,core,"hvm: failed to setup HVM VM for boot rc=%d\n",rc);
+ }
}
// now everyone is ready to reset
rc |= v3_setup_hvm_hrt_core_for_boot(core);
+ if (rc) {
+ PrintError(core->vm_info,core,"hvm: failed to setup HVM core for boot rc=%d\n",rc);
+ }
+
core->core_run_state = CORE_RUNNING;
if (core->vcpu_id==core->vm_info->hvm_state.first_hrt_core) {
v3_counting_barrier(&core->vm_info->reset_barrier);
if (rc<0) {
+ PrintError(core->vm_info,core,"hvm: reset failed\n");
return rc;
} else {
return 1;