rcu_callback_map is a virtual lock to annotate a context where RCU callbacks are executed. RCU callbacks are required in softirq disable contexts because with some config combination (use_softirq is true and nocb is disabled) RCU callbacks only execute in softirq contexts. Therefore wait context annotations can be added to detect bugs like using mutex in a RCU callback. Signed-off-by: Boqun Feng <boqun.feng@xxxxxxxxx> --- kernel/rcu/update.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c index 39334d2d2b37..dd59e6412f61 100644 --- a/kernel/rcu/update.c +++ b/kernel/rcu/update.c @@ -269,8 +269,12 @@ EXPORT_SYMBOL_GPL(rcu_sched_lock_map); // Tell lockdep when RCU callbacks are being invoked. static struct lock_class_key rcu_callback_key; -struct lockdep_map rcu_callback_map = - STATIC_LOCKDEP_MAP_INIT("rcu_callback", &rcu_callback_key); +struct lockdep_map rcu_callback_map = { + .name = "rcu_callback", + .key = &rcu_callback_key, + .wait_type_outer = LD_WAIT_FREE, + .wait_type_inner = LD_WAIT_CONFIG, /* RCU callbacks are handled in softirq context */ +}; EXPORT_SYMBOL_GPL(rcu_callback_map); noinstr int notrace debug_lockdep_rcu_enabled(void) -- 2.29.2