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.


Cleaned up deinitialization of VMM and free of VMs
[palacios.git] / palacios / src / palacios / vmm_scheduler.c
index cac3425..43230fc 100644 (file)
@@ -32,6 +32,7 @@
 static char default_strategy[] = "host";
 static struct hashtable * master_scheduler_table = NULL;
 static int create_host_scheduler();
+static int destroy_host_scheduler();
 
 static struct vm_scheduler_impl *scheduler = NULL;
 
@@ -55,6 +56,13 @@ int V3_init_scheduling() {
     return create_host_scheduler();
 }
 
+int V3_deinit_scheduling()
+{
+    destroy_host_scheduler();
+    v3_free_htable(master_scheduler_table,1,1);
+    return 0;
+}
+
 
 int v3_register_scheduler(struct vm_scheduler_impl *s) {
 
@@ -75,6 +83,24 @@ int v3_register_scheduler(struct vm_scheduler_impl *s) {
     return 0;
 }
 
+
+struct vm_scheduler_impl *v3_unregister_scheduler(char *name) {
+
+    PrintDebug(VM_NONE, VCORE_NONE,"Unregistering Scheduler (%s)\n",name);
+
+    struct vm_scheduler_impl *f = (struct vm_scheduler_impl *) v3_htable_remove(master_scheduler_table,(addr_t)(name),0);
+
+    if (!f) { 
+       PrintError(VM_NONE,VCORE_NONE,"Could not find Scheduler (%s)\n",name);
+       return NULL;
+    } else {
+       return f;
+    }
+}
+       
+
+
+
 struct vm_scheduler_impl *v3_scheduler_lookup(char *name)
 {
     return (struct vm_scheduler_impl *)v3_htable_search(master_scheduler_table, (addr_t)(name));
@@ -108,6 +134,15 @@ int V3_enable_scheduler() {
     }
 }
 
+int V3_disable_scheduler()
+{
+    if (scheduler->deinit) { 
+       return scheduler->deinit();
+    } else {
+       return 0;
+    }
+}
+
 int v3_scheduler_register_vm(struct v3_vm_info *vm) {
     if (scheduler->vm_init) {
        return scheduler->vm_init(vm);
@@ -247,3 +282,9 @@ static int create_host_scheduler()
        v3_register_scheduler(&host_sched_impl);
        return 0;
 }
+
+static int destroy_host_scheduler()
+{
+       v3_unregister_scheduler(host_sched_impl.name);
+       return 0;
+}