From e9c900fae35e4e4730469e189ff17bf30518346a Mon Sep 17 00:00:00 2001 From: Glenn Elliott Date: Thu, 20 May 2010 14:17:58 -0400 Subject: Support budget enforcement policies. Allows tasks to specify how their execution budgets should be enforced: NO_ENFORCEMENT, QUANTUM_ENFORCEMENT, and PRECISE_ENFORCEMENT (unsupported). NOTE: Users of NO_ENFORCEMENT must call sleep_next_period() at the end of every job to signal to the kernel that its job is complete. --- src/litmus.c | 10 +++++++--- src/task.c | 3 +++ 2 files changed, 10 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/litmus.c b/src/litmus.c index 5f98b97..f71f337 100644 --- a/src/litmus.c +++ b/src/litmus.c @@ -42,14 +42,16 @@ int be_migrate_to(int target_cpu) } int sporadic_task(lt_t e, lt_t p, lt_t phase, - int cpu, task_class_t cls, int set_cpu_set) + int cpu, task_class_t cls, + budget_policy_t budget_policy, int set_cpu_set) { return sporadic_task_ns(e * NS_PER_MS, p * NS_PER_MS, phase * NS_PER_MS, - cpu, cls, set_cpu_set); + cpu, cls, budget_policy, set_cpu_set); } int sporadic_task_ns(lt_t e, lt_t p, lt_t phase, - int cpu, task_class_t cls, int set_cpu_set) + int cpu, task_class_t cls, + budget_policy_t budget_policy, int set_cpu_set) { struct rt_task param; int ret; @@ -58,6 +60,8 @@ int sporadic_task_ns(lt_t e, lt_t p, lt_t phase, param.cpu = cpu; param.cls = cls; param.phase = phase; + param.budget_policy = budget_policy; + if (set_cpu_set) { ret = be_migrate_to(cpu); check("migrate to cpu"); diff --git a/src/task.c b/src/task.c index f9e4ccf..4d237bd 100644 --- a/src/task.c +++ b/src/task.c @@ -49,6 +49,9 @@ int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period, params.exec_cost = wcet; params.cls = class; params.phase = 0; + /* enforce budget for tasks that might not use sleep_next_period() */ + params.budget_policy = QUANTUM_ENFORCEMENT; + return __launch_rt_task(rt_prog, arg, (rt_setup_fn_t) set_rt_task_param, ¶ms); } -- cgit v1.2.2