diff options
Diffstat (limited to 'litmus/litmus.c')
-rw-r--r-- | litmus/litmus.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/litmus/litmus.c b/litmus/litmus.c index 76378ce34c2b..058cb956fb44 100644 --- a/litmus/litmus.c +++ b/litmus/litmus.c | |||
@@ -424,20 +424,30 @@ static int do_plugin_switch(void *_plugin) | |||
424 | { | 424 | { |
425 | int ret; | 425 | int ret; |
426 | struct sched_plugin* plugin = _plugin; | 426 | struct sched_plugin* plugin = _plugin; |
427 | struct domain_proc_info* domain_info; | ||
427 | 428 | ||
428 | /* don't switch if there are active real-time tasks */ | 429 | /* don't switch if there are active real-time tasks */ |
429 | if (atomic_read(&rt_task_count) == 0) { | 430 | if (atomic_read(&rt_task_count) == 0) { |
431 | deactivate_domain_proc(); | ||
430 | ret = litmus->deactivate_plugin(); | 432 | ret = litmus->deactivate_plugin(); |
431 | if (0 != ret) | 433 | if (0 != ret) { |
434 | /* reactivate the old proc info */ | ||
435 | if(!litmus->get_domain_proc_info(&domain_info)) | ||
436 | activate_domain_proc(domain_info); | ||
432 | goto out; | 437 | goto out; |
438 | } | ||
433 | ret = plugin->activate_plugin(); | 439 | ret = plugin->activate_plugin(); |
434 | if (0 != ret) { | 440 | if (0 != ret) { |
435 | printk(KERN_INFO "Can't activate %s (%d).\n", | 441 | printk(KERN_INFO "Can't activate %s (%d).\n", |
436 | plugin->plugin_name, ret); | 442 | plugin->plugin_name, ret); |
437 | plugin = &linux_sched_plugin; | 443 | plugin = &linux_sched_plugin; |
438 | } | 444 | } |
445 | |||
439 | printk(KERN_INFO "Switching to LITMUS^RT plugin %s.\n", plugin->plugin_name); | 446 | printk(KERN_INFO "Switching to LITMUS^RT plugin %s.\n", plugin->plugin_name); |
440 | litmus = plugin; | 447 | litmus = plugin; |
448 | |||
449 | if(!litmus->get_domain_proc_info(&domain_info)) | ||
450 | activate_domain_proc(domain_info); | ||
441 | } else | 451 | } else |
442 | ret = -EBUSY; | 452 | ret = -EBUSY; |
443 | out: | 453 | out: |