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:
Juergen Gross authored and Andrew Cooper committed 2019-06-11 17:42:52 +01:00
1 parent f093199132
commit ec25b3c026
1 file changed
+25 -1
+25 -1
View File
@@ -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];
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.