From 9b85a6e707adff71ea3b329756f2b854fbdc6b0b Mon Sep 17 00:00:00 2001 From: "Bjoern B. Brandenburg" Date: Fri, 2 May 2008 11:18:56 -0400 Subject: Add best effort task migration, so that we can support PSN-EDF. --- src/litmus.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/litmus.c b/src/litmus.c index 4fe6572..8f03f4c 100644 --- a/src/litmus.c +++ b/src/litmus.c @@ -5,6 +5,8 @@ #include #include +#include /* for cpu sets */ + #include "litmus.h" #include "internal.h" @@ -29,15 +31,30 @@ task_class_t str2class(const char* str) #define NS_PER_MS 1000000 +/* only for best-effort execution: migrate to target_cpu */ +int be_migrate_to(int target_cpu) +{ + cpu_set_t cpu_set; + + CPU_ZERO(&cpu_set); + CPU_SET(target_cpu, &cpu_set); + return sched_setaffinity(0, sizeof(cpu_set_t), &cpu_set); +} + int sporadic_task(lt_t e, lt_t p, lt_t phase, - int cpu, task_class_t cls) + int cpu, task_class_t cls, int set_cpu_set) { struct rt_task param; + int ret; param.exec_cost = e * NS_PER_MS; param.period = p * NS_PER_MS; param.cpu = cpu; param.cls = cls; param.phase = phase; + if (set_cpu_set) { + ret = be_migrate_to(cpu); + check("migrate to cpu"); + } return set_rt_task_param(gettid(), ¶m); } -- cgit v1.2.2