diff options
| author | Ingo Molnar <mingo@kernel.org> | 2012-05-14 02:41:20 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2012-05-14 02:41:46 -0400 |
| commit | 2d84e023cb5ec00403ff5d447533c6fd58fcc7ff (patch) | |
| tree | cb10d9a568ebb4be8593821a6f205efedf2f4ddd | |
| parent | 9ff00d58a915b6747ba2e843ab2d04c712b4dc32 (diff) | |
| parent | dc36be4419311fd57becdf54bfeef6bd04a6741d (diff) | |
Merge branch 'rcu/next' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu into core/rcu
Pull the v3.5 RCU tree from Paul E. McKenney:
1) A set of improvements and fixes to the RCU_FAST_NO_HZ feature
(with more on the way for 3.6). Posted to LKML:
https://lkml.org/lkml/2012/4/23/324 (commits 1-3 and 5),
https://lkml.org/lkml/2012/4/16/611 (commit 4),
https://lkml.org/lkml/2012/4/30/390 (commit 6), and
https://lkml.org/lkml/2012/5/4/410 (commit 7, combined with
the other commits for the convenience of the tester).
2) Changes to make rcu_barrier() avoid disrupting execution of CPUs
that have no RCU callbacks. Posted to LKML:
https://lkml.org/lkml/2012/4/23/322.
3) A couple of commits that improve the efficiency of the interaction
between preemptible RCU and the scheduler, these two being all
that survived an abortive attempt to allow preemptible RCU's
__rcu_read_lock() to be inlined. The full set was posted to
LKML at https://lkml.org/lkml/2012/4/14/143, and the first and
third patches of that set remain.
4) Lai Jiangshan's algorithmic implementation of SRCU, which includes
call_srcu() and srcu_barrier(). A major feature of this new
implementation is that synchronize_srcu() no longer disturbs
the execution of other CPUs. This work is based on earlier
implementations by Peter Zijlstra and Paul E. McKenney. Posted to
LKML: https://lkml.org/lkml/2012/2/22/82.
5) A number of miscellaneous bug fixes and improvements which were
posted to LKML at: https://lkml.org/lkml/2012/4/23/353 with
subsequent updates posted to LKML.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
| -rw-r--r-- | Documentation/RCU/torture.txt | 15 | ||||
| -rw-r--r-- | Documentation/kernel-parameters.txt | 88 | ||||
| -rw-r--r-- | MAINTAINERS | 14 | ||||
| -rw-r--r-- | arch/um/drivers/mconsole_kern.c | 1 | ||||
| -rw-r--r-- | include/linux/rculist.h | 40 | ||||
| -rw-r--r-- | include/linux/rcupdate.h | 20 | ||||
| -rw-r--r-- | include/linux/rcutiny.h | 11 | ||||
| -rw-r--r-- | include/linux/rcutree.h | 19 | ||||
| -rw-r--r-- | include/linux/sched.h | 10 | ||||
| -rw-r--r-- | include/linux/srcu.h | 48 | ||||
| -rw-r--r-- | include/trace/events/rcu.h | 2 | ||||
| -rw-r--r-- | init/Kconfig | 50 | ||||
| -rw-r--r-- | kernel/rcupdate.c | 28 | ||||
| -rw-r--r-- | kernel/rcutiny_plugin.h | 16 | ||||
| -rw-r--r-- | kernel/rcutorture.c | 257 | ||||
| -rw-r--r-- | kernel/rcutree.c | 332 | ||||
| -rw-r--r-- | kernel/rcutree.h | 23 | ||||
| -rw-r--r-- | kernel/rcutree_plugin.h | 154 | ||||
| -rw-r--r-- | kernel/rcutree_trace.c | 4 | ||||
| -rw-r--r-- | kernel/sched/core.c | 1 | ||||
| -rw-r--r-- | kernel/srcu.c | 548 | ||||
| -rw-r--r-- | kernel/timer.c | 8 | ||||
| -rw-r--r-- | lib/list_debug.c | 22 |
23 files changed, 1358 insertions, 353 deletions
diff --git a/Documentation/RCU/torture.txt b/Documentation/RCU/torture.txt index 375d3fb71437..4ddf3913fd8c 100644 --- a/Documentation/RCU/torture.txt +++ b/Documentation/RCU/torture.txt | |||
| @@ -47,6 +47,16 @@ irqreader Says to invoke RCU readers from irq level. This is currently | |||
| 47 | permit this. (Or, more accurately, variants of RCU that do | 47 | permit this. (Or, more accurately, variants of RCU that do |
| 48 | -not- permit this know to ignore this variable.) | 48 | -not- permit this know to ignore this variable.) |
| 49 | 49 | ||
| 50 | n_barrier_cbs If this is nonzero, RCU barrier testing will be conducted, | ||
| 51 | in which case n_barrier_cbs specifies the number of | ||
| 52 | RCU callbacks (and corresponding kthreads) to use for | ||
| 53 | this testing. The value cannot be negative. If you | ||
| 54 | specify this to be non-zero when torture_type indicates a | ||
| 55 | synchronous RCU implementation (one for which a member of | ||
| 56 | the synchronize_rcu() rather than the call_rcu() family is | ||
| 57 | used -- see the documentation for torture_type below), an | ||
| 58 | error will be reported and no testing will be carried out. | ||
| 59 | |||
| 50 | nfakewriters This is the number of RCU fake writer threads to run. Fake | 60 | nfakewriters This is the number of RCU fake writer threads to run. Fake |
| 51 | writer threads repeatedly use the synchronous "wait for | 61 | writer threads repeatedly use the synchronous "wait for |
| 52 | current readers" function of the interface selected by | 62 | current readers" function of the interface selected by |
| @@ -188,7 +198,7 @@ OUTPUT | |||
| 188 | The statistics output is as follows: | 198 | The statistics output is as follows: |
| 189 | 199 | ||
| 190 | rcu-torture:--- Start of test: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_hz=1 shuffle_interval=3 stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 fqs_stutter=3 test_boost=1/0 test_boost_interval=7 test_boost_duration=4 | 200 | rcu-torture:--- Start of test: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_hz=1 shuffle_interval=3 stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 fqs_stutter=3 test_boost=1/0 test_boost_interval=7 test_boost_duration=4 |
| 191 | rcu-torture: rtc: (null) ver: 155441 tfle: 0 rta: 155441 rtaf: 8884 rtf: 155440 rtmbe: 0 rtbke: 0 rtbre: 0 rtbf: 0 rtb: 0 nt: 3055767 | 201 | rcu-torture: rtc: (null) ver: 155441 tfle: 0 rta: 155441 rtaf: 8884 rtf: 155440 rtmbe: 0 rtbe: 0 rtbke: 0 rtbre: 0 rtbf: 0 rtb: 0 nt: 3055767 |
| 192 | rcu-torture: Reader Pipe: 727860534 34213 0 0 0 0 0 0 0 0 0 | 202 | rcu-torture: Reader Pipe: 727860534 34213 0 0 0 0 0 0 0 0 0 |
| 193 | rcu-torture: Reader Batch: 727877838 17003 0 0 0 0 0 0 0 0 0 | 203 | rcu-torture: Reader Batch: 727877838 17003 0 0 0 0 0 0 0 0 0 |
| 194 | rcu-torture: Free-Block Circulation: 155440 155440 155440 155440 155440 155440 155440 155440 155440 155440 0 | 204 | rcu-torture: Free-Block Circulation: 155440 155440 155440 155440 155440 155440 155440 155440 155440 155440 0 |
| @@ -230,6 +240,9 @@ o "rtmbe": A non-zero value indicates that rcutorture believes that | |||
| 230 | rcu_assign_pointer() and rcu_dereference() are not working | 240 | rcu_assign_pointer() and rcu_dereference() are not working |
| 231 | correctly. This value should be zero. | 241 | correctly. This value should be zero. |
| 232 | 242 | ||
| 243 | o "rtbe": A non-zero value indicates that one of the rcu_barrier() | ||
| 244 | family of functions is not working correctly. | ||
| 245 | |||
| 233 | o "rtbke": rcutorture was unable to create the real-time kthreads | 246 | o "rtbke": rcutorture was unable to create the real-time kthreads |
| 234 | used to force RCU priority inversion. This value should be zero. | 247 | used to force RCU priority inversion. This value should be zero. |
| 235 | 248 | ||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index c1601e5a8b71..ab84a01c8d68 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
| @@ -2330,18 +2330,100 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
| 2330 | ramdisk_size= [RAM] Sizes of RAM disks in kilobytes | 2330 | ramdisk_size= [RAM] Sizes of RAM disks in kilobytes |
| 2331 | See Documentation/blockdev/ramdisk.txt. | 2331 | See Documentation/blockdev/ramdisk.txt. |
| 2332 | 2332 | ||
| 2333 | rcupdate.blimit= [KNL,BOOT] | 2333 | rcutree.blimit= [KNL,BOOT] |
| 2334 | Set maximum number of finished RCU callbacks to process | 2334 | Set maximum number of finished RCU callbacks to process |
| 2335 | in one batch. | 2335 | in one batch. |
| 2336 | 2336 | ||
| 2337 | rcupdate.qhimark= [KNL,BOOT] | 2337 | rcutree.qhimark= [KNL,BOOT] |
| 2338 | Set threshold of queued | 2338 | Set threshold of queued |
| 2339 | RCU callbacks over which batch limiting is disabled. | 2339 | RCU callbacks over which batch limiting is disabled. |
| 2340 | 2340 | ||
| 2341 | rcupdate.qlowmark= [KNL,BOOT] | 2341 | rcutree.qlowmark= [KNL,BOOT] |
| 2342 | Set threshold of queued RCU callbacks below which | 2342 | Set threshold of queued RCU callbacks below which |
| 2343 | batch limiting is re-enabled. | 2343 | batch limiting is re-enabled. |
| 2344 | 2344 | ||
| 2345 | rcutree.rcu_cpu_stall_suppress= [KNL,BOOT] | ||
| 2346 | Suppress RCU CPU stall warning messages. | ||
| 2347 | |||
| 2348 | rcutree.rcu_cpu_stall_timeout= [KNL,BOOT] | ||
| 2349 | Set timeout for RCU CPU stall warning messages. | ||
| 2350 | |||
| 2351 | rcutorture.fqs_duration= [KNL,BOOT] | ||
| 2352 | Set duration of force_quiescent_state bursts. | ||
| 2353 | |||
| 2354 | rcutorture.fqs_holdoff= [KNL,BOOT] | ||
| 2355 | Set holdoff time within force_quiescent_state bursts. | ||
| 2356 | |||
| 2357 | rcutorture.fqs_stutter= [KNL,BOOT] | ||
| 2358 | Set wait time between force_quiescent_state bursts. | ||
| 2359 | |||
| 2360 | rcutorture.irqreader= [KNL,BOOT] | ||
| 2361 | Test RCU readers from irq handlers. | ||
| 2362 | |||
| 2363 | rcutorture.n_barrier_cbs= [KNL,BOOT] | ||
| 2364 | Set callbacks/threads for rcu_barrier() testing. | ||
| 2365 | |||
| 2366 | rcutorture.nfakewriters= [KNL,BOOT] | ||
| 2367 | Set number of concurrent RCU writers. These just | ||
| 2368 | stress RCU, they don't participate in the actual | ||
| 2369 | test, hence the "fake". | ||
| 2370 | |||
| 2371 | rcutorture.nreaders= [KNL,BOOT] | ||
| 2372 | Set number of RCU readers. | ||
| 2373 | |||
| 2374 | rcutorture.onoff_holdoff= [KNL,BOOT] | ||
| 2375 | Set time (s) after boot for CPU-hotplug testing. | ||
| 2376 | |||
| 2377 | rcutorture.onoff_interval= [KNL,BOOT] | ||
| 2378 | Set time (s) between CPU-hotplug operations, or | ||
| 2379 | zero to disable CPU-hotplug testing. | ||
| 2380 | |||
| 2381 | rcutorture.shuffle_interval= [KNL,BOOT] | ||
| 2382 | Set task-shuffle interval (s). Shuffling tasks | ||
| 2383 | allows some CPUs to go into dyntick-idle mode | ||
| 2384 | during the rcutorture test. | ||
| 2385 | |||
| 2386 | rcutorture.shutdown_secs= [KNL,BOOT] | ||
| 2387 | Set time (s) after boot system shutdown. This | ||
| 2388 | is useful for hands-off automated testing. | ||
| 2389 | |||
| 2390 | rcutorture.stall_cpu= [KNL,BOOT] | ||
| 2391 | Duration of CPU stall (s) to test RCU CPU stall | ||
| 2392 | warnings, zero to disable. | ||
| 2393 | |||
| 2394 | rcutorture.stall_cpu_holdoff= [KNL,BOOT] | ||
| 2395 | Time to wait (s) after boot before inducing stall. | ||
| 2396 | |||
| 2397 | rcutorture.stat_interval= [KNL,BOOT] | ||
| 2398 | Time (s) between statistics printk()s. | ||
| 2399 | |||
| 2400 | rcutorture.stutter= [KNL,BOOT] | ||
| 2401 | Time (s) to stutter testing, for example, specifying | ||
| 2402 | five seconds causes the test to run for five seconds, | ||
| 2403 | wait for five seconds, and so on. This tests RCU's | ||
| 2404 | ability to transition abruptly to and from idle. | ||
| 2405 | |||
| 2406 | rcutorture.test_boost= [KNL,BOOT] | ||
| 2407 | Test RCU priority boosting? 0=no, 1=maybe, 2=yes. | ||
| 2408 | "Maybe" means test if the RCU implementation | ||
| 2409 | under test support RCU priority boosting. | ||
| 2410 | |||
| 2411 | rcutorture.test_boost_duration= [KNL,BOOT] | ||
| 2412 | Duration (s) of each individual boost test. | ||
| 2413 | |||
| 2414 | rcutorture.test_boost_interval= [KNL,BOOT] | ||
| 2415 | Interval (s) between each boost test. | ||
| 2416 | |||
| 2417 | rcutorture.test_no_idle_hz= [KNL,BOOT] | ||
| 2418 | Test RCU's dyntick-idle handling. See also the | ||
| 2419 | rcutorture.shuffle_interval parameter. | ||
| 2420 | |||
| 2421 | rcutorture.torture_type= [KNL,BOOT] | ||
| 2422 | Specify the RCU implementation to test. | ||
| 2423 | |||
| 2424 | rcutorture.verbose= [KNL,BOOT] | ||
| 2425 | Enable additional printk() statements. | ||
| 2426 | |||
| 2345 | rdinit= [KNL] | 2427 | rdinit= [KNL] |
