Paul E. McKenney
1423cc033d
rcu: Delay rcu_barrier() wait until beginning of next CPU-hotunplug operation.
Ingo Molnar reported this lockup:
[ 200.380003] Hangcheck: hangcheck value past margin!
[ 248.192003] INFO: task S99local:2974 blocked for more than 120 seconds.
[ 248.194532] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 248.202330] S99local D 0000000c 6256 2974 2687 0x00000000
[ 248.208929] 9c7ebe90 00000086 6b67ef8b 0000000c 9f25a610 81a69869 00000001 820b6990
[ 248.216123] 820b6990 820b6990 9c6e4c20 9c6e4eb4 82c78990 00000000 6b993559 0000000c
[ 248.220616] 9c7ebe90 8105f22a 9c6e4eb4 9c6e4c20 00000001 9c7ebe98 9c7ebeb4 81a65cb3
[ 248.229990] Call Trace:
[ 248.234049] [<81a69869>] ? _spin_unlock_irqrestore+0x22/0x37
[ 248.239769] [<8105f22a>] ? prepare_to_wait+0x48/0x4e
[ 248.244796] [<81a65cb3>] rcu_barrier_cpu_hotplug+0xaa/0xc9
[ 248.250343] [<8105f029>] ? autoremove_wake_function+0x0/0x38
[ 248.256063] [<81062cf2>] notifier_call_chain+0x49/0x71
[ 248.261263] [<81062da0>] raw_notifier_call_chain+0x11/0x13
[ 248.266809] [<81a0b475>] _cpu_down+0x272/0x288
[ 248.271316] [<81a0b4d5>] cpu_down+0x4a/0xa2
[ 248.275563] [<81a0c48a>] store_online+0x2a/0x5e
[ 248.280156] [<81a0c460>] ? store_online+0x0/0x5e
[ 248.284836] [<814ddc35>] sysdev_store+0x20/0x28
[ 248.289429] [<8112e403>] sysfs_write_file+0xb8/0xe3
[ 248.294369] [<8112e34b>] ? sysfs_write_file+0x0/0xe3
[ 248.299396] [<810e4c8f>] vfs_write+0x91/0x120
[ 248.303817] [<810e4dc1>] sys_write+0x40/0x65
[ 248.308150] [<81002d73>] sysenter_do_call+0x12/0x28
This change moves an RCU grace period delay off of the
critical path for CPU-hotunplug operations.
Since RCU callback migration is only performed on
CPU-hotunplug operations, and since the rcu_barrier() race is
provoked only by consecutive CPU-hotunplug operations, it is
not necessary to delay the end of a given CPU-hotunplug
operation.
We can instead choose to delay the beginning of the next
CPU-hotunplug operation.
Reported-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Josh Triplett <josht@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: akpm@linux-foundation.org
Cc: mathieu.desnoyers@polymtl.ca
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: hugh.dickins@tiscali.co.uk
Cc: benh@kernel.crashing.org
LKML-Reference: <20090819060614.GA14383@linux.vnet.ibm.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
|
2009-08-19 13:58:54 +02:00 |
| .. |
|
gcov
|
gcov: enable GCOV_PROFILE_ALL for x86_64
|
2009-06-18 13:03:58 -07:00 |
|
irq
|
genirq: prevent wakeup of freed irq thread
|
2009-08-13 23:09:27 +02:00 |
|
power
|
headers: smp_lock.h redux
|
2009-07-12 12:22:34 -07:00 |
|
time
|
clocksource: Prevent NULL pointer dereference
|
2009-07-19 17:15:54 +02:00 |
|
trace
|
Remove double removal of blktrace directory
|
2009-08-12 18:50:08 +02:00 |
|
.gitignore
|
|
|
|
acct.c
|
bsdacct: fix access to invalid filp in acct_on()
|
2009-06-30 18:56:00 -07:00 |
|
async.c
|
async: Fix lack of boot-time console due to insufficient synchronization
|
2009-06-08 12:31:53 -07:00 |
|
audit.c
|
Fix rule eviction order for AUDIT_DIR
|
2009-06-24 00:02:38 -04:00 |
|
audit.h
|
Fix rule eviction order for AUDIT_DIR
|
2009-06-24 00:02:38 -04:00 |
|
audit_tree.c
|
Fix rule eviction order for AUDIT_DIR
|
2009-06-24 00:02:38 -04:00 |
|
audit_watch.c
|
Audit: clean up all op= output to include string quoting
|
2009-06-24 00:00:52 -04:00 |
|
auditfilter.c
|
Audit: clean up all op= output to include string quoting
|
2009-06-24 00:00:52 -04:00 |
|
auditsc.c
|
Fix rule eviction order for AUDIT_DIR
|
2009-06-24 00:02:38 -04:00 |
|
backtracetest.c
|
|
|
|
bounds.c
|
|
|
|
capability.c
|
|
|
|
cgroup.c
|
cgroup avoid permanent sleep at rmdir
|
2009-07-29 19:10:35 -07:00 |
|
cgroup_debug.c
|
|
|
|
cgroup_freezer.c
|
|
|
|
compat.c
|
signals: implement sys_rt_tgsigqueueinfo
|
2009-04-30 19:24:24 +02:00 |
|
configs.c
|
|
|
|
cpu.c
|
mm/init: cpu_hotplug_init() must be initialized before SLAB
|
2009-06-22 21:18:12 -07:00 |
|
cpuset.c
|
cpuset,mm: update tasks' mems_allowed in time
|
2009-06-16 19:47:31 -07:00 |
|
cred-internals.h
|
|
|
|
cred.c
|
CRED: Rename cred_exec_mutex to reflect that it's a guard against ptrace
|
2009-05-11 08:15:36 +10:00 |
|
delayacct.c
|
|
|
|
dma-coherent.c
|
|
|
|
dma.c
|
|
|
|
exec_domain.c
|
|
|
|
exit.c
|
headers: mnt_namespace.h redux
|
2009-07-08 09:31:56 -07:00 |
|
extable.c
|
|
|
|
fork.c
|
execve: must clear current->clear_child_tid
|
2009-08-07 10:39:56 -07:00 |
|
freezer.c
|
sched: fix nr_uninterruptible accounting of frozen tasks really
|
2009-07-18 14:19:53 +02:00 |
|
futex.c
|
futex: Fix handling of bad requeue syscall pairing
|
2009-08-10 20:38:11 +02:00 |
|
futex_compat.c
|
futex: Fix compat_futex to be same as futex for REQUEUE_PI
|
2009-08-10 15:41:12 +02:00 |
|
groups.c
|
groups: move code to kernel/groups.c
|
2009-06-16 19:47:48 -07:00 |
|
hrtimer.c
|
hrtimer: Fix migration expiry check
|
2009-07-10 17:32:55 +02:00 |
|
hung_task.c
|
|
|
|
itimer.c
|
|
|
|
kallsyms.c
|
kernel/kallsyms.c: replace deprecated __initcall with device_initcall and fix whitespace
|
2009-06-09 22:37:52 +02:00 |
|
Kconfig.freezer
|
|
|
|
Kconfig.hz
|
|
|
|
Kconfig.preempt
|
|
|
|
kexec.c
|
kexec: fix omitting offset in extended crashkernel syntax
|
2009-07-29 19:10:34 -07:00 |
|
kfifo.c
|
kernel/kfifo.c: replace conditional test with is_power_of_2()
|
2009-06-16 19:47:47 -07:00 |
|
kgdb.c
|
sysrq, intel_fb: fix sysrq g collision
|
2009-05-15 07:56:24 -05:00 |
|
kmod.c
|
headers: mnt_namespace.h redux
|
2009-07-08 09:31:56 -07:00 |
|
kprobes.c
|
kprobes: Use kernel_text_address() for checking probe address
|
2009-07-30 16:44:06 -07:00 |
|
ksysfs.c
|
|
|
|
kthread.c
|
update the comment in kthread_stop()
|
2009-07-27 12:15:46 -07:00 |
|
latencytop.c
|
|
|
|
lockdep.c
|
Merge branch 'linus' into tracing/core
|
2009-05-07 11:17:34 +02:00 |
|
lockdep_internals.h
|
lockdep: increase MAX_LOCKDEP_ENTRIES and MAX_LOCKDEP_CHAINS
|
2009-05-12 19:59:52 +02:00 |
|
lockdep_proc.c
|
lockdep: Fix file mode of lock_stat
|
2009-08-07 11:58:38 +02:00 |
|
lockdep_states.h
|
|
|
|
Makefile
|
Merge commit 'v2.6.31-rc6' into core/rcu
|
2009-08-15 18:56:13 +02:00 |
|
marker.c
|
|
|
|
module.c
|
module: use MODULE_SYMBOL_PREFIX with module_layout
|
2009-07-27 12:15:45 -07:00 |
|
mutex-debug.c
|
|
|
|
mutex-debug.h
|
|
|
|
mutex.c
|
Merge branch 'linus' into perfcounters/core
|
2009-06-11 17:55:42 +02:00 |
|
mutex.h
|
|
|
|
notifier.c
|
|
|
|
ns_cgroup.c
|
|
|
|
nsproxy.c
|
nsproxy: extract create_nsproxy()
|
2009-06-18 13:03:56 -07:00 |
|
panic.c
|
trace: stop tracer in oops_enter()
|
2009-07-24 15:30:45 -04:00 |
|
params.c
|
module_param: allow 'bool' module_params to be bool, not just int.
|
2009-06-12 21:46:58 +09:30 |
|
perf_counter.c
|
perf_counter: Report the cloning task as parent on perf_counter_fork()
|
2009-08-13 16:17:15 +02:00 |
|
pid.c
|
kmemleak: Remove alloc_bootmem annotations introduced in the past
|
2009-07-09 17:07:02 +01:00 |
|
pid_namespace.c
|
pidns: rewrite copy_pid_ns()
|
2009-06-18 13:03:55 -07:00 |
|
pm_qos_params.c
|
|
|
|
posix-cpu-timers.c
|
posix_cpu_timers_exit_group(): Do not use thread_group_cputimer()
|
2009-08-08 18:30:25 +02:00 |
|
posix-timers.c
|
posix-timers: Fix oops in clock_nanosleep() with CLOCK_MONOTONIC_RAW
|
2009-08-04 10:16:41 +02:00 |
|
printk.c
|
printk: Add KERN_DEFAULT printk log-level
|
2009-06-16 11:02:28 -07:00 |
|
profile.c
|
profile: suppress warning about large allocations when profile=1 is specified
|
2009-07-29 19:10:36 -07:00 |
|
ptrace.c
|
cred_guard_mutex: do not return -EINTR to user-space
|
2009-07-06 13:57:04 -07:00 |
|
rcupdate.c
|
rcu: Delay rcu_barrier() wait until beginning of next CPU-hotunplug operation.
|
2009-08-19 13:58:54 +02:00 |
|
rcupreempt.c
|
rcu: Fix typo in rcu_irq_exit() comment header
|
2009-08-15 19:02:09 +02:00 |
|
rcupreempt_trace.c
|
rcu: Make rcupreempt_trace.c look at offline CPUs
|
2009-08-15 19:02:09 +02:00 |
|
rcutorture.c
|
rcu: Add synchronize_sched_expedited() torture tests
|
2009-07-03 10:02:29 +02:00 |
|
rcutree.c
|
rcu: Simplify RCU CPU-hotplug notification
|
2009-08-15 19:02:08 +02:00 |
|
rcutree.h
|
|
|
|
rcutree_trace.c
|
rcu: Add __rcu_pending tracing to hierarchical RCU
|
2009-04-14 11:33:43 +02:00 |
|
relay.c
|
|
|
|
res_counter.c
|
memcg: add interface to reset limits
|
2009-06-18 13:03:48 -07:00 |
|
resource.c
|
kernel/resource.c: fix sign extension in reserve_setup()
|
2009-06-30 18:56:00 -07:00 |
|
rtmutex-debug.c
|
|
|
|
rtmutex-debug.h
|
|
|
|
rtmutex-tester.c
|
|
|
|
rtmutex.c
|
rtmutex: Avoid deadlock in rt_mutex_start_proxy_lock()
|
2009-08-06 05:50:21 +02:00 |
|
rtmutex.h
|
|
|
|
rtmutex_common.h
|
|
|
|
rwsem.c
|
|
|
|
sched.c
|
Merge commit 'v2.6.31-rc6' into core/rcu
|
2009-08-15 18:56:13 +02:00 |
|
sched_clock.c
|
sched: Fix fallback sched_clock()'s offset when using jiffies
|
2009-05-09 10:08:19 +02:00 |
|
sched_cpupri.c
|
sched: Fix race in cpupri introduced by cpumask_var changes
|
2009-08-02 14:23:29 +02:00 |
|
sched_cpupri.h
|
|
|
|
sched_debug.c
|
sched: Hide runqueues from direct refer at source code level
|
2009-06-17 18:29:42 +02:00 |
|
sched_fair.c
|
sched: Fix latencytop and sleep profiling vs group scheduling
|
2009-08-02 14:10:12 +02:00 |
|
sched_features.h
|
|
|
|
sched_idletask.c
|
sched, timers: move calc_load() to scheduler
|
2009-05-15 15:32:45 +02:00 |
|
sched_rt.c
|
sched_rt: Fix overload bug on rt group scheduling
|
2009-07-10 10:43:29 +02:00 |
|
sched_stats.h
|
|
|
|
seccomp.c
|
|
|
|
semaphore.c
|
|
|
|
signal.c
|
do_sigaltstack: small cleanups
|
2009-08-01 11:18:56 -07:00 |
|
slow-work.c
|
slow-work: use round_jiffies() for thread pool's cull and OOM timers
|
2009-06-16 19:47:49 -07:00 |
|
smp.c
|
generic-ipi: fix hotplug_cfd()
|
2009-08-07 10:39:55 -07:00 |
|
softirq.c
|
softirq: introduce tasklet_hrtimer infrastructure
|
2009-07-22 17:01:17 +02:00 |
|
softlockup.c
|
|
|
|
spinlock.c
|
|
|
|
srcu.c
|
|
|
|
stacktrace.c
|
|
|
|
stop_machine.c
|
|
|
|
sys.c
|
groups: move code to kernel/groups.c
|
2009-06-16 19:47:48 -07:00 |
|
sys_ni.c
|
|
|
|
sysctl.c
|
Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
|
2009-06-28 11:05:28 -07:00 |
|
sysctl_check.c
|
|
|
|
taskstats.c
|
|
|
|
test_kprobes.c
|
|
|
|
time.c
|
|
|
|
timeconst.pl
|
|
|
|
timer.c
|
timer: Avoid reading uninitialized data
|
2009-07-18 23:11:43 +02:00 |
|
tracepoint.c
|
|
|
|
tsacct.c
|
|
|
|
uid16.c
|
|
|
|
up.c
|
|
|
|
user.c
|
sched: delayed cleanup of user_struct
|
2009-06-15 21:30:23 -07:00 |
|
user_namespace.c
|
|
|
|
utsname.c
|
utsns: extract creeate_uts_ns()
|
2009-06-18 13:03:55 -07:00 |
|
utsname_sysctl.c
|
|
|
|
wait.c
|
locking, sched: Give waitqueue spinlocks their own lockdep classes
|
2009-08-10 14:43:09 +02:00 |
|
workqueue.c
|
ftrace, workqueuetrace: make workqueue tracepoints use TRACE_EVENT macro
|
2009-06-02 01:10:40 +02:00 |