aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/jobs.c
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2012-10-03 11:01:30 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2012-10-03 11:01:30 -0400
commit7e7bb31d1215300b6e60661a7ead02236ea1adda (patch)
tree403522bbea6a3ed758ca435f952cabd30c4ae771 /litmus/jobs.c
parent6e515de45f1ad108a8ae08d0be1b6f7bf2a707b6 (diff)
Moved user-space state of tasks into new rt_param.user_job.
Both sched_color and sched_mc assumed seperate kernel and userspace views of job states, where the kernel view is used for scheduling while the userspace view is used for statistics (tardiness etc). This commit merges both approaches.
Diffstat (limited to 'litmus/jobs.c')
-rw-r--r--litmus/jobs.c59
1 files changed, 43 insertions, 16 deletions
diff --git a/litmus/jobs.c b/litmus/jobs.c
index bd3175baefae..983b084cf32b 100644
--- a/litmus/jobs.c
+++ b/litmus/jobs.c
@@ -1,4 +1,5 @@
1/* litmus/jobs.c - common job control code 1/* litmus/jobs.c - common job control code
2 * TODO: modified heavily for sched_mc
2 */ 3 */
3 4
4#include <linux/sched.h> 5#include <linux/sched.h>
@@ -6,25 +7,23 @@
6#include <litmus/litmus.h> 7#include <litmus/litmus.h>
7#include <litmus/jobs.h> 8#include <litmus/jobs.h>
8#include <litmus/trace.h> 9#include <litmus/trace.h>
10#include <litmus/sched_trace.h>
11#include <litmus/domain.h>
12#include <litmus/sched_mc.h>
9 13
10static inline void setup_release(struct task_struct *t, lt_t release) 14static inline void setup_release(struct task_struct *t, struct rt_job *job,
15 lt_t release)
11{ 16{
12 /* prepare next release */ 17 /* prepare next release */
13 tsk_rt(t)->job_params.release = release; 18 job->release = release;
14 tsk_rt(t)->job_params.deadline = release + get_rt_relative_deadline(t); 19 job->deadline = release + get_rt_relative_deadline(t);
15 tsk_rt(t)->job_params.exec_time = 0; 20 job->exec_time = 0;
16 21
17 /* update job sequence number */ 22 /* update job sequence number */
18 tsk_rt(t)->job_params.job_no++; 23 ++job->job_no;
19
20 /* don't confuse Linux */
21 t->rt.time_slice = 1;
22
23 TRACE_TASK(t, "Releasing at %llu, deadline: %llu, period: %llu, now: %llu\n",
24 release, get_deadline(t), get_rt_period(t), litmus_clock());
25} 24}
26 25
27void prepare_for_next_period(struct task_struct *t) 26static inline void setup_kernel_release(struct task_struct *t, lt_t release)
28{ 27{
29 BUG_ON(!t); 28 BUG_ON(!t);
30 29
@@ -32,21 +31,49 @@ void prepare_for_next_period(struct task_struct *t)
32 * release and deadline. Lateness may be negative. 31 * release and deadline. Lateness may be negative.
33 */ 32 */
34 t->rt_param.job_params.lateness = 33 t->rt_param.job_params.lateness =
35 (long long)litmus_clock() - 34 (long long)litmus_clock() -
36 (long long)t->rt_param.job_params.deadline; 35 (long long)t->rt_param.job_params.deadline;
37 36
38 setup_release(t, get_release(t) + get_rt_period(t)); 37 t->rt.time_slice = 1;
38
39 setup_release(t, &tsk_rt(t)->job_params, release);
40
41 TRACE_MC_TASK(t, "kernel rel=%llu, dead=%llu\n", get_release(t), get_deadline(t));
42
43 sched_trace_server_release(-t->pid, get_rt_job(t),
44 tsk_rt(t)->job_params);
45}
46
47void setup_user_release(struct task_struct *t, lt_t release)
48{
49 setup_release(t, &tsk_rt(t)->user_job, release);
50 TRACE_MC_TASK(t, "user rel=%llu, dead=%llu\n", get_user_release(t), get_user_deadline(t));
51 if (CRIT_LEVEL_A != tsk_mc_crit(t))
52 sched_trace_task_release(t);
53
54}
55
56void prepare_for_next_period(struct task_struct *t)
57{
58 setup_kernel_release(t, get_release(t) + get_rt_period(t));
39} 59}
40 60
41void release_at(struct task_struct *t, lt_t start) 61void release_at(struct task_struct *t, lt_t start)
42{ 62{
43 BUG_ON(!t); 63 BUG_ON(!t);
44 setup_release(t, start); 64
65 TRACE_MC_TASK(t, "Releasing at %llu\n", start);
66
67 setup_kernel_release(t, start);
68 setup_user_release(t, start);
69
70 BUG_ON(!is_released(t, start));
71
45 set_rt_flags(t, RT_F_RUNNING); 72 set_rt_flags(t, RT_F_RUNNING);
46} 73}
47 74
48/* 75/*
49 * Deactivate current task until the beginning of the next period. 76 * User-space job has completed execution
50 */ 77 */
51long complete_job(void) 78long complete_job(void)
52{ 79{