diff options
author | John M. Calandrino <jmc@jupiter-cs.cs.unc.edu> | 2007-04-24 15:48:52 -0400 |
---|---|---|
committer | John M. Calandrino <jmc@jupiter-cs.cs.unc.edu> | 2007-04-24 15:48:52 -0400 |
commit | 3421ae6ac693210251335faefda997b0ccbde16d (patch) | |
tree | 37b53ae7dd78a81b654cebbcee430418f7a00b8d /arch | |
parent | 92f94ecce15c3b22dc07ceba9422e511dbfa0b19 (diff) |
Fixed GSN-EDF to handle correct wakeup of tasks that just exited a
semaphore.
Diffstat (limited to 'arch')
-rw-r--r-- | arch/i386/kernel/pi_sem_syscalls.c | 1 | ||||
-rw-r--r-- | arch/i386/kernel/sem_syscalls.c | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/arch/i386/kernel/pi_sem_syscalls.c b/arch/i386/kernel/pi_sem_syscalls.c index 85f211f0d8..72fd67e6e5 100644 --- a/arch/i386/kernel/pi_sem_syscalls.c +++ b/arch/i386/kernel/pi_sem_syscalls.c | |||
@@ -130,6 +130,7 @@ asmlinkage long sys_pi_sema_free(pi_sema_id sem_id) | |||
130 | list_for_each_safe(tmp, next, &pi_sems[sem_id].wait.task_list) { | 130 | list_for_each_safe(tmp, next, &pi_sems[sem_id].wait.task_list) { |
131 | wait_queue_t *curr = list_entry(tmp, wait_queue_t, task_list); | 131 | wait_queue_t *curr = list_entry(tmp, wait_queue_t, task_list); |
132 | list_del(tmp); | 132 | list_del(tmp); |
133 | set_rt_flags((struct task_struct*)curr->private, RT_F_EXIT_SEM); | ||
133 | curr->func(curr, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, | 134 | curr->func(curr, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, |
134 | 0, NULL); | 135 | 0, NULL); |
135 | } | 136 | } |
diff --git a/arch/i386/kernel/sem_syscalls.c b/arch/i386/kernel/sem_syscalls.c index 2bdbc5fd96..8b3270d0d4 100644 --- a/arch/i386/kernel/sem_syscalls.c +++ b/arch/i386/kernel/sem_syscalls.c | |||
@@ -67,6 +67,7 @@ asmlinkage long sys_sema_free(sema_id sem_id) | |||
67 | list_for_each_safe(tmp, next, &sems[sem_id].wait.task_list) { | 67 | list_for_each_safe(tmp, next, &sems[sem_id].wait.task_list) { |
68 | wait_queue_t *curr = list_entry(tmp, wait_queue_t, task_list); | 68 | wait_queue_t *curr = list_entry(tmp, wait_queue_t, task_list); |
69 | list_del(tmp); | 69 | list_del(tmp); |
70 | set_rt_flags((struct task_struct*)curr->private, RT_F_EXIT_SEM); | ||
70 | curr->func(curr, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, | 71 | curr->func(curr, TASK_UNINTERRUPTIBLE | TASK_INTERRUPTIBLE, |
71 | 0, NULL); | 72 | 0, NULL); |
72 | } | 73 | } |