diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2006-06-27 05:55:00 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-27 20:32:47 -0400 |
commit | e74c69f46d93d29eea0ad8647863d1c6488f0f55 (patch) | |
tree | 5537d5a60eec3985de11cad4476ed95025051721 | |
parent | a1583d3e83cae1c58870602efc6328c34b644c01 (diff) |
[PATCH] Drop tasklist lock in do_sched_setscheduler
There is no need to hold tasklist_lock across the setscheduler call, when
we pin the task structure with get_task_struct(). Interrupts are disabled
in setscheduler anyway and the permission checks do not need interrupts
disabled.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Nick Piggin <nickpiggin@yahoo.com.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | kernel/sched.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 08431f07a999..7a30addfd235 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -4091,8 +4091,10 @@ do_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param) | |||
4091 | read_unlock_irq(&tasklist_lock); | 4091 | read_unlock_irq(&tasklist_lock); |
4092 | return -ESRCH; | 4092 | return -ESRCH; |
4093 | } | 4093 | } |
4094 | retval = sched_setscheduler(p, policy, &lparam); | 4094 | get_task_struct(p); |
4095 | read_unlock_irq(&tasklist_lock); | 4095 | read_unlock_irq(&tasklist_lock); |
4096 | retval = sched_setscheduler(p, policy, &lparam); | ||
4097 | put_task_struct(p); | ||
4096 | return retval; | 4098 | return retval; |
4097 | } | 4099 | } |
4098 | 4100 | ||