summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-12-01 21:08:36 (GMT)
committerLinus Torvalds <torvalds@linux-foundation.org>2012-12-01 21:08:36 (GMT)
commitb3c3a9cf2a28ee4a8d0b62e2e58c61e9ca9bb47b (patch)
tree4066d1bcc600dfde34fd447ee4acdc89e40c3826
parent455e987c0c2eb2c9045dc854559474cf41509965 (diff)
parent745040347d7e8e7b47e3790de76423d9eab474eb (diff)
downloadlinux-fsl-qoriq-b3c3a9cf2a28ee4a8d0b62e2e58c61e9ca9bb47b.tar.xz
Merge branch 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull RCU fix from Ingo Molnar: "Fix leaking RCU extended quiescent state, which might trigger warnings and mess up the extended quiescent state tracking logic into thinking that we are in "RCU user mode" while we aren't." * 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: rcu: Fix unrecovered RCU user mode in syscall_trace_leave()
-rw-r--r--arch/x86/kernel/ptrace.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index 5e0596b..974b67e 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -1541,6 +1541,13 @@ void syscall_trace_leave(struct pt_regs *regs)
{
bool step;
+ /*
+ * We may come here right after calling schedule_user()
+ * or do_notify_resume(), in which case we can be in RCU
+ * user mode.
+ */
+ rcu_user_exit();
+
audit_syscall_exit(regs);
if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))