X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm.c;h=580a514b2568106d902e0aa0c1270f8d3da0c0e9;hb=4a13fd6e61111133266b79ec8ff1f84258f953f4;hp=6bf1a299f6444dc4950bb7f93025cc6602ddde3f;hpb=d962f2be029772be3f21d9bd206ddf2a9f6a1d20;p=palacios.git diff --git a/palacios/src/palacios/vmm.c b/palacios/src/palacios/vmm.c index 6bf1a29..580a514 100644 --- a/palacios/src/palacios/vmm.c +++ b/palacios/src/palacios/vmm.c @@ -82,7 +82,7 @@ void Init_V3(struct v3_os_hooks * hooks, int num_cpus) { } // Register all the possible device types - v3_init_devices(); + V3_init_devices(); // Register all shadow paging handlers V3_init_shdw_paging(); @@ -271,7 +271,6 @@ int v3_stop_vm(struct v3_vm_info * vm) { // force exit all cores via a cross call/IPI - while (1) { int i = 0; int still_running = 0; @@ -283,20 +282,36 @@ int v3_stop_vm(struct v3_vm_info * vm) { } if (still_running == 0) { - break; + break; } - + + V3_Print("Yielding\n"); + v3_yield(NULL); } + + V3_Print("VM stopped. Returning\n"); return 0; } int v3_free_vm(struct v3_vm_info * vm) { + int i = 0; // deinitialize guest (free memory, etc...) - v3_dev_mgr_deinit(vm); + v3_free_vm_devices(vm); + + for (i = 0; i < vm->num_cores; i++) { + // free cores + + v3_free_core(&(vm->cores[i])); + + } + + v3_free_vm_internal(vm); + + // free vm return 0; }