* Bart Van Assche <bvanass...@acm.org> wrote:
> If lockdep_register_key() and lockdep_unregister_key() are called with > debug_locks == false then the following warning is reported: > > WARNING: CPU: 2 PID: 15145 at kernel/locking/lockdep.c:4920 > lockdep_unregister_key+0x1ad/0x240 > > That warning is reported because lockdep_unregister_key() ignores the > value of 'debug_locks' and because the behavior of lockdep_register_key() > depends on whether or not 'debug_locks' is set. Fix this inconsistency > by making lockdep_register_key() unconditionally register lock keys. > > Cc: Thomas Gleixner <t...@linutronix.de> > Cc: Will Deacon <will.dea...@arm.com> > Cc: Waiman Long <long...@redhat.com> > Cc: shenghui <shh...@foxmail.com> > Reported-by: shenghui <shh...@foxmail.com> > Fixes: a0b0fd53e1e6 ("locking/lockdep: Free lock classes that are no longer > in use") # v5.1-rc1. > Signed-off-by: Bart Van Assche <bvanass...@acm.org> > --- > kernel/locking/lockdep.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c > index d2d65bbfae01..a228509b62f1 100644 > --- a/kernel/locking/lockdep.c > +++ b/kernel/locking/lockdep.c > @@ -1027,15 +1027,16 @@ void lockdep_register_key(struct lock_class_key *key) > hash_head = keyhashentry(key); > > raw_local_irq_save(flags); > - if (!graph_lock()) > - goto restore_irqs; > + arch_spin_lock(&lockdep_lock); > + current->lockdep_recursion = 1; > hlist_for_each_entry_rcu(k, hash_head, hash_entry) { > if (WARN_ON_ONCE(k == key)) > goto out_unlock; > } > hlist_add_head_rcu(&key->hash_entry, hash_head); > out_unlock: > - graph_unlock(); > + current->lockdep_recursion = 0; > + arch_spin_unlock(&lockdep_lock); > restore_irqs: > raw_local_irq_restore(flags); > } So why don't we add a debug_locks test to lockdep_unregister_key() instead? The general principle to bring lockdep to a screeching halt when bugs are detected, ASAP. Thanks, Ingo