diff options
| -rw-r--r-- | arch/x86/Kconfig | 1 | ||||
| -rw-r--r-- | arch/x86/kernel/signal.c | 4 |
2 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 50a1d1f9b6d3..20c49b8450b8 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
| @@ -97,6 +97,7 @@ config X86 | |||
| 97 | select KTIME_SCALAR if X86_32 | 97 | select KTIME_SCALAR if X86_32 |
| 98 | select GENERIC_STRNCPY_FROM_USER | 98 | select GENERIC_STRNCPY_FROM_USER |
| 99 | select GENERIC_STRNLEN_USER | 99 | select GENERIC_STRNLEN_USER |
| 100 | select HAVE_RCU_USER_QS if X86_64 | ||
| 100 | 101 | ||
| 101 | config INSTRUCTION_DECODER | 102 | config INSTRUCTION_DECODER |
| 102 | def_bool (KPROBES || PERF_EVENTS || UPROBES) | 103 | def_bool (KPROBES || PERF_EVENTS || UPROBES) |
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index b280908a376e..bca0ab903e57 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c | |||
| @@ -779,6 +779,8 @@ static void do_signal(struct pt_regs *regs) | |||
| 779 | void | 779 | void |
| 780 | do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) | 780 | do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) |
| 781 | { | 781 | { |
| 782 | rcu_user_exit(); | ||
| 783 | |||
| 782 | #ifdef CONFIG_X86_MCE | 784 | #ifdef CONFIG_X86_MCE |
| 783 | /* notify userspace of pending MCEs */ | 785 | /* notify userspace of pending MCEs */ |
| 784 | if (thread_info_flags & _TIF_MCE_NOTIFY) | 786 | if (thread_info_flags & _TIF_MCE_NOTIFY) |
| @@ -804,6 +806,8 @@ do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) | |||
| 804 | #ifdef CONFIG_X86_32 | 806 | #ifdef CONFIG_X86_32 |
| 805 | clear_thread_flag(TIF_IRET); | 807 | clear_thread_flag(TIF_IRET); |
| 806 | #endif /* CONFIG_X86_32 */ | 808 | #endif /* CONFIG_X86_32 */ |
| 809 | |||
| 810 | rcu_user_enter(); | ||
| 807 | } | 811 | } |
| 808 | 812 | ||
| 809 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where) | 813 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where) |
