X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_scheduler.c;h=25a84fc192b17d0debabc028b74f657da231c8d1;hb=02d617c8f625ad5da6c4c9b78b224e84baac5d08;hp=ab5dbefa69ca9e8f37873ac96c2c3675c58824f7;hpb=e1ce948d73094f899ada0a91739539441c8be098;p=palacios.git diff --git a/palacios/src/palacios/vmm_scheduler.c b/palacios/src/palacios/vmm_scheduler.c index ab5dbef..25a84fc 100644 --- a/palacios/src/palacios/vmm_scheduler.c +++ b/palacios/src/palacios/vmm_scheduler.c @@ -81,15 +81,26 @@ struct vm_scheduler_impl *v3_scheduler_lookup(char *name) } int V3_enable_scheduler() { - /* XXX Lookup the specified scheduler to use for palacios and use it */ - - scheduler = v3_scheduler_lookup(default_strategy); - PrintDebug(VM_NONE, VCORE_NONE,"Sched. Scheduler %s found",scheduler->name); - + char *sched_name; + + scheduler = NULL; + sched_name = v3_lookup_option("scheduler"); + + if (sched_name) { + scheduler = v3_scheduler_lookup(sched_name); + } + + if (!scheduler) { + scheduler = v3_scheduler_lookup(default_strategy); + } + if (!scheduler) { PrintError(VM_NONE, VCORE_NONE,"Specified Palacios scheduler \"%s\" not found.\n", default_strategy); return -1; } + + PrintDebug(VM_NONE, VCORE_NONE,"Scheduler %s found",scheduler->name); + if (scheduler->init) { return scheduler->init(); } else { @@ -208,9 +219,11 @@ void host_sched_yield(struct guest_info * core, int usec) { } else { V3_Sleep(usec); } - yield_start_cycle = (uint64_t) core->sched_priv_data - + (uint64_t)core->vm_info->sched_priv_data; - core->sched_priv_data = (void *)yield_start_cycle; + if(core){ + yield_start_cycle = (uint64_t) core->sched_priv_data + + (uint64_t)core->vm_info->sched_priv_data; + core->sched_priv_data = (void *)yield_start_cycle; + } }