aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2008-05-01 12:29:05 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2008-05-01 12:29:05 -0400
commit4e492c03dbe0a29fd21569fe6c1295c73f1f403f (patch)
treed843c17d8a9f7a7bb726d8d04b5bbf4653a7cc7e
parent7d9d731677836b9e8e71271f8dd01bb35ab62062 (diff)
FMLP: rename pi->fmlp
pi is confusing, there are many PI schemes in the world. We implement the FMLP, thus we should label it as such.
-rw-r--r--arch/x86/kernel/syscall_table_32.S4
-rw-r--r--include/asm-x86/unistd_32.h6
-rw-r--r--include/litmus/fdso.h4
-rw-r--r--litmus/fdso.c4
-rw-r--r--litmus/fmlp.c76
5 files changed, 30 insertions, 64 deletions
diff --git a/arch/x86/kernel/syscall_table_32.S b/arch/x86/kernel/syscall_table_32.S
index d8106dca4e..aee6fb9b79 100644
--- a/arch/x86/kernel/syscall_table_32.S
+++ b/arch/x86/kernel/syscall_table_32.S
@@ -332,8 +332,8 @@ ENTRY(sys_call_table)
332 .long sys_exit_np 332 .long sys_exit_np
333 .long sys_od_open /* 330 */ 333 .long sys_od_open /* 330 */
334 .long sys_od_close 334 .long sys_od_close
335 .long sys_pi_down 335 .long sys_fmlp_down
336 .long sys_pi_up 336 .long sys_fmlp_up
337 .long sys_srp_down 337 .long sys_srp_down
338 .long sys_srp_up /* 335 */ 338 .long sys_srp_up /* 335 */
339 .long sys_reg_task_srp_sem 339 .long sys_reg_task_srp_sem
diff --git a/include/asm-x86/unistd_32.h b/include/asm-x86/unistd_32.h
index dbd936a38d..d2bc5e56b0 100644
--- a/include/asm-x86/unistd_32.h
+++ b/include/asm-x86/unistd_32.h
@@ -337,8 +337,8 @@
337#define __NR_exit_np 329 337#define __NR_exit_np 329
338#define __NR_od_open 330 338#define __NR_od_open 330
339#define __NR_od_close 331 339#define __NR_od_close 331
340#define __NR_pi_down 332 340#define __NR_fmlp_down 332
341#define __NR_pi_up 333 341#define __NR_fmlp_up 333
342#define __NR_srp_down 334 342#define __NR_srp_down 334
343#define __NR_srp_up 335 343#define __NR_srp_up 335
344#define __NR_reg_task_srp_sem 336 344#define __NR_reg_task_srp_sem 336
@@ -349,7 +349,7 @@
349 349
350#ifdef __KERNEL__ 350#ifdef __KERNEL__
351 351
352#define NR_syscalls 339 352#define NR_syscalls 340
353 353
354#define __ARCH_WANT_IPC_PARSE_VERSION 354#define __ARCH_WANT_IPC_PARSE_VERSION
355#define __ARCH_WANT_OLD_READDIR 355#define __ARCH_WANT_OLD_READDIR
diff --git a/include/litmus/fdso.h b/include/litmus/fdso.h
index 5a783555e7..286e10f86d 100644
--- a/include/litmus/fdso.h
+++ b/include/litmus/fdso.h
@@ -16,7 +16,7 @@
16typedef enum { 16typedef enum {
17 MIN_OBJ_TYPE = 0, 17 MIN_OBJ_TYPE = 0,
18 18
19 PI_SEM = 0, 19 FMLP_SEM = 0,
20 SRP_SEM = 1, 20 SRP_SEM = 1,
21 21
22 MAX_OBJ_TYPE = 1 22 MAX_OBJ_TYPE = 1
@@ -61,7 +61,7 @@ static inline void* od_lookup(int od, obj_type_t type)
61 return e && e->obj->type == type ? e->obj->obj : NULL; 61 return e && e->obj->type == type ? e->obj->obj : NULL;
62} 62}
63 63
64#define lookup_pi_sem(od) ((struct pi_semaphore*) od_lookup(od, PI_SEM)) 64#define lookup_fmlp_sem(od)((struct pi_semaphore*) od_lookup(od, FMLP_SEM))
65#define lookup_srp_sem(od) ((struct srp_semaphore*) od_lookup(od, SRP_SEM)) 65#define lookup_srp_sem(od) ((struct srp_semaphore*) od_lookup(od, SRP_SEM))
66#define lookup_ics(od) ((struct ics*) od_lookup(od, ICS_ID)) 66#define lookup_ics(od) ((struct ics*) od_lookup(od, ICS_ID))
67 67
diff --git a/litmus/fdso.c b/litmus/fdso.c
index ca9557d877..966b6e9e87 100644
--- a/litmus/fdso.c
+++ b/litmus/fdso.c
@@ -18,11 +18,11 @@
18 18
19#include <litmus/fdso.h> 19#include <litmus/fdso.h>
20 20
21extern struct fdso_ops pi_sem_ops; 21extern struct fdso_ops fmlp_sem_ops;
22extern struct fdso_ops srp_sem_ops; 22extern struct fdso_ops srp_sem_ops;
23 23
24static const struct fdso_ops* fdso_ops[] = { 24static const struct fdso_ops* fdso_ops[] = {
25 &pi_sem_ops, 25 &fmlp_sem_ops,
26 &srp_sem_ops, 26 &srp_sem_ops,
27}; 27};
28 28
diff --git a/litmus/fmlp.c b/litmus/fmlp.c
index b40e42e9e0..1c359c21c2 100644
--- a/litmus/fmlp.c
+++ b/litmus/fmlp.c
@@ -20,7 +20,7 @@
20/* PRIORITY INHERITANCE */ 20/* PRIORITY INHERITANCE */
21/* ************************************************************************** */ 21/* ************************************************************************** */
22 22
23static void* create_pi_semaphore(void) 23static void* create_fmlp_semaphore(void)
24{ 24{
25 struct pi_semaphore* sem; 25 struct pi_semaphore* sem;
26 int i; 26 int i;
@@ -38,15 +38,23 @@ static void* create_pi_semaphore(void)
38 return sem; 38 return sem;
39} 39}
40 40
41static void destroy_pi_semaphore(void* sem) 41static int open_fmlp_semaphore(struct od_table_entry* entry, void* __user arg)
42{
43 if (!fmlp_active())
44 return -EBUSY;
45 return 0;
46}
47
48static void destroy_fmlp_semaphore(void* sem)
42{ 49{
43 /* XXX assert invariants */ 50 /* XXX assert invariants */
44 kfree(sem); 51 kfree(sem);
45} 52}
46 53
47struct fdso_ops pi_sem_ops = { 54struct fdso_ops fmlp_sem_ops = {
48 .create = create_pi_semaphore, 55 .create = create_fmlp_semaphore,
49 .destroy = destroy_pi_semaphore 56 .open = open_fmlp_semaphore,
57 .destroy = destroy_fmlp_semaphore
50}; 58};
51 59
52struct wq_pair { 60struct wq_pair {
@@ -120,7 +128,7 @@ int edf_set_hp_cpu_task(struct pi_semaphore *sem, int cpu)
120 return ret; 128 return ret;
121} 129}
122 130
123int do_pi_down(struct pi_semaphore* sem) 131int do_fmlp_down(struct pi_semaphore* sem)
124{ 132{
125 unsigned long flags; 133 unsigned long flags;
126 struct task_struct *tsk = current; 134 struct task_struct *tsk = current;
@@ -179,7 +187,7 @@ int do_pi_down(struct pi_semaphore* sem)
179 return suspended; 187 return suspended;
180} 188}
181 189
182void do_pi_up(struct pi_semaphore* sem) 190void do_fmlp_up(struct pi_semaphore* sem)
183{ 191{
184 unsigned long flags; 192 unsigned long flags;
185 193
@@ -195,7 +203,7 @@ void do_pi_up(struct pi_semaphore* sem)
195 spin_unlock_irqrestore(&sem->wait.lock, flags); 203 spin_unlock_irqrestore(&sem->wait.lock, flags);
196} 204}
197 205
198asmlinkage long sys_pi_down(int sem_od) 206asmlinkage long sys_fmlp_down(int sem_od)
199{ 207{
200 long ret = 0; 208 long ret = 0;
201 struct pi_semaphore * sem; 209 struct pi_semaphore * sem;
@@ -204,9 +212,9 @@ asmlinkage long sys_pi_down(int sem_od)
204 preempt_disable(); 212 preempt_disable();
205 TS_PI_DOWN_START; 213 TS_PI_DOWN_START;
206 214
207 sem = lookup_pi_sem(sem_od); 215 sem = lookup_fmlp_sem(sem_od);
208 if (sem) 216 if (sem)
209 suspended = do_pi_down(sem); 217 suspended = do_fmlp_down(sem);
210 else 218 else
211 ret = -EINVAL; 219 ret = -EINVAL;
212 220
@@ -218,7 +226,7 @@ asmlinkage long sys_pi_down(int sem_od)
218 return ret; 226 return ret;
219} 227}
220 228
221asmlinkage long sys_pi_up(int sem_od) 229asmlinkage long sys_fmlp_up(int sem_od)
222{ 230{
223 long ret = 0; 231 long ret = 0;
224 struct pi_semaphore * sem; 232 struct pi_semaphore * sem;
@@ -226,9 +234,9 @@ asmlinkage long sys_pi_up(int sem_od)
226 preempt_disable(); 234 preempt_disable();
227 TS_PI_UP_START; 235 TS_PI_UP_START;
228 236
229 sem = lookup_pi_sem(sem_od); 237 sem = lookup_fmlp_sem(sem_od);
230 if (sem) 238 if (sem)
231 do_pi_up(sem); 239 do_fmlp_up(sem);
232 else 240 else
233 ret = -EINVAL; 241 ret = -EINVAL;
234 242
@@ -238,45 +246,3 @@ asmlinkage long sys_pi_up(int sem_od)
238 246
239 return ret; 247 return ret;
240} 248}
241
242/* Clear wait queue and wakeup waiting tasks, and free semaphore. */
243/*
244asmlinkage long sys_pi_sema_free(int sem_id)
245{
246 struct list_head *tmp, *next;
247 unsigned long flags;
248
249 if (sem_id < 0 || sem_id >= MAX_PI_SEMAPHORES)
250 return -EINVAL;
251
252 if (!pi_sems[sem_id].used)
253 return -EINVAL;
254
255 spin_lock_irqsave(&pi_sems[sem_id].wait.lock, flags);
256 if (waitqueue_active(&pi_sems[sem_id].wait)) {
257 list_for_each_safe(tmp, next,
258 &pi_sems[sem_id].wait.task_list) {
259 wait_queue_t *curr = list_entry(tmp, wait_queue_t,
260 task_list);
261 list_del(tmp);
262 set_rt_flags((struct task_struct*)curr->private,
263 RT_F_EXIT_SEM);
264 curr->func(curr,
265 TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE,
266 0, NULL);
267 }
268 }
269
270 spin_unlock_irqrestore(&pi_sems[sem_id].wait.lock, flags);
271 pi_sems[sem_id].used = 0;
272
273 return 0;
274}
275*/
276
277
278
279/* ************************************************************************** */
280
281
282