Browse Source

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()
Linus Torvalds 12 years ago
parent
commit
b3c3a9cf2a
1 changed files with 7 additions and 0 deletions
  1. 7 0
      arch/x86/kernel/ptrace.c

+ 7 - 0
arch/x86/kernel/ptrace.c

@@ -1541,6 +1541,13 @@ void syscall_trace_leave(struct pt_regs *regs)
 {
 {
 	bool step;
 	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);
 	audit_syscall_exit(regs);
 
 
 	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
 	if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))