diff options
author | Ingo Molnar <mingo@kernel.org> | 2012-12-03 00:27:05 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2012-12-03 00:27:05 -0500 |
commit | 630e1e0bcddfda9566462d4f9a0d58b31c29d467 (patch) | |
tree | b09a28cf7b9ff0fee53af2245a7e3f8d006ae091 /arch | |
parent | 7e5530af11be68f3109672aed59243f82e1272f0 (diff) | |
parent | 91d1aa43d30505b0b825db8898ffc80a8eca96c7 (diff) |
Merge branch 'rcu/next' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu into core/rcu
Conflicts:
arch/x86/kernel/ptrace.c
Pull the latest RCU tree from Paul E. McKenney:
" The major features of this series are:
1. A first version of no-callbacks CPUs. This version prohibits
offlining CPU 0, but only when enabled via CONFIG_RCU_NOCB_CPU=y.
Relaxing this constraint is in progress, but not yet ready
for prime time. These commits were posted to LKML at
https://lkml.org/lkml/2012/10/30/724, and are at branch rcu/nocb.
2. Changes to SRCU that allows statically initialized srcu_struct
structures. These commits were posted to LKML at
https://lkml.org/lkml/2012/10/30/296, and are at branch rcu/srcu.
3. Restructuring of RCU's debugfs output. These commits were posted
to LKML at https://lkml.org/lkml/2012/10/30/341, and are at
branch rcu/tracing.
4. Additional CPU-hotplug/RCU improvements, posted to LKML at
https://lkml.org/lkml/2012/10/30/327, and are at branch rcu/hotplug.
Note that the commit eliminating __stop_machine() was judged to
be too-high of risk, so is deferred to 3.9.
5. Changes to RCU's idle interface, most notably a new module
parameter that redirects normal grace-period operations to
their expedited equivalents. These were posted to LKML at
https://lkml.org/lkml/2012/10/30/739, and are at branch rcu/idle.
6. Additional diagnostics for RCU's CPU stall warning facility,
posted to LKML at https://lkml.org/lkml/2012/10/30/315, and
are at branch rcu/stall. The most notable change reduces the
default RCU CPU stall-warning time from 60 seconds to 21 seconds,
so that it once again happens sooner than the softlockup timeout.
7. Documentation updates, which were posted to LKML at
https://lkml.org/lkml/2012/10/30/280, and are at branch rcu/doc.
A couple of late-breaking changes were posted at
https://lkml.org/lkml/2012/11/16/634 and
https://lkml.org/lkml/2012/11/16/547.
8. Miscellaneous fixes, which were posted to LKML at
https://lkml.org/lkml/2012/10/30/309, along with a late-breaking
change posted at Fri, 16 Nov 2012 11:26:25 -0800 with message-ID
<20121116192625.GA447@linux.vnet.ibm.com>, but which lkml.org
seems to have missed. These are at branch rcu/fixes.
9. Finally, a fix for an lockdep-RCU splat was posted to LKML
at https://lkml.org/lkml/2012/11/7/486. This is at rcu/next. "
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/Kconfig | 15 | ||||
-rw-r--r-- | arch/um/drivers/mconsole_kern.c | 2 | ||||
-rw-r--r-- | arch/x86/Kconfig | 2 | ||||
-rw-r--r-- | arch/x86/include/asm/context_tracking.h (renamed from arch/x86/include/asm/rcu.h) | 15 | ||||
-rw-r--r-- | arch/x86/kernel/entry_64.S | 2 | ||||
-rw-r--r-- | arch/x86/kernel/ptrace.c | 7 | ||||
-rw-r--r-- | arch/x86/kernel/signal.c | 5 | ||||
-rw-r--r-- | arch/x86/kernel/traps.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/fault.c | 2 |
9 files changed, 27 insertions, 25 deletions
diff --git a/arch/Kconfig b/arch/Kconfig index 366ec06a5185..cc74aaea116c 100644 --- a/arch/Kconfig +++ b/arch/Kconfig | |||
@@ -300,15 +300,16 @@ config SECCOMP_FILTER | |||
300 | 300 | ||
301 | See Documentation/prctl/seccomp_filter.txt for details. | 301 | See Documentation/prctl/seccomp_filter.txt for details. |
302 | 302 | ||
303 | config HAVE_RCU_USER_QS | 303 | config HAVE_CONTEXT_TRACKING |
304 | bool | 304 | bool |
305 | help | 305 | help |
306 | Provide kernel entry/exit hooks necessary for userspace | 306 | Provide kernel/user boundaries probes necessary for subsystems |
307 | RCU extended quiescent state. Syscalls need to be wrapped inside | 307 | that need it, such as userspace RCU extended quiescent state. |
308 | rcu_user_exit()-rcu_user_enter() through the slow path using | 308 | Syscalls need to be wrapped inside user_exit()-user_enter() through |
309 | TIF_NOHZ flag. Exceptions handlers must be wrapped as well. Irqs | 309 | the slow path using TIF_NOHZ flag. Exceptions handlers must be |
310 | are already protected inside rcu_irq_enter/rcu_irq_exit() but | 310 | wrapped as well. Irqs are already protected inside |
311 | preemption or signal handling on irq exit still need to be protected. | 311 | rcu_irq_enter/rcu_irq_exit() but preemption or signal handling on |
312 | irq exit still need to be protected. | ||
312 | 313 | ||
313 | config HAVE_VIRT_CPU_ACCOUNTING | 314 | config HAVE_VIRT_CPU_ACCOUNTING |
314 | bool | 315 | bool |
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c index 79ccfe6c7078..49e3b49e552f 100644 --- a/arch/um/drivers/mconsole_kern.c +++ b/arch/um/drivers/mconsole_kern.c | |||
@@ -648,7 +648,7 @@ static void stack_proc(void *arg) | |||
648 | struct task_struct *from = current, *to = arg; | 648 | struct task_struct *from = current, *to = arg; |
649 | 649 | ||
650 | to->thread.saved_task = from; | 650 | to->thread.saved_task = from; |
651 | rcu_switch(from, to); | 651 | rcu_user_hooks_switch(from, to); |
652 | switch_to(from, to, from); | 652 | switch_to(from, to, from); |
653 | } | 653 | } |
654 | 654 | ||
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 46c3bff3ced2..110cfad24f26 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -106,7 +106,7 @@ config X86 | |||
106 | select KTIME_SCALAR if X86_32 | 106 | select KTIME_SCALAR if X86_32 |
107 | select GENERIC_STRNCPY_FROM_USER | 107 | select GENERIC_STRNCPY_FROM_USER |
108 | select GENERIC_STRNLEN_USER | 108 | select GENERIC_STRNLEN_USER |
109 | select HAVE_RCU_USER_QS if X86_64 | 109 | select HAVE_CONTEXT_TRACKING if X86_64 |
110 | select HAVE_IRQ_TIME_ACCOUNTING | 110 | select HAVE_IRQ_TIME_ACCOUNTING |
111 | select GENERIC_KERNEL_THREAD | 111 | select GENERIC_KERNEL_THREAD |
112 | select GENERIC_KERNEL_EXECVE | 112 | select GENERIC_KERNEL_EXECVE |
diff --git a/arch/x86/include/asm/rcu.h b/arch/x86/include/asm/context_tracking.h index d1ac07a23979..1616562683e9 100644 --- a/arch/x86/include/asm/rcu.h +++ b/arch/x86/include/asm/context_tracking.h | |||
@@ -1,27 +1,26 @@ | |||
1 | #ifndef _ASM_X86_RCU_H | 1 | #ifndef _ASM_X86_CONTEXT_TRACKING_H |
2 | #define _ASM_X86_RCU_H | 2 | #define _ASM_X86_CONTEXT_TRACKING_H |
3 | 3 | ||
4 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
5 | 5 | #include <linux/context_tracking.h> | |
6 | #include <linux/rcupdate.h> | ||
7 | #include <asm/ptrace.h> | 6 | #include <asm/ptrace.h> |
8 | 7 | ||
9 | static inline void exception_enter(struct pt_regs *regs) | 8 | static inline void exception_enter(struct pt_regs *regs) |
10 | { | 9 | { |
11 | rcu_user_exit(); | 10 | user_exit(); |
12 | } | 11 | } |
13 | 12 | ||
14 | static inline void exception_exit(struct pt_regs *regs) | 13 | static inline void exception_exit(struct pt_regs *regs) |
15 | { | 14 | { |
16 | #ifdef CONFIG_RCU_USER_QS | 15 | #ifdef CONFIG_CONTEXT_TRACKING |
17 | if (user_mode(regs)) | 16 | if (user_mode(regs)) |
18 | rcu_user_enter(); | 17 | user_enter(); |
19 | #endif | 18 | #endif |
20 | } | 19 | } |
21 | 20 | ||
22 | #else /* __ASSEMBLY__ */ | 21 | #else /* __ASSEMBLY__ */ |
23 | 22 | ||
24 | #ifdef CONFIG_RCU_USER_QS | 23 | #ifdef CONFIG_CONTEXT_TRACKING |
25 | # define SCHEDULE_USER call schedule_user | 24 | # define SCHEDULE_USER call schedule_user |
26 | #else | 25 | #else |
27 | # define SCHEDULE_USER call schedule | 26 | # define SCHEDULE_USER call schedule |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 1328fe49a3f1..2a3806b95831 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -56,7 +56,7 @@ | |||
56 | #include <asm/ftrace.h> | 56 | #include <asm/ftrace.h> |
57 | #include <asm/percpu.h> | 57 | #include <asm/percpu.h> |
58 | #include <asm/asm.h> | 58 | #include <asm/asm.h> |
59 | #include <asm/rcu.h> | 59 | #include <asm/context_tracking.h> |
60 | #include <asm/smap.h> | 60 | #include <asm/smap.h> |
61 | #include <linux/err.h> | 61 | #include <linux/err.h> |
62 | 62 | ||
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c index 974b67e46dd0..b629bbe0d9bd 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/hw_breakpoint.h> | 23 | #include <linux/hw_breakpoint.h> |
24 | #include <linux/rcupdate.h> | 24 | #include <linux/rcupdate.h> |
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | #include <linux/context_tracking.h> | ||
26 | 27 | ||
27 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
28 | #include <asm/pgtable.h> | 29 | #include <asm/pgtable.h> |
@@ -1491,7 +1492,7 @@ long syscall_trace_enter(struct pt_regs *regs) | |||
1491 | { | 1492 | { |
1492 | long ret = 0; | 1493 | long ret = 0; |
1493 | 1494 | ||
1494 | rcu_user_exit(); | 1495 | user_exit(); |
1495 | 1496 | ||
1496 | /* | 1497 | /* |
1497 | * If we stepped into a sysenter/syscall insn, it trapped in | 1498 | * If we stepped into a sysenter/syscall insn, it trapped in |
@@ -1546,7 +1547,7 @@ void syscall_trace_leave(struct pt_regs *regs) | |||
1546 | * or do_notify_resume(), in which case we can be in RCU | 1547 | * or do_notify_resume(), in which case we can be in RCU |
1547 | * user mode. | 1548 | * user mode. |
1548 | */ | 1549 | */ |
1549 | rcu_user_exit(); | 1550 | user_exit(); |
1550 | 1551 | ||
1551 | audit_syscall_exit(regs); | 1552 | audit_syscall_exit(regs); |
1552 | 1553 | ||
@@ -1564,5 +1565,5 @@ void syscall_trace_leave(struct pt_regs *regs) | |||
1564 | if (step || test_thread_flag(TIF_SYSCALL_TRACE)) | 1565 | if (step || test_thread_flag(TIF_SYSCALL_TRACE)) |
1565 | tracehook_report_syscall_exit(regs, step); | 1566 | tracehook_report_syscall_exit(regs, step); |
1566 | 1567 | ||
1567 | rcu_user_enter(); | 1568 | user_enter(); |
1568 | } | 1569 | } |
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index 70b27ee6118e..fbbb604313a2 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/uaccess.h> | 22 | #include <linux/uaccess.h> |
23 | #include <linux/user-return-notifier.h> | 23 | #include <linux/user-return-notifier.h> |
24 | #include <linux/uprobes.h> | 24 | #include <linux/uprobes.h> |
25 | #include <linux/context_tracking.h> | ||
25 | 26 | ||
26 | #include <asm/processor.h> | 27 | #include <asm/processor.h> |
27 | #include <asm/ucontext.h> | 28 | #include <asm/ucontext.h> |
@@ -816,7 +817,7 @@ static void do_signal(struct pt_regs *regs) | |||
816 | void | 817 | void |
817 | do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) | 818 | do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) |
818 | { | 819 | { |
819 | rcu_user_exit(); | 820 | user_exit(); |
820 | 821 | ||
821 | #ifdef CONFIG_X86_MCE | 822 | #ifdef CONFIG_X86_MCE |
822 | /* notify userspace of pending MCEs */ | 823 | /* notify userspace of pending MCEs */ |
@@ -838,7 +839,7 @@ do_notify_resume(struct pt_regs *regs, void *unused, __u32 thread_info_flags) | |||
838 | if (thread_info_flags & _TIF_USER_RETURN_NOTIFY) | 839 | if (thread_info_flags & _TIF_USER_RETURN_NOTIFY) |
839 | fire_user_return_notifiers(); | 840 | fire_user_return_notifiers(); |
840 | 841 | ||
841 | rcu_user_enter(); | 842 | user_enter(); |
842 | } | 843 | } |
843 | 844 | ||
844 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where) | 845 | void signal_fault(struct pt_regs *regs, void __user *frame, char *where) |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 8276dc6794cc..eb8586693e0b 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
@@ -55,7 +55,7 @@ | |||
55 | #include <asm/i387.h> | 55 | #include <asm/i387.h> |
56 | #include <asm/fpu-internal.h> | 56 | #include <asm/fpu-internal.h> |
57 | #include <asm/mce.h> | 57 | #include <asm/mce.h> |
58 | #include <asm/rcu.h> | 58 | #include <asm/context_tracking.h> |
59 | 59 | ||
60 | #include <asm/mach_traps.h> | 60 | #include <asm/mach_traps.h> |
61 | 61 | ||
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 8e13ecb41bee..7a529cbab7ad 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
@@ -18,7 +18,7 @@ | |||
18 | #include <asm/pgalloc.h> /* pgd_*(), ... */ | 18 | #include <asm/pgalloc.h> /* pgd_*(), ... */ |
19 | #include <asm/kmemcheck.h> /* kmemcheck_*(), ... */ | 19 | #include <asm/kmemcheck.h> /* kmemcheck_*(), ... */ |
20 | #include <asm/fixmap.h> /* VSYSCALL_START */ | 20 | #include <asm/fixmap.h> /* VSYSCALL_START */ |
21 | #include <asm/rcu.h> /* exception_enter(), ... */ | 21 | #include <asm/context_tracking.h> /* exception_enter(), ... */ |
22 | 22 | ||
23 | /* | 23 | /* |
24 | * Page fault error code bits: | 24 | * Page fault error code bits: |