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;
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) {
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));
}
}
+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);
v3_register_scheduler(&host_sched_impl);
return 0;
}
+
+static int destroy_host_scheduler()
+{
+ v3_unregister_scheduler(host_sched_impl.name);
+ return 0;
+}