aboutsummaryrefslogtreecommitdiffstats
path: root/include/litmus
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2012-10-15 00:37:24 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2012-10-15 00:37:24 -0400
commit67be6e7922465a9cc94a8c6f0353cb7051a6f97d (patch)
treef9b180570ccdeda2b70acd9d8723585b9676fca7 /include/litmus
parenta33f25feae0c9c372011559a2b2e0708b7d22c66 (diff)
Switched to common server model for tasks and crit entries.
Diffstat (limited to 'include/litmus')
-rw-r--r--include/litmus/rt_param.h16
-rw-r--r--include/litmus/sched_mc.h28
-rw-r--r--include/litmus/server.h24
3 files changed, 37 insertions, 31 deletions
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h
index e9e26faddcea..dad0abb1a598 100644
--- a/include/litmus/rt_param.h
+++ b/include/litmus/rt_param.h
@@ -5,6 +5,8 @@
5#ifndef _LINUX_RT_PARAM_H_ 5#ifndef _LINUX_RT_PARAM_H_
6#define _LINUX_RT_PARAM_H_ 6#define _LINUX_RT_PARAM_H_
7 7
8#include <litmus/server.h>
9
8/* Litmus time type. */ 10/* Litmus time type. */
9typedef unsigned long long lt_t; 11typedef unsigned long long lt_t;
10 12
@@ -165,6 +167,8 @@ struct rt_param {
165 167
166 unsigned int is_server:1; 168 unsigned int is_server:1;
167 169
170 unsigned int completed:1;
171
168#ifdef CONFIG_LITMUS_LOCKING 172#ifdef CONFIG_LITMUS_LOCKING
169 /* Is the task being priority-boosted by a locking protocol? */ 173 /* Is the task being priority-boosted by a locking protocol? */
170 unsigned int priority_boosted:1; 174 unsigned int priority_boosted:1;
@@ -180,8 +184,7 @@ struct rt_param {
180 struct rt_event *event; 184 struct rt_event *event;
181#endif 185#endif
182 186
183 struct rt_server *server; 187 struct server server;
184
185 188
186 /* user controlled parameters */ 189 /* user controlled parameters */
187 struct rt_task task_params; 190 struct rt_task task_params;
@@ -281,13 +284,12 @@ struct rt_param {
281 void *color_ctrl_page_orig; 284 void *color_ctrl_page_orig;
282#endif 285#endif
283 struct dgl_group_req *req; 286 struct dgl_group_req *req;
287 enum server_state state;
284}; 288};
285 289
286/* Possible RT flags */ 290#define RT_F_RUNNING 1
287#define RT_F_RUNNING 0x00000000 291#define RT_F_SLEEP 2
288#define RT_F_SLEEP 0x00000001 292#define RT_F_EXIT_SEM 4
289#define RT_F_BLOCKED 0x00000002
290#define RT_F_EXIT_SEM 0x00000008
291 293
292#endif 294#endif
293 295
diff --git a/include/litmus/sched_mc.h b/include/litmus/sched_mc.h
index 327f476aad74..12afd5525fca 100644
--- a/include/litmus/sched_mc.h
+++ b/include/litmus/sched_mc.h
@@ -28,15 +28,13 @@ struct mc_data {
28#define tsk_mc_data(t) (tsk_rt(t)->mc_data) 28#define tsk_mc_data(t) (tsk_rt(t)->mc_data)
29#define tsk_mc_crit(t) \ 29#define tsk_mc_crit(t) \
30 (tsk_mc_data(t) ? tsk_mc_data(t)->mc_task.crit : CRIT_LEVEL_C) 30 (tsk_mc_data(t) ? tsk_mc_data(t)->mc_task.crit : CRIT_LEVEL_C)
31#define is_cblocked(t) (get_rt_flags(t) & RT_F_BLOCKED)
32#define is_ghost(t) \ 31#define is_ghost(t) \
33 (get_rt_job(t) < get_user_job(t) && (get_rt_flags(t) & RT_F_SLEEP)) 32 (get_rt_job(t) < get_user_job(t) && (tsk_rt(t)->completed))
34#define ce_sid(ce) \ 33#define ce_sid(ce) \
35 (-((ce)->level * num_online_cpus() + crit_cpu(ce)->cpu + 1)) 34 (-((ce)->level * num_online_cpus() + crit_cpu(ce)->cpu + 1))
36 35
37#define TS "(%s/%d:%d:%d:%s)" 36#define TS "(%s/%d:%d:%d:%s)"
38#define TA(t) (t) ? tsk_mc_data(t) ? is_ghost(t) ? "ghost" : is_cblocked(t) ? "blocked" : t->comm \ 37#define TA(t) (t) ? is_ghost(t) ? "ghost" : t->comm : "NULL", \
39 : t->comm : "NULL", \
40 (t) ? t->pid : 1, \ 38 (t) ? t->pid : 1, \
41 (t) ? get_rt_job(t) : 1, \ 39 (t) ? get_rt_job(t) : 1, \
42 (t) ? get_user_job(t) : 1, \ 40 (t) ? get_user_job(t) : 1, \
@@ -45,7 +43,7 @@ struct mc_data {
45 STRACE(TS " " fmt, TA(t), ##args) 43 STRACE(TS " " fmt, TA(t), ##args)
46#define TRACE_CRIT_ENTRY(ce, fmt, args...) \ 44#define TRACE_CRIT_ENTRY(ce, fmt, args...) \
47 STRACE("%s P%d, linked=" TS " " fmt, \ 45 STRACE("%s P%d, linked=" TS " " fmt, \
48 (ce)->domain->name, crit_cpu(ce)->cpu, TA((ce)->linked), ##args) 46 (ce)->domain->name, crit_cpu(ce)->cpu, TA((ce)->server.linked), ##args)
49 47
50/* 48/*
51 * The MC-CE scheduler uses this as domain data. 49 * The MC-CE scheduler uses this as domain data.
@@ -62,23 +60,6 @@ struct ce_dom_data {
62}; 60};
63 61
64/** 62/**
65 * enum crit_state - Logically add / remove CPUs from criticality levels.
66 *
67 * Global crit levels need to use a two step process to remove CPUs so
68 * that the CPUs can be removed without holding domain locks.
69 *
70 * @CS_ACTIVE The criticality entry can run a task
71 * @CS_ACTIVATE The criticality entry can run a task, but hasn't had its
72 * position updated in a global heap. Set with ONLY CPU lock.
73 * @CS_REMOVE The criticality entry is logically removed, but hasn't had its
74 * position adjusted in a global heap. This should be set when
75 * ONLY the CPU state is locked.
76 * @CS_REMOVED The criticality entry has been removed from the crit level
77 * @CS_BLOCKED The criticality entry cannot run until an event occurs
78 */
79enum crit_state { CS_ACTIVE, CS_ACTIVATE, CS_REMOVE, CS_REMOVED , CS_BLOCKED};
80
81/**
82 * struct crit_entry - State of a CPU within each criticality level system. 63 * struct crit_entry - State of a CPU within each criticality level system.
83 * @level Criticality level of this entry 64 * @level Criticality level of this entry
84 * @linked Logically running task, ghost or regular 65 * @linked Logically running task, ghost or regular
@@ -89,10 +70,9 @@ enum crit_state { CS_ACTIVE, CS_ACTIVATE, CS_REMOVE, CS_REMOVED , CS_BLOCKED};
89 * @node Used to sort crit_entries by preemptability in global domains 70 * @node Used to sort crit_entries by preemptability in global domains
90 */ 71 */
91struct crit_entry { 72struct crit_entry {
73 struct server server;
92 enum crit_level level; 74 enum crit_level level;
93 struct task_struct* linked;
94 struct domain* domain; 75 struct domain* domain;
95 enum crit_state state;
96#ifdef CONFIG_MERGE_TIMERS 76#ifdef CONFIG_MERGE_TIMERS
97 struct rt_event event; 77 struct rt_event event;
98#else 78#else
diff --git a/include/litmus/server.h b/include/litmus/server.h
new file mode 100644
index 000000000000..c950325954ff
--- /dev/null
+++ b/include/litmus/server.h
@@ -0,0 +1,24 @@
1#ifndef __SERVER_H
2#define __SERVER_H
3
4enum server_state { SS_ACTIVE, SS_REMOVED , SS_BLOCKED};
5
6/*
7 * An accounting class only.
8 */
9struct server {
10 int sid;
11 unsigned int *job;
12 int cpu;
13
14 unsigned int in_transit:1;
15
16 enum server_state state;
17 struct task_struct *linked;
18};
19
20void server_init(struct server *server, int sid, int *job);
21void server_state_change(struct server *server, enum server_state state,
22 unsigned int transit);
23
24#endif