aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386
diff options
context:
space:
mode:
authorJohn M. Calandrino <jmc@jupiter-cs.cs.unc.edu>2007-04-24 14:33:41 -0400
committerJohn M. Calandrino <jmc@jupiter-cs.cs.unc.edu>2007-04-24 14:33:41 -0400
commit5cffcda787304b33ff5bf4f9ee75b99128ccdf15 (patch)
tree80fdcad28316656b348af696250ad606228b2136 /arch/i386
parent9866b27f4820219f939d4d2e8bc2cdce5c6797e9 (diff)
Fixed the PI issue with down calls, should work now.
Diffstat (limited to 'arch/i386')
-rw-r--r--arch/i386/kernel/pi_sem_syscalls.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/i386/kernel/pi_sem_syscalls.c b/arch/i386/kernel/pi_sem_syscalls.c
index cab8270984..58400afbef 100644
--- a/arch/i386/kernel/pi_sem_syscalls.c
+++ b/arch/i386/kernel/pi_sem_syscalls.c
@@ -71,10 +71,23 @@ void __sys_pi_down(struct pi_semaphore * sem)
71 71
72asmlinkage long sys_pi_down(pi_sema_id sem_id) 72asmlinkage long sys_pi_down(pi_sema_id sem_id)
73{ 73{
74 unsigned long flags;
75
74 if (sem_id < 0 || sem_id >= MAX_PI_SEMAPHORES) 76 if (sem_id < 0 || sem_id >= MAX_PI_SEMAPHORES)
75 return -EINVAL; 77 return -EINVAL;
76 78
77 __sys_pi_down(&pi_sems[sem_id]); 79 __sys_pi_down(&pi_sems[sem_id]);
80
81 /* Update inherited priority if required. */
82 spin_lock_irqsave(&pi_sems[sem_id].wait.lock, flags);
83 if (!current->rt_params.inh_task) {
84 pi_sems[sem_id].holder = current;
85 current->rt_params.inh_task = current;
86 if (pi_sems[sem_id].hp_sem_task)
87 curr_sched_plugin->inherit_priority(
88 &pi_sems[sem_id], pi_sems[sem_id].hp_sem_task);
89 }
90 spin_unlock_irqrestore(&pi_sems[sem_id].wait.lock, flags);
78 return 0; 91 return 0;
79} 92}
80 93