aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Brandenburg <bbb@mpi-sws.org>2014-07-16 10:52:13 -0400
committerBjoern Brandenburg <bbb@mpi-sws.org>2016-03-20 14:30:32 -0400
commitc1e58e8d55c4162a6b603c52eaa46783e6f6d9da (patch)
tree7e975b2155a4a37d369dea9ff92391b8af9e17c2
parent59a6e9efdd1b75c6e2c4a07bad361b4fa7aa741c (diff)
Add reservation creation API to plugin interface & syscalls
-rw-r--r--include/litmus/sched_plugin.h8
-rw-r--r--litmus/litmus.c10
-rw-r--r--litmus/sched_plugin.c13
3 files changed, 31 insertions, 0 deletions
diff --git a/include/litmus/sched_plugin.h b/include/litmus/sched_plugin.h
index b2bc8b5a5e71..85383aa67da7 100644
--- a/include/litmus/sched_plugin.h
+++ b/include/litmus/sched_plugin.h
@@ -103,6 +103,10 @@ typedef void (*synchronous_release_at_t)(lt_t time_zero);
103 * reservation-specific values. */ 103 * reservation-specific values. */
104typedef void (*current_budget_t)(lt_t *used_so_far, lt_t *remaining); 104typedef void (*current_budget_t)(lt_t *used_so_far, lt_t *remaining);
105 105
106/* Reservation creation/removal backends. Meaning of reservation_type and
107 * reservation_id are entirely plugin-specific. */
108typedef long (*reservation_create_t)(int reservation_type, void* __user config);
109typedef long (*reservation_destroy_t)(unsigned int reservation_id, int cpu);
106 110
107/************************ misc routines ***********************/ 111/************************ misc routines ***********************/
108 112
@@ -144,6 +148,10 @@ struct sched_plugin {
144 148
145 current_budget_t current_budget; 149 current_budget_t current_budget;
146 150
151 /* Reservation support */
152 reservation_create_t reservation_create;
153 reservation_destroy_t reservation_destroy;
154
147#ifdef CONFIG_LITMUS_LOCKING 155#ifdef CONFIG_LITMUS_LOCKING
148 /* locking protocols */ 156 /* locking protocols */
149 allocate_lock_t allocate_lock; 157 allocate_lock_t allocate_lock;
diff --git a/litmus/litmus.c b/litmus/litmus.c
index ed739082af5b..ed8e4127207e 100644
--- a/litmus/litmus.c
+++ b/litmus/litmus.c
@@ -317,6 +317,16 @@ asmlinkage long sys_null_call(cycles_t __user *ts)
317 return ret; 317 return ret;
318} 318}
319 319
320asmlinkage long sys_reservation_create(int type, void __user *config)
321{
322 return litmus->reservation_create(type, config);
323}
324
325asmlinkage long sys_reservation_destroy(unsigned int reservation_id, int cpu)
326{
327 return litmus->reservation_destroy(reservation_id, cpu);
328}
329
320/* p is a real-time task. Re-init its state as a best-effort task. */ 330/* p is a real-time task. Re-init its state as a best-effort task. */
321static void reinit_litmus_state(struct task_struct* p, int restore) 331static void reinit_litmus_state(struct task_struct* p, int restore)
322{ 332{
diff --git a/litmus/sched_plugin.c b/litmus/sched_plugin.c
index a9fe3f5e7349..4b4e1adc1a9a 100644
--- a/litmus/sched_plugin.c
+++ b/litmus/sched_plugin.c
@@ -153,6 +153,17 @@ static long litmus_dummy_allocate_lock(struct litmus_lock **lock, int type,
153 153
154#endif 154#endif
155 155
156static long litmus_dummy_reservation_create(
157 int reservation_type,
158 void* __user config)
159{
160 return -ENOSYS;
161}
162
163static long litmus_dummy_reservation_destroy(unsigned int reservation_id, int cpu)
164{
165 return -ENOSYS;
166}
156 167
157/* The default scheduler plugin. It doesn't do anything and lets Linux do its 168/* The default scheduler plugin. It doesn't do anything and lets Linux do its
158 * job. 169 * job.
@@ -218,6 +229,8 @@ int register_sched_plugin(struct sched_plugin* plugin)
218 CHECK(admit_task); 229 CHECK(admit_task);
219 CHECK(fork_task); 230 CHECK(fork_task);
220 CHECK(synchronous_release_at); 231 CHECK(synchronous_release_at);
232 CHECK(reservation_destroy);
233 CHECK(reservation_create);
221 234
222 if (!plugin->wait_for_release_at) 235 if (!plugin->wait_for_release_at)
223 plugin->wait_for_release_at = default_wait_for_release_at; 236 plugin->wait_for_release_at = default_wait_for_release_at;