aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Elliott <gelliott@cs.unc.edu>2010-11-26 17:08:54 -0500
committerGlenn Elliott <gelliott@cs.unc.edu>2010-11-26 17:08:54 -0500
commite83917699a930e63a34a8b112258b1d5e4031048 (patch)
treeb43cbbcccda974be236724daea1035ad5f736d8c
parentc3566e210d4e466e97d84d4a190760c4e91766ac (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.c4
-rw-r--r--include/litmus.h7
-rw-r--r--src/litmus.c7
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 */
32int sporadic_task( 33int 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 */
38int sporadic_task_ns( 40int 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 */
50typedef enum { 53typedef 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
44int sporadic_task(lt_t e, lt_t p, lt_t phase, 46int 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
52int sporadic_task_ns(lt_t e, lt_t p, lt_t phase, 56int 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);