aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/litmus.c
diff options
context:
space:
mode:
Diffstat (limited to 'litmus/litmus.c')
-rwxr-xr-xlitmus/litmus.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/litmus/litmus.c b/litmus/litmus.c
index 8bc159b2fcce..065ef7d3192a 100755
--- a/litmus/litmus.c
+++ b/litmus/litmus.c
@@ -9,6 +9,7 @@
9#include <linux/sched.h> 9#include <linux/sched.h>
10#include <linux/module.h> 10#include <linux/module.h>
11#include <linux/slab.h> 11#include <linux/slab.h>
12#include <linux/reboot.h>
12 13
13#include <litmus/litmus.h> 14#include <litmus/litmus.h>
14#include <litmus/bheap.h> 15#include <litmus/bheap.h>
@@ -704,6 +705,25 @@ static struct sysrq_key_op sysrq_kill_rt_tasks_op = {
704 705
705extern struct sched_plugin linux_sched_plugin; 706extern struct sched_plugin linux_sched_plugin;
706 707
708static int litmus_shutdown_nb(struct notifier_block *unused1,
709 unsigned long unused2, void *unused3)
710{
711 /* Attempt to switch back to regular Linux scheduling.
712 * Forces the active plugin to clean up.
713 */
714 if (litmus != &linux_sched_plugin) {
715 int ret = switch_sched_plugin(&linux_sched_plugin);
716 if (ret) {
717 printk("Auto-shutdown of active Litmus plugin failed.\n");
718 }
719 }
720 return NOTIFY_DONE;
721}
722
723static struct notifier_block shutdown_notifier = {
724 .notifier_call = litmus_shutdown_nb,
725};
726
707static int __init _init_litmus(void) 727static int __init _init_litmus(void)
708{ 728{
709 /* Common initializers, 729 /* Common initializers,
@@ -733,11 +753,15 @@ static int __init _init_litmus(void)
733 init_topology(); 753 init_topology();
734#endif 754#endif
735 755
756 register_reboot_notifier(&shutdown_notifier);
757
736 return 0; 758 return 0;
737} 759}
738 760
739static void _exit_litmus(void) 761static void _exit_litmus(void)
740{ 762{
763 unregister_reboot_notifier(&shutdown_notifier);
764
741 exit_litmus_proc(); 765 exit_litmus_proc();
742 kmem_cache_destroy(bheap_node_cache); 766 kmem_cache_destroy(bheap_node_cache);
743 kmem_cache_destroy(release_heap_cache); 767 kmem_cache_destroy(release_heap_cache);