diff mbox

[02/13] lock: Add lock depth recording per CPU

Message ID 1424231849-17973-2-git-send-email-benh@kernel.crashing.org
State Accepted
Headers show

Commit Message

Benjamin Herrenschmidt Feb. 18, 2015, 3:57 a.m. UTC
We want to move to pollers being run inly when no lock is held
so let's start recording lock depth. It will also be a useful
debugging tool.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
 core/lock.c   | 5 +++++
 include/cpu.h | 1 +
 2 files changed, 6 insertions(+)
diff mbox

Patch

diff --git a/core/lock.c b/core/lock.c
index d916141..ac6cb3b 100644
--- a/core/lock.c
+++ b/core/lock.c
@@ -54,6 +54,9 @@  static void unlock_check(struct lock *l)
 
 	if (l->in_con_path && this_cpu()->con_suspend == 0)
 		lock_error(l, "Unlock con lock with console not suspended", 3);
+
+	if (this_cpu()->lock_depth == 0)
+		lock_error(l, "Releasing lock with 0 depth", 4);
 }
 
 #else
@@ -73,6 +76,7 @@  bool try_lock(struct lock *l)
 	if (__try_lock(l)) {
 		if (l->in_con_path)
 			this_cpu()->con_suspend++;
+		this_cpu()->lock_depth++;
 		return true;
 	}
 	return false;
@@ -101,6 +105,7 @@  void unlock(struct lock *l)
 	unlock_check(l);
 
 	lwsync();
+	this_cpu()->lock_depth--;
 	l->lock_val = 0;
 
 	if (l->in_con_path) {
diff --git a/include/cpu.h b/include/cpu.h
index 6112ab2..1d7c7c5 100644
--- a/include/cpu.h
+++ b/include/cpu.h
@@ -54,6 +54,7 @@  struct cpu_thread {
 	struct trace_info		*trace;
 	uint64_t			save_r1;
 	void				*icp_regs;
+	uint32_t			lock_depth;
 	uint32_t			con_suspend;
 	bool				con_need_flush;
 	bool				in_mcount;