summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-03-25 12:26:51 +0300
committerIngo Molnar <mingo@elte.hu>2009-03-25 12:26:51 +0300
commitb6d9842258d1ba27fb978cded74eb4b6aa15edc8 (patch)
tree0fc02ca81720b6e4d19d372e346faad47f4f612c /kernel
parent67aa0f767af488a7f1e41cccb4f7a4893f24a1ab (diff)
parent8e0ee43bc2c3e19db56a4adaa9a9b04ce885cd84 (diff)
downloadlinux-b6d9842258d1ba27fb978cded74eb4b6aa15edc8.tar.xz
Merge branch 'sched/cleanups'; commit 'v2.6.29' into sched/core
Diffstat (limited to 'kernel')
-rw-r--r--kernel/signal.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/signal.c b/kernel/signal.c
index 2a74fe87c0dd..1c8814481a11 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1575,7 +1575,15 @@ static void ptrace_stop(int exit_code, int clear_code, siginfo_t *info)
read_lock(&tasklist_lock);
if (may_ptrace_stop()) {
do_notify_parent_cldstop(current, CLD_TRAPPED);
+ /*
+ * Don't want to allow preemption here, because
+ * sys_ptrace() needs this task to be inactive.
+ *
+ * XXX: implement read_unlock_no_resched().
+ */
+ preempt_disable();
read_unlock(&tasklist_lock);
+ preempt_enable_no_resched();
schedule();
} else {
/*