diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-01 16:08:36 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-01 16:08:36 -0500 |
commit | b3c3a9cf2a28ee4a8d0b62e2e58c61e9ca9bb47b (patch) | |
tree | 4066d1bcc600dfde34fd447ee4acdc89e40c3826 /arch | |
parent | 455e987c0c2eb2c9045dc854559474cf41509965 (diff) | |
parent | 745040347d7e8e7b47e3790de76423d9eab474eb (diff) |
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()
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/ptrace.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index 5e0596b0632e..974b67e46dd0 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) | |||
1541 | { | 1541 | { |
1542 | bool step; | 1542 | bool step; |
1543 | 1543 | ||
1544 | /* | ||
1545 | * We may come here right after calling schedule_user() | ||
1546 | * or do_notify_resume(), in which case we can be in RCU | ||
1547 | * user mode. | ||
1548 | */ | ||
1549 | rcu_user_exit(); | ||
1550 | |||
1544 | audit_syscall_exit(regs); | 1551 | audit_syscall_exit(regs); |
1545 | 1552 | ||
1546 | if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) | 1553 | if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) |