• Paul E. McKenney's avatar
    rcu: Rework detection of use of RCU by offline CPUs · 2036d94a
    Paul E. McKenney authored
    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: default avatarPaul E. McKenney <paul.mckenney@linaro.org>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    2036d94a
rcutree.c 78.5 KB