diff options
Diffstat (limited to 'include/litmus/rt_param.h')
-rw-r--r-- | include/litmus/rt_param.h | 100 |
1 files changed, 99 insertions, 1 deletions
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h index d6d799174160..0198884eab86 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/fpmath.h> | ||
9 | |||
8 | /* Litmus time type. */ | 10 | /* Litmus time type. */ |
9 | typedef unsigned long long lt_t; | 11 | typedef unsigned long long lt_t; |
10 | 12 | ||
@@ -24,6 +26,7 @@ static inline int lt_after_eq(lt_t a, lt_t b) | |||
24 | typedef enum { | 26 | typedef enum { |
25 | RT_CLASS_HARD, | 27 | RT_CLASS_HARD, |
26 | RT_CLASS_SOFT, | 28 | RT_CLASS_SOFT, |
29 | RT_CLASS_SOFT_W_SLIP, | ||
27 | RT_CLASS_BEST_EFFORT | 30 | RT_CLASS_BEST_EFFORT |
28 | } task_class_t; | 31 | } task_class_t; |
29 | 32 | ||
@@ -52,6 +55,19 @@ union np_flag { | |||
52 | } np; | 55 | } np; |
53 | }; | 56 | }; |
54 | 57 | ||
58 | struct affinity_observer_args | ||
59 | { | ||
60 | int lock_od; | ||
61 | }; | ||
62 | |||
63 | struct gpu_affinity_observer_args | ||
64 | { | ||
65 | struct affinity_observer_args obs; | ||
66 | int replica_to_gpu_offset; | ||
67 | int nr_simult_users; | ||
68 | int relaxed_rules; | ||
69 | }; | ||
70 | |||
55 | /* The definition of the data that is shared between the kernel and real-time | 71 | /* The definition of the data that is shared between the kernel and real-time |
56 | * tasks via a shared page (see litmus/ctrldev.c). | 72 | * tasks via a shared page (see litmus/ctrldev.c). |
57 | * | 73 | * |
@@ -75,6 +91,9 @@ struct control_page { | |||
75 | /* don't export internal data structures to user space (liblitmus) */ | 91 | /* don't export internal data structures to user space (liblitmus) */ |
76 | #ifdef __KERNEL__ | 92 | #ifdef __KERNEL__ |
77 | 93 | ||
94 | #include <litmus/binheap.h> | ||
95 | #include <linux/semaphore.h> | ||
96 | |||
78 | struct _rt_domain; | 97 | struct _rt_domain; |
79 | struct bheap_node; | 98 | struct bheap_node; |
80 | struct release_heap; | 99 | struct release_heap; |
@@ -100,6 +119,31 @@ struct rt_job { | |||
100 | 119 | ||
101 | struct pfair_param; | 120 | struct pfair_param; |
102 | 121 | ||
122 | enum klitirqd_sem_status | ||
123 | { | ||
124 | NEED_TO_REACQUIRE, | ||
125 | REACQUIRING, | ||
126 | NOT_HELD, | ||
127 | HELD | ||
128 | }; | ||
129 | |||
130 | typedef enum gpu_migration_dist | ||
131 | { | ||
132 | // TODO: Make this variable against NR_NVIDIA_GPUS | ||
133 | MIG_LOCAL = 0, | ||
134 | MIG_NEAR = 1, | ||
135 | MIG_MED = 2, | ||
136 | MIG_FAR = 3, // 8 GPUs in a binary tree hierarchy | ||
137 | MIG_NONE = 4, | ||
138 | |||
139 | MIG_LAST = MIG_NONE | ||
140 | } gpu_migration_dist_t; | ||
141 | |||
142 | typedef struct feedback_est{ | ||
143 | fp_t est; | ||
144 | fp_t accum_err; | ||
145 | } feedback_est_t; | ||
146 | |||
103 | /* RT task parameters for scheduling extensions | 147 | /* RT task parameters for scheduling extensions |
104 | * These parameters are inherited during clone and therefore must | 148 | * These parameters are inherited during clone and therefore must |
105 | * be explicitly set up before the task set is launched. | 149 | * be explicitly set up before the task set is launched. |
@@ -114,6 +158,52 @@ struct rt_param { | |||
114 | /* is the task present? (true if it can be scheduled) */ | 158 | /* is the task present? (true if it can be scheduled) */ |
115 | unsigned int present:1; | 159 | unsigned int present:1; |
116 | 160 | ||
161 | #ifdef CONFIG_LITMUS_SOFTIRQD | ||
162 | /* proxy threads have minimum priority by default */ | ||
163 | unsigned int is_proxy_thread:1; | ||
164 | |||
165 | /* pointer to klitirqd currently working on this | ||
166 | task_struct's behalf. only set by the task pointed | ||
167 | to by klitirqd. | ||
168 | |||
169 | ptr only valid if is_proxy_thread == 0 | ||
170 | */ | ||
171 | struct task_struct* cur_klitirqd; | ||
172 | |||
173 | /* Used to implement mutual execution exclusion between | ||
174 | * job and klitirqd execution. Job must always hold | ||
175 | * it's klitirqd_sem to execute. klitirqd instance | ||
176 | * must hold the semaphore before executing on behalf | ||
177 | * of a job. | ||
178 | */ | ||
179 | struct mutex klitirqd_sem; | ||
180 | |||
181 | /* status of held klitirqd_sem, even if the held klitirqd_sem is from | ||
182 | another task (only proxy threads do this though). | ||
183 | */ | ||
184 | atomic_t klitirqd_sem_stat; | ||
185 | #endif | ||
186 | |||
187 | #ifdef CONFIG_LITMUS_NVIDIA | ||
188 | /* number of top-half interrupts handled on behalf of current job */ | ||
189 | atomic_t nv_int_count; | ||
190 | long unsigned int held_gpus; // bitmap of held GPUs. | ||
191 | |||
192 | #ifdef CONFIG_LITMUS_AFFINITY_LOCKING | ||
193 | fp_t gpu_fb_param_a[MIG_LAST+1]; | ||
194 | fp_t gpu_fb_param_b[MIG_LAST+1]; | ||
195 | |||
196 | gpu_migration_dist_t gpu_migration; | ||
197 | int last_gpu; | ||
198 | feedback_est_t gpu_migration_est[MIG_LAST+1]; // local, near, med, far | ||
199 | |||
200 | lt_t accum_gpu_time; | ||
201 | lt_t gpu_time_stamp; | ||
202 | |||
203 | unsigned int suspend_gpu_tracker_on_block:1; | ||
204 | #endif | ||
205 | #endif | ||
206 | |||
117 | #ifdef CONFIG_LITMUS_LOCKING | 207 | #ifdef CONFIG_LITMUS_LOCKING |
118 | /* Is the task being priority-boosted by a locking protocol? */ | 208 | /* Is the task being priority-boosted by a locking protocol? */ |
119 | unsigned int priority_boosted:1; | 209 | unsigned int priority_boosted:1; |
@@ -133,7 +223,15 @@ struct rt_param { | |||
133 | * could point to self if PI does not result in | 223 | * could point to self if PI does not result in |
134 | * an increased task priority. | 224 | * an increased task priority. |
135 | */ | 225 | */ |
136 | struct task_struct* inh_task; | 226 | struct task_struct* inh_task; |
227 | |||
228 | #ifdef CONFIG_LITMUS_NESTED_LOCKING | ||
229 | raw_spinlock_t hp_blocked_tasks_lock; | ||
230 | struct binheap_handle hp_blocked_tasks; | ||
231 | |||
232 | /* pointer to lock upon which is currently blocked */ | ||
233 | struct litmus_lock* blocked_lock; | ||
234 | #endif | ||
137 | 235 | ||
138 | #ifdef CONFIG_NP_SECTION | 236 | #ifdef CONFIG_NP_SECTION |
139 | /* For the FMLP under PSN-EDF, it is required to make the task | 237 | /* For the FMLP under PSN-EDF, it is required to make the task |