aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/litmus.c
diff options
context:
space:
mode:
Diffstat (limited to 'litmus/litmus.c')
-rw-r--r--litmus/litmus.c12
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;
443out: 453out: