diff options
author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2008-05-01 12:29:05 -0400 |
---|---|---|
committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2008-05-01 12:29:05 -0400 |
commit | 4e492c03dbe0a29fd21569fe6c1295c73f1f403f (patch) | |
tree | d843c17d8a9f7a7bb726d8d04b5bbf4653a7cc7e | |
parent | 7d9d731677836b9e8e71271f8dd01bb35ab62062 (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.S | 4 | ||||
-rw-r--r-- | include/asm-x86/unistd_32.h | 6 | ||||
-rw-r--r-- | include/litmus/fdso.h | 4 | ||||
-rw-r--r-- | litmus/fdso.c | 4 | ||||
-rw-r--r-- | litmus/fmlp.c | 76 |
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 @@ | |||
16 | typedef enum { | 16 | typedef 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 | ||
21 | extern struct fdso_ops pi_sem_ops; | 21 | extern struct fdso_ops fmlp_sem_ops; |
22 | extern struct fdso_ops srp_sem_ops; | 22 | extern struct fdso_ops srp_sem_ops; |
23 | 23 | ||
24 | static const struct fdso_ops* fdso_ops[] = { | 24 | static 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 | ||
23 | static void* create_pi_semaphore(void) | 23 | static 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 | ||
41 | static void destroy_pi_semaphore(void* sem) | 41 | static 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 | |||
48 | static 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 | ||
47 | struct fdso_ops pi_sem_ops = { | 54 | struct 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 | ||
52 | struct wq_pair { | 60 | struct 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 | ||
123 | int do_pi_down(struct pi_semaphore* sem) | 131 | int 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 | ||
182 | void do_pi_up(struct pi_semaphore* sem) | 190 | void 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 | ||
198 | asmlinkage long sys_pi_down(int sem_od) | 206 | asmlinkage 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 | ||
221 | asmlinkage long sys_pi_up(int sem_od) | 229 | asmlinkage 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 | /* | ||
244 | asmlinkage 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 | |||