diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2013-11-26 14:41:19 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2013-11-26 14:41:19 -0500 |
commit | dfe59a59caec43172bbf09fe3e2e15e9395e7e6b (patch) | |
tree | 78378d2d1b5835500bf79b0d03665bc7cf7694f5 /include | |
parent | b2b3e869e8d5fee88aabf001c09094b400450bac (diff) |
Add C-FL scheduler plugin.
This patch adds a C-FL scheduler plugin. Original work
by Jeremy Erikson, port to latest Litmus by Namhoon Kim,
and cleanup and commit by Glenn Elliott.
Diffstat (limited to 'include')
-rw-r--r-- | include/litmus/edf_split_common.h | 25 | ||||
-rw-r--r-- | include/litmus/litmus.h | 4 | ||||
-rw-r--r-- | include/litmus/rt_param.h | 6 |
3 files changed, 35 insertions, 0 deletions
diff --git a/include/litmus/edf_split_common.h b/include/litmus/edf_split_common.h new file mode 100644 index 000000000000..4e7c0ce23c9d --- /dev/null +++ b/include/litmus/edf_split_common.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * EDF common data structures and utility functions shared by all EDF | ||
3 | * based scheduler plugins | ||
4 | */ | ||
5 | |||
6 | /* CLEANUP: Add comments and make it less messy. | ||
7 | * | ||
8 | */ | ||
9 | |||
10 | #ifndef __UNC_EDF_SPLIT_COMMON_H__ | ||
11 | #define __UNC_EDF_SPLIT_COMMON_H__ | ||
12 | |||
13 | #include <litmus/rt_domain.h> | ||
14 | |||
15 | void edf_split_domain_init(rt_domain_t* rt, check_resched_needed_t resched, | ||
16 | release_jobs_t release); | ||
17 | |||
18 | int edf_split_higher_prio(struct task_struct* first, | ||
19 | struct task_struct* second); | ||
20 | |||
21 | int edf_split_ready_order(struct bheap_node* a, struct bheap_node* b); | ||
22 | |||
23 | int edf_split_preemption_needed(rt_domain_t* rt, struct task_struct *t); | ||
24 | |||
25 | #endif | ||
diff --git a/include/litmus/litmus.h b/include/litmus/litmus.h index e35c38c4c0a2..c240d9c07169 100644 --- a/include/litmus/litmus.h +++ b/include/litmus/litmus.h | |||
@@ -67,6 +67,7 @@ void litmus_exit_task(struct task_struct *tsk); | |||
67 | /* job_param macros */ | 67 | /* job_param macros */ |
68 | #define get_exec_time(t) (tsk_rt(t)->job_params.exec_time) | 68 | #define get_exec_time(t) (tsk_rt(t)->job_params.exec_time) |
69 | #define get_deadline(t) (tsk_rt(t)->job_params.deadline) | 69 | #define get_deadline(t) (tsk_rt(t)->job_params.deadline) |
70 | #define get_subjob_deadline(t) (tsk_rt(t)->job_params.subjob_deadline) | ||
70 | #define get_release(t) (tsk_rt(t)->job_params.release) | 71 | #define get_release(t) (tsk_rt(t)->job_params.release) |
71 | #define get_lateness(t) (tsk_rt(t)->job_params.lateness) | 72 | #define get_lateness(t) (tsk_rt(t)->job_params.lateness) |
72 | 73 | ||
@@ -118,6 +119,9 @@ static inline lt_t litmus_clock(void) | |||
118 | #define earlier_release(a, b) (lt_before(\ | 119 | #define earlier_release(a, b) (lt_before(\ |
119 | (a)->rt_param.job_params.release,\ | 120 | (a)->rt_param.job_params.release,\ |
120 | (b)->rt_param.job_params.release)) | 121 | (b)->rt_param.job_params.release)) |
122 | #define earlier_subjob_deadline(a, b) (lt_before(\ | ||
123 | (a)->rt_param.job_params.subjob_deadline,\ | ||
124 | (b)->rt_param.job_params.subjob_deadline)) | ||
121 | 125 | ||
122 | void preempt_if_preemptable(struct task_struct* t, int on_cpu); | 126 | void preempt_if_preemptable(struct task_struct* t, int on_cpu); |
123 | 127 | ||
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h index fe4b31320ac8..6160a1635227 100644 --- a/include/litmus/rt_param.h +++ b/include/litmus/rt_param.h | |||
@@ -76,6 +76,7 @@ struct rt_task { | |||
76 | lt_t period; | 76 | lt_t period; |
77 | lt_t relative_deadline; | 77 | lt_t relative_deadline; |
78 | lt_t phase; | 78 | lt_t phase; |
79 | int split; | ||
79 | unsigned int cpu; | 80 | unsigned int cpu; |
80 | unsigned int priority; | 81 | unsigned int priority; |
81 | task_class_t cls; | 82 | task_class_t cls; |
@@ -149,6 +150,11 @@ struct rt_job { | |||
149 | /* What is the current deadline? */ | 150 | /* What is the current deadline? */ |
150 | lt_t deadline; | 151 | lt_t deadline; |
151 | 152 | ||
153 | #ifdef CONFIG_JOB_SPLITTING | ||
154 | /* What is the deadline of the current subjob under splitting? */ | ||
155 | lt_t subjob_deadline; | ||
156 | #endif | ||
157 | |||
152 | /* How much service has this job received so far? */ | 158 | /* How much service has this job received so far? */ |
153 | lt_t exec_time; | 159 | lt_t exec_time; |
154 | 160 | ||