aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2013-11-26 14:41:19 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2013-11-26 14:41:19 -0500
commitdfe59a59caec43172bbf09fe3e2e15e9395e7e6b (patch)
tree78378d2d1b5835500bf79b0d03665bc7cf7694f5 /include
parentb2b3e869e8d5fee88aabf001c09094b400450bac (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.h25
-rw-r--r--include/litmus/litmus.h4
-rw-r--r--include/litmus/rt_param.h6
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
15void edf_split_domain_init(rt_domain_t* rt, check_resched_needed_t resched,
16 release_jobs_t release);
17
18int edf_split_higher_prio(struct task_struct* first,
19 struct task_struct* second);
20
21int edf_split_ready_order(struct bheap_node* a, struct bheap_node* b);
22
23int 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
122void preempt_if_preemptable(struct task_struct* t, int on_cpu); 126void 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