diff options
Diffstat (limited to 'include/litmus/rt_param.h')
-rw-r--r-- | include/litmus/rt_param.h | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h index bf0ee8dbae6e..887075b908ca 100644 --- a/include/litmus/rt_param.h +++ b/include/litmus/rt_param.h | |||
@@ -36,6 +36,14 @@ typedef enum { | |||
36 | } budget_policy_t; | 36 | } budget_policy_t; |
37 | 37 | ||
38 | typedef enum { | 38 | typedef enum { |
39 | /* all drain mechanisms are ignored if budget enforcement or signalling | ||
40 | is not in use. */ | ||
41 | DRAIN_SIMPLE, /* drains while task is linked */ | ||
42 | DRAIN_SAWARE, /* drains according to suspension-aware analysis */ | ||
43 | DRAIN_SOBLIV, /* drains according to suspension-obliv analysis */ | ||
44 | } budget_drain_policy_t; | ||
45 | |||
46 | typedef enum { | ||
39 | NO_SIGNALS, /* job receives no signals when it exhausts its budget */ | 47 | NO_SIGNALS, /* job receives no signals when it exhausts its budget */ |
40 | QUANTUM_SIGNALS, /* budget signals are only sent on quantum boundaries */ | 48 | QUANTUM_SIGNALS, /* budget signals are only sent on quantum boundaries */ |
41 | PRECISE_SIGNALS, /* budget signals are triggered with hrtimers */ | 49 | PRECISE_SIGNALS, /* budget signals are triggered with hrtimers */ |
@@ -132,6 +140,7 @@ struct rt_task { | |||
132 | unsigned int priority; | 140 | unsigned int priority; |
133 | task_class_t cls; | 141 | task_class_t cls; |
134 | budget_policy_t budget_policy; /* ignored by pfair */ | 142 | budget_policy_t budget_policy; /* ignored by pfair */ |
143 | budget_drain_policy_t drain_policy; | ||
135 | budget_signal_policy_t budget_signal_policy; /* currently ignored by pfair */ | 144 | budget_signal_policy_t budget_signal_policy; /* currently ignored by pfair */ |
136 | release_policy_t release_policy; | 145 | release_policy_t release_policy; |
137 | }; | 146 | }; |
@@ -213,8 +222,9 @@ struct control_page { | |||
213 | /* don't export internal data structures to user space (liblitmus) */ | 222 | /* don't export internal data structures to user space (liblitmus) */ |
214 | #ifdef __KERNEL__ | 223 | #ifdef __KERNEL__ |
215 | 224 | ||
216 | #include <litmus/binheap.h> | ||
217 | #include <linux/semaphore.h> | 225 | #include <linux/semaphore.h> |
226 | #include <litmus/budget.h> | ||
227 | #include <litmus/binheap.h> | ||
218 | 228 | ||
219 | #ifdef CONFIG_LITMUS_SOFTIRQD | 229 | #ifdef CONFIG_LITMUS_SOFTIRQD |
220 | #include <linux/interrupt.h> | 230 | #include <linux/interrupt.h> |
@@ -247,15 +257,8 @@ struct rt_job { | |||
247 | * Increase this sequence number when a job is released. | 257 | * Increase this sequence number when a job is released. |
248 | */ | 258 | */ |
249 | unsigned int job_no; | 259 | unsigned int job_no; |
250 | |||
251 | /* bits: | ||
252 | * 0th: Set if a budget exhaustion signal has already been sent for | ||
253 | * the current job. */ | ||
254 | unsigned long flags; | ||
255 | }; | 260 | }; |
256 | 261 | ||
257 | #define RT_JOB_SIG_BUDGET_SENT 0 | ||
258 | |||
259 | struct pfair_param; | 262 | struct pfair_param; |
260 | 263 | ||
261 | enum klmirqd_sem_status | 264 | enum klmirqd_sem_status |
@@ -278,12 +281,12 @@ typedef enum gpu_migration_dist | |||
278 | MIG_LAST = MIG_NONE | 281 | MIG_LAST = MIG_NONE |
279 | } gpu_migration_dist_t; | 282 | } gpu_migration_dist_t; |
280 | 283 | ||
281 | typedef struct feedback_est{ | 284 | typedef struct feedback_est |
285 | { | ||
282 | fp_t est; | 286 | fp_t est; |
283 | fp_t accum_err; | 287 | fp_t accum_err; |
284 | } feedback_est_t; | 288 | } feedback_est_t; |
285 | 289 | ||
286 | |||
287 | #define AVG_EST_WINDOW_SIZE 20 | 290 | #define AVG_EST_WINDOW_SIZE 20 |
288 | 291 | ||
289 | typedef int (*notify_rsrc_exit_t)(struct task_struct* tsk); | 292 | typedef int (*notify_rsrc_exit_t)(struct task_struct* tsk); |
@@ -417,7 +420,6 @@ struct rt_param { | |||
417 | struct binheap_node aux_task_owner_node; | 420 | struct binheap_node aux_task_owner_node; |
418 | #endif | 421 | #endif |
419 | 422 | ||
420 | |||
421 | #ifdef CONFIG_NP_SECTION | 423 | #ifdef CONFIG_NP_SECTION |
422 | /* For the FMLP under PSN-EDF, it is required to make the task | 424 | /* For the FMLP under PSN-EDF, it is required to make the task |
423 | * non-preemptive from kernel space. In order not to interfere with | 425 | * non-preemptive from kernel space. In order not to interfere with |
@@ -427,6 +429,8 @@ struct rt_param { | |||
427 | unsigned int kernel_np; | 429 | unsigned int kernel_np; |
428 | #endif | 430 | #endif |
429 | 431 | ||
432 | struct budget_tracker budget; | ||
433 | |||
430 | /* This field can be used by plugins to store where the task | 434 | /* This field can be used by plugins to store where the task |
431 | * is currently scheduled. It is the responsibility of the | 435 | * is currently scheduled. It is the responsibility of the |
432 | * plugin to avoid race conditions. | 436 | * plugin to avoid race conditions. |