diff options
| author | Jeremy Erickson <jerickso@cs.unc.edu> | 2013-05-02 17:21:47 -0400 |
|---|---|---|
| committer | Jeremy Erickson <jerickso@cs.unc.edu> | 2013-05-02 17:21:47 -0400 |
| commit | ece0c6e7b111f2761066b66ea1b34cb2854b3752 (patch) | |
| tree | addbd65616d41d1d367d6a2f588ec14bcbc9343a /src | |
| parent | 82ad501859febc4285882d8268982a21c40e84d9 (diff) | |
Add library support for creating EDF-os tasks
Diffstat (limited to 'src')
| -rw-r--r-- | src/litmus.c | 28 | ||||
| -rw-r--r-- | src/task.c | 30 |
2 files changed, 58 insertions, 0 deletions
diff --git a/src/litmus.c b/src/litmus.c index c0dae95..b0416c4 100644 --- a/src/litmus.c +++ b/src/litmus.c | |||
| @@ -107,6 +107,34 @@ int sporadic_task_ns_edffm(lt_t e, lt_t p, lt_t phase, int cpu, | |||
| 107 | return set_rt_task_param(gettid(), ¶m); | 107 | return set_rt_task_param(gettid(), ¶m); |
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | int sporadic_task_ns_edfos(lt_t e, lt_t p, lt_t phase, | ||
| 111 | lt_t fracs[][2], task_class_t cls, | ||
| 112 | budget_policy_t budget_policy) | ||
| 113 | { | ||
| 114 | struct rt_task param; | ||
| 115 | struct edfos_params os; | ||
| 116 | int ret, i; | ||
| 117 | os.migrat = 0; | ||
| 118 | os.first_cpu = UINT_MAX; | ||
| 119 | param.exec_cost = e; | ||
| 120 | param.period = p; | ||
| 121 | for (i = 0; i < NR_CPUS; i++) { | ||
| 122 | if (fracs[i][0] > 0) { | ||
| 123 | os.migrat++; | ||
| 124 | if (os.first_cpu == UINT_MAX) | ||
| 125 | os.first_cpu = i; | ||
| 126 | } | ||
| 127 | os.fraction[i][0] = fracs[i][0]; | ||
| 128 | os.fraction[i][1] = fracs[i][1]; | ||
| 129 | } | ||
| 130 | param.semi_part.os = os; | ||
| 131 | param.cls = cls; | ||
| 132 | param.phase = phase; | ||
| 133 | param.budget_policy = budget_policy; | ||
| 134 | |||
| 135 | return set_rt_task_param(gettid(), ¶m); | ||
| 136 | } | ||
| 137 | |||
| 110 | int sporadic_task_ns_npsf(lt_t e, lt_t p, lt_t phase, | 138 | int sporadic_task_ns_npsf(lt_t e, lt_t p, lt_t phase, |
| 111 | int cpu, task_class_t cls, int npsf_id, | 139 | int cpu, task_class_t cls, int npsf_id, |
| 112 | budget_policy_t budget_policy, int set_cpu_set) | 140 | budget_policy_t budget_policy, int set_cpu_set) |
| @@ -71,6 +71,36 @@ int __create_rt_task_edffm(rt_fn_t rt_prog, void *arg, int cpu, int wcet, | |||
| 71 | (rt_setup_fn_t) set_rt_task_param, ¶ms); | 71 | (rt_setup_fn_t) set_rt_task_param, ¶ms); |
| 72 | } | 72 | } |
| 73 | 73 | ||
| 74 | int __create_rt_task_edfos(rt_fn_t rt_prog, void *arg, int wcet, | ||
| 75 | int period, lt_t fracs[][2], task_class_t class) | ||
| 76 | { | ||
| 77 | struct rt_task params; | ||
| 78 | struct edfos_params os; | ||
| 79 | int i; | ||
| 80 | params.period = period; | ||
| 81 | params.exec_cost = wcet; | ||
| 82 | params.cls = class; | ||
| 83 | params.phase = 0; | ||
| 84 | /* enforce budget for tasks that might not use sleep_next_period() */ | ||
| 85 | params.budget_policy = QUANTUM_ENFORCEMENT; | ||
| 86 | |||
| 87 | os.migrat = 0; | ||
| 88 | os.first_cpu = UINT_MAX; | ||
| 89 | for (i = 0; i < NR_CPUS; i++) { | ||
| 90 | if (fracs[i][0] > 0) { | ||
| 91 | os.migrat++; | ||
| 92 | if (os.first_cpu == UINT_MAX) | ||
| 93 | os.first_cpu = i; | ||
| 94 | } | ||
| 95 | os.fraction[i][0] = fracs[i][0]; | ||
| 96 | os.fraction[i][1] = fracs[i][1]; | ||
| 97 | } | ||
| 98 | params.semi_part.os = os; | ||
| 99 | |||
| 100 | return __launch_rt_task(rt_prog, arg, | ||
| 101 | (rt_setup_fn_t) set_rt_task_param, ¶ms); | ||
| 102 | } | ||
| 103 | |||
| 74 | int __create_rt_task_npsf(rt_fn_t rt_prog, void *arg, int cpu, int wcet, | 104 | int __create_rt_task_npsf(rt_fn_t rt_prog, void *arg, int cpu, int wcet, |
| 75 | int period, int npsf_id, task_class_t class) | 105 | int period, int npsf_id, task_class_t class) |
| 76 | { | 106 | { |
