mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/sched: only allow schedulers with all mandatory functions available
Some functions of struct scheduler are mandatory. Test those in the scheduler initialization loop to be present and drop schedulers not complying. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Dario Faggioli <dfaggioli@suse.com>
This commit is contained in:
1 parent
f093199132
commit
ec25b3c026
1 file changed
+25
-1
+25
-1
@@ -1727,9 +1727,33 @@ void __init scheduler_init(void)
|
||||
|
||||
for ( i = 0; i < NUM_SCHEDULERS; i++)
|
||||
{
|
||||
#define sched_test_func(f) \
|
||||
if ( !schedulers[i]->f ) \
|
||||
{ \
|
||||
printk("scheduler %s misses .%s, dropped\n", \
|
||||
schedulers[i]->opt_name, #f); \
|
||||
schedulers[i] = NULL; \
|
||||
}
|
||||
|
||||
sched_test_func(init);
|
||||
sched_test_func(deinit);
|
||||
sched_test_func(pick_cpu);
|
||||
sched_test_func(alloc_vdata);
|
||||
sched_test_func(free_vdata);
|
||||
sched_test_func(switch_sched);
|
||||
sched_test_func(do_schedule);
|
||||
|
||||
#undef sched_test_func
|
||||
|
||||
if ( schedulers[i]->global_init && schedulers[i]->global_init() < 0 )
|
||||
{
|
||||
printk("scheduler %s failed initialization, dropped\n",
|
||||
schedulers[i]->opt_name);
|
||||
schedulers[i] = NULL;
|
||||
else if ( !ops.name && !strcmp(schedulers[i]->opt_name, opt_sched) )
|
||||
}
|
||||
|
||||
if ( schedulers[i] && !ops.name &&
|
||||
!strcmp(schedulers[i]->opt_name, opt_sched) )
|
||||
ops = *schedulers[i];
|
||||
}
|
||||
|
||||
|
||||