diff options
author | Bjoern Brandenburg <bbb@mpi-sws.org> | 2014-06-02 08:22:02 -0400 |
---|---|---|
committer | Namhoon Kim <namhoonk@cs.unc.edu> | 2014-10-21 10:08:10 -0400 |
commit | d14164377790b4c15fd1fa4665329f6e6febe78f (patch) | |
tree | 8143ba947fd4a6c8039a353ff4104f818f9b8722 | |
parent | 232ab01e5abd3bf3b494f46d558898122d57f6d8 (diff) |
Hook into kernel/exit.c to force exiting RT tasks into best-effort mode
-rw-r--r-- | kernel/exit.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index ab36666c0875..2fc678f64854 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -59,6 +59,8 @@ | |||
59 | #include <asm/pgtable.h> | 59 | #include <asm/pgtable.h> |
60 | #include <asm/mmu_context.h> | 60 | #include <asm/mmu_context.h> |
61 | 61 | ||
62 | #include <litmus/litmus.h> | ||
63 | |||
62 | extern void exit_od_table(struct task_struct *t); | 64 | extern void exit_od_table(struct task_struct *t); |
63 | 65 | ||
64 | static void exit_mm(struct task_struct * tsk); | 66 | static void exit_mm(struct task_struct * tsk); |
@@ -720,6 +722,15 @@ void do_exit(long code) | |||
720 | if (unlikely(!tsk->pid)) | 722 | if (unlikely(!tsk->pid)) |
721 | panic("Attempted to kill the idle task!"); | 723 | panic("Attempted to kill the idle task!"); |
722 | 724 | ||
725 | if (unlikely(is_realtime(tsk))) { | ||
726 | /* We would like the task to be polite | ||
727 | * and transition out of RT mode first. | ||
728 | * Let's give it a little help. | ||
729 | */ | ||
730 | litmus_do_exit(tsk); | ||
731 | BUG_ON(is_realtime(tsk)); | ||
732 | } | ||
733 | |||
723 | /* | 734 | /* |
724 | * If do_exit is called because this processes oopsed, it's possible | 735 | * If do_exit is called because this processes oopsed, it's possible |
725 | * that get_fs() was left as KERNEL_DS, so reset it to USER_DS before | 736 | * that get_fs() was left as KERNEL_DS, so reset it to USER_DS before |