diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2010-11-26 17:08:54 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2010-11-26 17:08:54 -0500 |
commit | e83917699a930e63a34a8b112258b1d5e4031048 (patch) | |
tree | b43cbbcccda974be236724daea1035ad5f736d8c | |
parent | c3566e210d4e466e97d84d4a190760c4e91766ac (diff) |
Support for AEDZL
Added support for AEDZL. Users may specify feedback control parameters.
If LITMUS_FP_ZERO is given, then task will default to Litmus's internal
default (at this time, a = 0.102 and b = 0.303; a critically-damped system).
-rw-r--r-- | bin/rtspin.c | 4 | ||||
-rw-r--r-- | include/litmus.h | 7 | ||||
-rw-r--r-- | src/litmus.c | 7 |
3 files changed, 15 insertions, 3 deletions
diff --git a/bin/rtspin.c b/bin/rtspin.c index 33919b1..650fcb3 100644 --- a/bin/rtspin.c +++ b/bin/rtspin.c | |||
@@ -225,7 +225,9 @@ int main(int argc, char** argv) | |||
225 | bail_out("could not migrate to target partition"); | 225 | bail_out("could not migrate to target partition"); |
226 | } | 226 | } |
227 | 227 | ||
228 | ret = sporadic_task_ns(wcet, period, 0, cpu, class, | 228 | ret = sporadic_task_ns(wcet, period, 0, |
229 | LITMUS_FP_ZERO, LITMUS_FP_ZERO, | ||
230 | cpu, class, | ||
229 | want_enforcement ? PRECISE_ENFORCEMENT | 231 | want_enforcement ? PRECISE_ENFORCEMENT |
230 | : NO_ENFORCEMENT, | 232 | : NO_ENFORCEMENT, |
231 | migrate); | 233 | migrate); |
diff --git a/include/litmus.h b/include/litmus.h index b798c92..b9e70fd 100644 --- a/include/litmus.h +++ b/include/litmus.h | |||
@@ -10,6 +10,7 @@ extern "C" { | |||
10 | * and control_page structures. | 10 | * and control_page structures. |
11 | */ | 11 | */ |
12 | #include <litmus/rt_param.h> | 12 | #include <litmus/rt_param.h> |
13 | #include <litmus/fpmath.h> | ||
13 | 14 | ||
14 | #include <sys/types.h> | 15 | #include <sys/types.h> |
15 | 16 | ||
@@ -31,20 +32,22 @@ int get_rt_task_param(pid_t pid, struct rt_task* param); | |||
31 | /* times are given in ms */ | 32 | /* times are given in ms */ |
32 | int sporadic_task( | 33 | int sporadic_task( |
33 | lt_t e, lt_t p, lt_t phase, | 34 | lt_t e, lt_t p, lt_t phase, |
35 | fp_t feedback_a, fp_t feedback_b, | ||
34 | int partition, task_class_t cls, | 36 | int partition, task_class_t cls, |
35 | budget_policy_t budget_policy, int set_cpu_set); | 37 | budget_policy_t budget_policy, int set_cpu_set); |
36 | 38 | ||
37 | /* times are given in ns */ | 39 | /* times are given in ns */ |
38 | int sporadic_task_ns( | 40 | int sporadic_task_ns( |
39 | lt_t e, lt_t p, lt_t phase, | 41 | lt_t e, lt_t p, lt_t phase, |
42 | fp_t feedback_a, fp_t feedback_b, | ||
40 | int cpu, task_class_t cls, | 43 | int cpu, task_class_t cls, |
41 | budget_policy_t budget_policy, int set_cpu_set); | 44 | budget_policy_t budget_policy, int set_cpu_set); |
42 | 45 | ||
43 | /* budget enforcement off by default in these macros */ | 46 | /* budget enforcement off by default in these macros */ |
44 | #define sporadic_global(e, p) \ | 47 | #define sporadic_global(e, p) \ |
45 | sporadic_task(e, p, 0, 0, RT_CLASS_SOFT, NO_ENFORCEMENT, 0) | 48 | sporadic_task(e, p, 0, LITMUS_FP_ZERO, LITMUS_FP_ZERO, 0, RT_CLASS_SOFT, NO_ENFORCEMENT, 0) |
46 | #define sporadic_partitioned(e, p, cpu) \ | 49 | #define sporadic_partitioned(e, p, cpu) \ |
47 | sporadic_task(e, p, 0, cpu, RT_CLASS_SOFT, NO_ENFORCEMENT, 1) | 50 | sporadic_task(e, p, 0, LITMUS_FP_ZERO, LITMUS_FP_ZERO, cpu, RT_CLASS_SOFT, NO_ENFORCEMENT, 1) |
48 | 51 | ||
49 | /* file descriptor attached shared objects support */ | 52 | /* file descriptor attached shared objects support */ |
50 | typedef enum { | 53 | typedef enum { |
diff --git a/src/litmus.c b/src/litmus.c index d3cc6bb..172afae 100644 --- a/src/litmus.c +++ b/src/litmus.c | |||
@@ -7,6 +7,8 @@ | |||
7 | 7 | ||
8 | #include <sched.h> /* for cpu sets */ | 8 | #include <sched.h> /* for cpu sets */ |
9 | 9 | ||
10 | #include <litmus/fpmath.h> | ||
11 | |||
10 | #include "litmus.h" | 12 | #include "litmus.h" |
11 | #include "internal.h" | 13 | #include "internal.h" |
12 | 14 | ||
@@ -42,14 +44,17 @@ int be_migrate_to(int target_cpu) | |||
42 | } | 44 | } |
43 | 45 | ||
44 | int sporadic_task(lt_t e, lt_t p, lt_t phase, | 46 | int sporadic_task(lt_t e, lt_t p, lt_t phase, |
47 | fp_t feedback_a, fp_t feedback_b, | ||
45 | int cpu, task_class_t cls, | 48 | int cpu, task_class_t cls, |
46 | budget_policy_t budget_policy, int set_cpu_set) | 49 | budget_policy_t budget_policy, int set_cpu_set) |
47 | { | 50 | { |
48 | return sporadic_task_ns(e * NS_PER_MS, p * NS_PER_MS, phase * NS_PER_MS, | 51 | return sporadic_task_ns(e * NS_PER_MS, p * NS_PER_MS, phase * NS_PER_MS, |
52 | feedback_a, feedback_b, | ||
49 | cpu, cls, budget_policy, set_cpu_set); | 53 | cpu, cls, budget_policy, set_cpu_set); |
50 | } | 54 | } |
51 | 55 | ||
52 | int sporadic_task_ns(lt_t e, lt_t p, lt_t phase, | 56 | int sporadic_task_ns(lt_t e, lt_t p, lt_t phase, |
57 | fp_t feedback_a, fp_t feedback_b, | ||
53 | int cpu, task_class_t cls, | 58 | int cpu, task_class_t cls, |
54 | budget_policy_t budget_policy, int set_cpu_set) | 59 | budget_policy_t budget_policy, int set_cpu_set) |
55 | { | 60 | { |
@@ -67,6 +72,8 @@ int sporadic_task_ns(lt_t e, lt_t p, lt_t phase, | |||
67 | param.cls = cls; | 72 | param.cls = cls; |
68 | param.phase = phase; | 73 | param.phase = phase; |
69 | param.budget_policy = budget_policy; | 74 | param.budget_policy = budget_policy; |
75 | param.a = feedback_a; | ||
76 | param.b = feedback_b; | ||
70 | 77 | ||
71 | if (set_cpu_set) { | 78 | if (set_cpu_set) { |
72 | ret = be_migrate_to(cpu); | 79 | ret = be_migrate_to(cpu); |