diff options
author | John M. Calandrino <jmc@jupiter-cs.cs.unc.edu> | 2007-04-24 14:33:41 -0400 |
---|---|---|
committer | John M. Calandrino <jmc@jupiter-cs.cs.unc.edu> | 2007-04-24 14:33:41 -0400 |
commit | 5cffcda787304b33ff5bf4f9ee75b99128ccdf15 (patch) | |
tree | 80fdcad28316656b348af696250ad606228b2136 /arch | |
parent | 9866b27f4820219f939d4d2e8bc2cdce5c6797e9 (diff) |
Fixed the PI issue with down calls, should work now.
Diffstat (limited to 'arch')
-rw-r--r-- | arch/i386/kernel/pi_sem_syscalls.c | 13 |
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 | ||
72 | asmlinkage long sys_pi_down(pi_sema_id sem_id) | 72 | asmlinkage 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 | ||