linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Frederic Weisbecker <frederic@kernel.org>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Frederic Weisbecker <frederic@kernel.org>,
	Tejun Heo <tj@kernel.org>, Peter Zijlstra <peterz@infradead.org>,
	"David S . Miller" <davem@davemloft.net>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"Paul E . McKenney" <paulmck@linux.vnet.ibm.com>,
	Ingo Molnar <mingo@kernel.org>
Subject: [PATCH 01/14] lockdep: Add IRQs disabled/enabled assertion
Date: Fri, 20 Oct 2017 02:55:58 +0200	[thread overview]
Message-ID: <1508460971-8731-2-git-send-email-frederic@kernel.org> (raw)
In-Reply-To: <1508460971-8731-1-git-send-email-frederic@kernel.org>

Checking whether IRQs are enabled or disabled is a very common sanity
check, however not free of overhead especially on fastpath where such
assertion is very common.

Lockdep is a good host for such concurrency correctness check and it
even already tracks down IRQs disablement state. Just reuse its
machinery. This will allow us to get rid of the flags pop and check
overhead from fast path when kernel is built for production.

Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
 include/linux/lockdep.h | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
index bfa8e0b..fbe0127 100644
--- a/include/linux/lockdep.h
+++ b/include/linux/lockdep.h
@@ -719,9 +719,22 @@ do {									\
 	lock_acquire(&(lock)->dep_map, 0, 0, 1, 1, NULL, _THIS_IP_);	\
 	lock_release(&(lock)->dep_map, 0, _THIS_IP_);			\
 } while (0)
+
+#define lockdep_assert_irqs_enabled()	({				\
+		!WARN_ONCE(debug_locks && !current->hardirqs_enabled,	\
+			   "IRQs not enabled as expected\n");		\
+	})
+
+#define lockdep_assert_irqs_disabled()	({				\
+		!WARN_ONCE(debug_locks && current->hardirqs_enabled,	\
+			   "IRQs not disabled as expected\n");		\
+	})
+
 #else
 # define might_lock(lock) do { } while (0)
 # define might_lock_read(lock) do { } while (0)
+static inline int lockdep_assert_irqs_enabled(void) { return 1; }
+static inline int lockdep_assert_irqs_disabled(void) { return 1; }
 #endif
 
 #ifdef CONFIG_LOCKDEP
-- 
2.7.4

  reply	other threads:[~2017-10-20  0:56 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-20  0:55 [PATCH 00/14] lockdep: Add lightweight IRQs disabled/enabled check Frederic Weisbecker
2017-10-20  0:55 ` Frederic Weisbecker [this message]
2017-10-20  0:55 ` [PATCH 02/14] irq: Use lockdep to assert IRQs are disabled/enabled Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 03/14] workqueue: " Frederic Weisbecker
2017-10-21 15:39   ` Tejun Heo
2017-10-20  0:56 ` [PATCH 04/14] nohz: " Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 05/14] hrtimer: " Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 06/14] smp: " Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 07/14] x86: " Frederic Weisbecker
2017-10-22  9:20   ` Peter Zijlstra
2017-11-03 14:25     ` Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 08/14] perf: " Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 09/14] irq/timings: " Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 10/14] irq_work: " Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 11/14] sched: " Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 12/14] posix-cpu-timers: " Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 13/14] netpoll: " Frederic Weisbecker
2017-10-20  0:56 ` [PATCH 14/14] rcu: " Frederic Weisbecker
2017-10-21 21:36   ` Paul E. McKenney
2017-11-06 15:01 [GIT PULL] lockdep: Add lightweight IRQs disabled/enabled check v2 Frederic Weisbecker
2017-11-06 15:01 ` [PATCH 01/14] lockdep: Add IRQs disabled/enabled assertion Frederic Weisbecker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1508460971-8731-2-git-send-email-frederic@kernel.org \
    --to=frederic@kernel.org \
    --cc=davem@davemloft.net \
    --cc=jiangshanlai@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).