lockdep: Explicitly flag likely false-positive report
authorPaul E. McKenney <paulmck@kernel.org>
Mon, 5 Apr 2021 16:47:59 +0000 (09:47 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Mon, 10 May 2021 23:22:54 +0000 (16:22 -0700)
The reason that lockdep_rcu_suspicious() prints the value of debug_locks
is because a value of zero indicates a likely false positive.  This can
work, but is a bit obtuse.  This commit therefore explicitly calls out
the possibility of a false positive.

Reviewed-by: Boqun Feng <boqun.feng@gmail.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
kernel/locking/lockdep.c

index 48d736a..d6c3c98 100644 (file)
@@ -6393,6 +6393,7 @@ asmlinkage __visible void lockdep_sys_exit(void)
 void lockdep_rcu_suspicious(const char *file, const int line, const char *s)
 {
        struct task_struct *curr = current;
+       int dl = READ_ONCE(debug_locks);
 
        /* Note: the following can be executed concurrently, so be careful. */
        pr_warn("\n");
@@ -6402,11 +6403,12 @@ void lockdep_rcu_suspicious(const char *file, const int line, const char *s)
        pr_warn("-----------------------------\n");
        pr_warn("%s:%d %s!\n", file, line, s);
        pr_warn("\nother info that might help us debug this:\n\n");
-       pr_warn("\n%srcu_scheduler_active = %d, debug_locks = %d\n",
+       pr_warn("\n%srcu_scheduler_active = %d, debug_locks = %d\n%s",
               !rcu_lockdep_current_cpu_online()
                        ? "RCU used illegally from offline CPU!\n"
                        : "",
-              rcu_scheduler_active, debug_locks);
+              rcu_scheduler_active, dl,
+              dl ? "" : "Possible false positive due to lockdep disabling via debug_locks = 0\n");
 
        /*
         * If a CPU is in the RCU-free window in idle (ie: in the section