aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2006-06-27 05:55:00 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-27 20:32:47 -0400
commite74c69f46d93d29eea0ad8647863d1c6488f0f55 (patch)
tree5537d5a60eec3985de11cad4476ed95025051721 /kernel/sched.c
parenta1583d3e83cae1c58870602efc6328c34b644c01 (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>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c4
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