All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [tip:locking/core] jump_label/lockdep: Assert we hold the hotplug lock for _cpuslocked() operations
       [not found] <tip-cb538267ea1e9e025ec692577c9ae75797261889@git.kernel.org>
@ 2018-09-11  9:51 ` Peter Zijlstra
  2018-09-11 15:33   ` [tip:locking/core] locking/lockdep, cpu/hotplug: Annotate AP thread tip-bot for Peter Zijlstra
  2018-09-11 18:03   ` tip-bot for Peter Zijlstra
  0 siblings, 2 replies; 3+ messages in thread
From: Peter Zijlstra @ 2018-09-11  9:51 UTC (permalink / raw)
  To: linux-kernel, tglx, hpa, torvalds, mingo; +Cc: linux-tip-commits

On Mon, Sep 10, 2018 at 03:09:29AM -0700, tip-bot for Peter Zijlstra wrote:
> Commit-ID:  cb538267ea1e9e025ec692577c9ae75797261889
> Gitweb:     https://git.kernel.org/tip/cb538267ea1e9e025ec692577c9ae75797261889
> Author:     Peter Zijlstra <peterz@infradead.org>
> AuthorDate: Tue, 31 Jul 2018 14:35:32 +0200
> Committer:  Ingo Molnar <mingo@kernel.org>
> CommitDate: Mon, 10 Sep 2018 10:16:38 +0200
> 
> jump_label/lockdep: Assert we hold the hotplug lock for _cpuslocked() operations
> 
> Weirdly we seem to have forgotten this...

This of course instantly triggered a false positive :/

---
Subject: lockdep,cpu/hotplug: Annotate AP thread

Anybody trying to assert the cpu_hotplug_lock is held
(lockdep_assert_cpus_held()) from AP callbacks will fail, because the
lock is held by the BP.

Stick in an explicit annotation in cpuhp_thread_fun() to make this work.

Fixes: cb538267ea1e ("jump_label/lockdep: Assert we hold the hotplug lock for _cpuslocked() operations")
Reported-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
 kernel/cpu.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/kernel/cpu.c b/kernel/cpu.c
index 0097acec1c71..08c168b159da 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -616,6 +616,12 @@ static void cpuhp_thread_fun(unsigned int cpu)
 	 */
 	smp_mb();
 
+	/*
+	 * The BP holds the hotplug lock, but we're now running on the AP,
+	 * ensure that anybody asserting the lock is held, will actually find
+	 * it so.
+	 */
+	rwsem_acquire(&cpu_hotplug_lock.rw_sem.dep_map, 0, 0, _THIS_IP_);
 	cpuhp_lock_acquire(bringup);
 
 	if (st->single) {
@@ -661,6 +667,7 @@ static void cpuhp_thread_fun(unsigned int cpu)
 	}
 
 	cpuhp_lock_release(bringup);
+	rwsem_release(&cpu_hotplug_lock.rw_sem.dep_map, 1, _THIS_IP_);
 
 	if (!st->should_run)
 		complete_ap_thread(st, bringup);

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [tip:locking/core] locking/lockdep, cpu/hotplug: Annotate AP thread
  2018-09-11  9:51 ` [tip:locking/core] jump_label/lockdep: Assert we hold the hotplug lock for _cpuslocked() operations Peter Zijlstra
@ 2018-09-11 15:33   ` tip-bot for Peter Zijlstra
  2018-09-11 18:03   ` tip-bot for Peter Zijlstra
  1 sibling, 0 replies; 3+ messages in thread
From: tip-bot for Peter Zijlstra @ 2018-09-11 15:33 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: hpa, mingo, torvalds, tglx, peterz, linux-kernel

Commit-ID:  f1b2f6eccf99fc457221cc84c7550a8e3b17d4df
Gitweb:     https://git.kernel.org/tip/f1b2f6eccf99fc457221cc84c7550a8e3b17d4df
Author:     Peter Zijlstra <peterz@infradead.org>
AuthorDate: Tue, 11 Sep 2018 11:51:27 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 11 Sep 2018 12:37:00 +0200

locking/lockdep, cpu/hotplug: Annotate AP thread

Anybody trying to assert the cpu_hotplug_lock is held (lockdep_assert_cpus_held())
from AP callbacks will fail, because the lock is held by the BP.

Stick in an explicit annotation in cpuhp_thread_fun() to make this work.

Reported-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-tip-commits@vger.kernel.org
Fixes: cb538267ea1e ("jump_label/lockdep: Assert we hold the hotplug lock for _cpuslocked() operations")
Link: http://lkml.kernel.org/r/20180911095127.GT24082@hirez.programming.kicks-ass.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 kernel/cpu.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/kernel/cpu.c b/kernel/cpu.c
index 0097acec1c71..08c168b159da 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -616,6 +616,12 @@ static void cpuhp_thread_fun(unsigned int cpu)
 	 */
 	smp_mb();
 
+	/*
+	 * The BP holds the hotplug lock, but we're now running on the AP,
+	 * ensure that anybody asserting the lock is held, will actually find
+	 * it so.
+	 */
+	rwsem_acquire(&cpu_hotplug_lock.rw_sem.dep_map, 0, 0, _THIS_IP_);
 	cpuhp_lock_acquire(bringup);
 
 	if (st->single) {
@@ -661,6 +667,7 @@ static void cpuhp_thread_fun(unsigned int cpu)
 	}
 
 	cpuhp_lock_release(bringup);
+	rwsem_release(&cpu_hotplug_lock.rw_sem.dep_map, 1, _THIS_IP_);
 
 	if (!st->should_run)
 		complete_ap_thread(st, bringup);

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [tip:locking/core] locking/lockdep, cpu/hotplug: Annotate AP thread
  2018-09-11  9:51 ` [tip:locking/core] jump_label/lockdep: Assert we hold the hotplug lock for _cpuslocked() operations Peter Zijlstra
  2018-09-11 15:33   ` [tip:locking/core] locking/lockdep, cpu/hotplug: Annotate AP thread tip-bot for Peter Zijlstra
@ 2018-09-11 18:03   ` tip-bot for Peter Zijlstra
  1 sibling, 0 replies; 3+ messages in thread
From: tip-bot for Peter Zijlstra @ 2018-09-11 18:03 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: torvalds, hpa, linux-kernel, tglx, peterz, mingo

Commit-ID:  cb92173d1f0474784c6171a9d3fdbbca0ee53554
Gitweb:     https://git.kernel.org/tip/cb92173d1f0474784c6171a9d3fdbbca0ee53554
Author:     Peter Zijlstra <peterz@infradead.org>
AuthorDate: Tue, 11 Sep 2018 11:51:27 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 11 Sep 2018 20:01:03 +0200

locking/lockdep, cpu/hotplug: Annotate AP thread

Anybody trying to assert the cpu_hotplug_lock is held (lockdep_assert_cpus_held())
from AP callbacks will fail, because the lock is held by the BP.

Stick in an explicit annotation in cpuhp_thread_fun() to make this work.

Reported-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-tip-commits@vger.kernel.org
Fixes: cb538267ea1e ("jump_label/lockdep: Assert we hold the hotplug lock for _cpuslocked() operations")
Link: http://lkml.kernel.org/r/20180911095127.GT24082@hirez.programming.kicks-ass.net
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 kernel/cpu.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/kernel/cpu.c b/kernel/cpu.c
index 0097acec1c71..be4859f07153 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -315,6 +315,16 @@ void lockdep_assert_cpus_held(void)
 	percpu_rwsem_assert_held(&cpu_hotplug_lock);
 }
 
+static void lockdep_acquire_cpus_lock(void)
+{
+	rwsem_acquire(&cpu_hotplug_lock.rw_sem.dep_map, 0, 0, _THIS_IP_);
+}
+
+static void lockdep_release_cpus_lock(void)
+{
+	rwsem_release(&cpu_hotplug_lock.rw_sem.dep_map, 1, _THIS_IP_);
+}
+
 /*
  * Wait for currently running CPU hotplug operations to complete (if any) and
  * disable future CPU hotplug (from sysfs). The 'cpu_add_remove_lock' protects
@@ -344,6 +354,17 @@ void cpu_hotplug_enable(void)
 	cpu_maps_update_done();
 }
 EXPORT_SYMBOL_GPL(cpu_hotplug_enable);
+
+#else
+
+static void lockdep_acquire_cpus_lock(void)
+{
+}
+
+static void lockdep_release_cpus_lock(void)
+{
+}
+
 #endif	/* CONFIG_HOTPLUG_CPU */
 
 #ifdef CONFIG_HOTPLUG_SMT
@@ -616,6 +637,12 @@ static void cpuhp_thread_fun(unsigned int cpu)
 	 */
 	smp_mb();
 
+	/*
+	 * The BP holds the hotplug lock, but we're now running on the AP,
+	 * ensure that anybody asserting the lock is held, will actually find
+	 * it so.
+	 */
+	lockdep_acquire_cpus_lock();
 	cpuhp_lock_acquire(bringup);
 
 	if (st->single) {
@@ -661,6 +688,7 @@ static void cpuhp_thread_fun(unsigned int cpu)
 	}
 
 	cpuhp_lock_release(bringup);
+	lockdep_release_cpus_lock();
 
 	if (!st->should_run)
 		complete_ap_thread(st, bringup);

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-09-11 18:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <tip-cb538267ea1e9e025ec692577c9ae75797261889@git.kernel.org>
2018-09-11  9:51 ` [tip:locking/core] jump_label/lockdep: Assert we hold the hotplug lock for _cpuslocked() operations Peter Zijlstra
2018-09-11 15:33   ` [tip:locking/core] locking/lockdep, cpu/hotplug: Annotate AP thread tip-bot for Peter Zijlstra
2018-09-11 18:03   ` tip-bot for Peter Zijlstra

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.