On 26/03/2020 09:19, Juergen Gross wrote: > Some keyhandlers are calling process_pending_softirqs() while holding > a rcu_read_lock(). This is wrong, as process_pending_softirqs() might > activate rcu calls which should not happen inside a rcu_read_lock(). > > For that purpose modify process_pending_softirqs() to not allow rcu > callback processing when a rcu_read_lock() is being held. > > Signed-off-by: Juergen Gross <jgr...@suse.com> > Reviewed-by: Jan Beulich <jbeul...@suse.com> > --- > V3: > - add RCU_SOFTIRQ to ignore in process_pending_softirqs_norcu() > (Roger Pau Monné) > > V5: > - block rcu processing depending on rch_read_lock() being held or not > (Jan Beulich)
Juergen, Our BVT revealed a likely problem with this commit in that form. Since 12509bbeb9e ("rwlocks: call preempt_disable() when taking a rwlock") preemption is disabled after taking cpu_maps which will block RCU callback processing inside rcu_barrier itself. This will result in all system hang on boot after 540d4d60378 ("cpu: sync any remaining RCU callbacks before CPU up/down"). Igor