From b8cf3125fceadb90ed4924a3e8c42b94742911ec Mon Sep 17 00:00:00 2001 From: Bjoern Brandenburg Date: Tue, 12 Feb 2013 17:45:17 +0100 Subject: Hook into fork(), exec(), and exit() Allow LITMUS^RT to do some work when a process is created or terminated. --- fs/exec.c | 3 +++ kernel/exit.c | 4 ++++ kernel/fork.c | 9 +++++++++ 3 files changed, 16 insertions(+) diff --git a/fs/exec.c b/fs/exec.c index bb60cda5ee30..d84259a2157c 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -56,6 +56,8 @@ #include #include +#include + #include #include #include @@ -1506,6 +1508,7 @@ static int do_execve_common(const char *filename, goto out_unmark; sched_exec(); + litmus_exec(); bprm->file = file; bprm->filename = filename; diff --git a/kernel/exit.c b/kernel/exit.c index 6682b2ea5b11..eb29f3be09d7 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -59,6 +59,8 @@ #include #include +extern void exit_od_table(struct task_struct *t); + static void exit_mm(struct task_struct * tsk); static void __unhash_process(struct task_struct *p, bool group_dead) @@ -788,6 +790,8 @@ void do_exit(long code) tty_audit_exit(); audit_free(tsk); + exit_od_table(tsk); + tsk->exit_code = code; taskstats_exit(tsk, group_dead); diff --git a/kernel/fork.c b/kernel/fork.c index ff7be9dac4c1..b8aa56baa0f4 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -81,6 +81,9 @@ #include +#include +#include + #define CREATE_TRACE_POINTS #include @@ -238,6 +241,9 @@ void __put_task_struct(struct task_struct *tsk) WARN_ON(tsk == current); security_task_free(tsk); + + exit_litmus(tsk); + exit_creds(tsk); delayacct_tsk_free(tsk); put_signal_struct(tsk->signal); @@ -312,6 +318,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) tsk->stack = ti; + /* Don't let the new task be a real-time task. */ + litmus_fork(tsk); + setup_thread_stack(tsk, orig); clear_user_return_notifier(tsk); clear_tsk_need_resched(tsk); -- cgit v1.2.2