aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2008-05-12 12:54:50 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2008-05-12 12:54:50 -0400
commit85cab4f981e4ab90f20bf36031f6e3242f33ad7a (patch)
tree5ab9438de09cd903556f712ec716a04db56cb778
parent72d790931b605257f4be4d1b7240981711ab3717 (diff)
introduce release_at callback to LITMUS plugin interface
PFAIR needs to do things a bit differently. This callback will allow plugins to handle synchronous releases differently.
-rw-r--r--include/litmus/sched_plugin.h3
-rw-r--r--litmus/sched_plugin.c4
-rw-r--r--litmus/sync.c3
3 files changed, 9 insertions, 1 deletions
diff --git a/include/litmus/sched_plugin.h b/include/litmus/sched_plugin.h
index 872a7cbff3..5b4b430a5b 100644
--- a/include/litmus/sched_plugin.h
+++ b/include/litmus/sched_plugin.h
@@ -81,6 +81,8 @@ typedef long (*complete_job_t) (void);
81 81
82typedef long (*admit_task_t)(struct task_struct* tsk); 82typedef long (*admit_task_t)(struct task_struct* tsk);
83 83
84typedef void (*release_at_t)(struct task_struct *t, lt_t start);
85
84struct sched_plugin { 86struct sched_plugin {
85 struct list_head list; 87 struct list_head list;
86 /* basic info */ 88 /* basic info */
@@ -95,6 +97,7 @@ struct sched_plugin {
95 97
96 /* syscall backend */ 98 /* syscall backend */
97 complete_job_t complete_job; 99 complete_job_t complete_job;
100 release_at_t release_at;
98 101
99 /* task state changes */ 102 /* task state changes */
100 admit_task_t admit_task; 103 admit_task_t admit_task;
diff --git a/litmus/sched_plugin.c b/litmus/sched_plugin.c
index f7eb116ee4..dbf709ee5e 100644
--- a/litmus/sched_plugin.c
+++ b/litmus/sched_plugin.c
@@ -10,6 +10,7 @@
10#include <litmus/litmus.h> 10#include <litmus/litmus.h>
11#include <litmus/sched_plugin.h> 11#include <litmus/sched_plugin.h>
12 12
13#include <litmus/jobs.h>
13 14
14/************************************************************* 15/*************************************************************
15 * Dummy plugin functions * 16 * Dummy plugin functions *
@@ -129,6 +130,9 @@ int register_sched_plugin(struct sched_plugin* plugin)
129 CHECK(pi_block); 130 CHECK(pi_block);
130 CHECK(admit_task); 131 CHECK(admit_task);
131 132
133 if (!plugin->release_at)
134 plugin->release_at = release_at;
135
132 spin_lock(&sched_plugins_lock); 136 spin_lock(&sched_plugins_lock);
133 list_add(&plugin->list, &sched_plugins); 137 list_add(&plugin->list, &sched_plugins);
134 spin_unlock(&sched_plugins_lock); 138 spin_unlock(&sched_plugins_lock);
diff --git a/litmus/sync.c b/litmus/sync.c
index 7c6ff2f03f..c16f1dd2ab 100644
--- a/litmus/sync.c
+++ b/litmus/sync.c
@@ -11,6 +11,7 @@
11#include <linux/completion.h> 11#include <linux/completion.h>
12 12
13#include <litmus/litmus.h> 13#include <litmus/litmus.h>
14#include <litmus/sched_plugin.h>
14#include <litmus/jobs.h> 15#include <litmus/jobs.h>
15 16
16static DECLARE_COMPLETION(ts_release); 17static DECLARE_COMPLETION(ts_release);
@@ -47,7 +48,7 @@ static long do_release_ts(lt_t start)
47 struct __wait_queue, 48 struct __wait_queue,
48 task_list)->private; 49 task_list)->private;
49 task_count++; 50 task_count++;
50 release_at(t, start + t->rt_param.task_params.phase); 51 litmus->release_at(t, start + t->rt_param.task_params.phase);
51 } 52 }
52 53
53 spin_unlock_irqrestore(&ts_release.wait.lock, flags); 54 spin_unlock_irqrestore(&ts_release.wait.lock, flags);