From 4410877f28d1a20b5c98dd153de78c8342ac76f3 Mon Sep 17 00:00:00 2001 From: Bjoern Brandenburg Date: Sun, 9 Aug 2015 13:18:54 +0200 Subject: Hook into kernel/exit.c to force exiting RT tasks into best-effort mode --- kernel/exit.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/kernel/exit.c b/kernel/exit.c index a27a04c4fa35..07e491702a70 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -61,6 +61,8 @@ static void exit_mm(struct task_struct *tsk); +#include + extern void exit_od_table(struct task_struct *t); static void __unhash_process(struct task_struct *p, bool group_dead) @@ -667,6 +669,15 @@ void do_exit(long code) if (unlikely(!tsk->pid)) panic("Attempted to kill the idle task!"); + if (unlikely(is_realtime(tsk))) { + /* We would like the task to be polite + * and transition out of RT mode first. + * Let's give it a little help. + */ + litmus_do_exit(tsk); + BUG_ON(is_realtime(tsk)); + } + /* * If do_exit is called because this processes oopsed, it's possible * that get_fs() was left as KERNEL_DS, so reset it to USER_DS before -- cgit v1.2.2