linux/Documentation
Paul E. McKenney 2036d94a7b rcu: Rework detection of use of RCU by offline CPUs
Because newly offlined CPUs continue executing after completing the
CPU_DYING notifiers, they legitimately enter the scheduler and use
RCU while appearing to be offline.  This calls for a more sophisticated
approach as follows:

1.	RCU marks the CPU online during the CPU_UP_PREPARE phase.

2.	RCU marks the CPU offline during the CPU_DEAD phase.

3.	Diagnostics regarding use of read-side RCU by offline CPUs use
	RCU's accounting rather than the cpu_online_map.  (Note that
	__call_rcu() still uses cpu_online_map to detect illegal
	invocations within CPU_DYING notifiers.)

4.	Offline CPUs are prevented from hanging the system by
	force_quiescent_state(), which pays attention to cpu_online_map.
	Some additional work (in a later commit) will be needed to
	guarantee that force_quiescent_state() waits a full jiffy before
	assuming that a CPU is offline, for example, when called from
	idle entry.  (This commit also makes the one-jiffy wait
	explicit, since the old-style implicit wait can now be defeated
	by RCU_FAST_NO_HZ and by rcutorture.)

This approach avoids the false positives encountered when attempting to
use more exact classification of CPU online/offline state.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
2012-02-21 09:06:07 -08:00
..
2011-09-27 18:08:04 +02:00
2011-09-27 18:08:04 +02:00
2010-02-24 13:51:32 +01:00
2011-09-27 18:08:04 +02:00
2011-06-07 16:06:01 +02:00
2011-03-31 11:26:23 -03:00
2012-02-01 09:14:17 -08:00
2011-11-04 15:52:51 -04:00
2011-06-13 13:43:05 +02:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2011-09-27 18:08:04 +02:00
2011-03-31 11:26:23 -03:00
2011-11-02 16:07:02 -07:00
2011-12-27 11:27:12 +01:00
2012-01-16 12:34:12 +04:00
2011-09-27 18:08:04 +02:00
2011-03-31 11:26:23 -03:00
2011-09-27 18:08:04 +02:00
2012-01-04 16:04:30 -08:00
2011-03-31 11:26:23 -03:00
2010-04-08 11:34:34 +02:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2012-01-13 10:12:23 -08:00
2011-12-27 11:27:12 +01:00
2011-03-31 11:26:23 -03:00
2011-12-12 14:14:31 -08:00
2011-03-31 11:26:23 -03:00
2011-09-27 18:08:04 +02:00
2011-03-07 13:20:05 -08:00
2011-06-13 13:43:05 +02:00
2011-09-27 18:08:04 +02:00
2011-09-27 18:08:04 +02:00
2012-01-26 14:11:31 +01:00
2011-09-27 18:08:04 +02:00
2011-03-31 11:26:23 -03:00
2010-07-19 10:56:54 +02:00
2010-03-16 11:47:56 +01:00
2012-01-02 13:04:55 +01:00