diff mbox series

locking:mutex Print warning if trylock in irq context

Message ID 20171222204519.GA12047@gaurav.jindal
State New
Headers show
Series locking:mutex Print warning if trylock in irq context | expand

Commit Message

gaurav jindal Dec. 22, 2017, 8:45 p.m. UTC
Since mutex_trylock must not be called from interrupt context, a robustness
can be added to this function by throwing a warning if it is called in
interrupt context.
It would help to make debugging easier in case of undesired calling of this
function.

Signed-off-by: gaurav jindal<gauravjindal1104@gmail.com>


---

Comments

Peter Zijlstra Dec. 22, 2017, 8:51 p.m. UTC | #1
On Sat, Dec 23, 2017 at 02:15:19AM +0530, gaurav jindal wrote:
> Since mutex_trylock must not be called from interrupt context, a robustness

> can be added to this function by throwing a warning if it is called in

> interrupt context.

> It would help to make debugging easier in case of undesired calling of this

> function.


Or you run with lockdep enabled and not make this thing slower for
everybody.
gaurav jindal Dec. 22, 2017, 9:08 p.m. UTC | #2
On Fri, Dec 22, 2017 at 09:51:09PM +0100, Peter Zijlstra wrote:
> On Sat, Dec 23, 2017 at 02:15:19AM +0530, gaurav jindal wrote:

> > Since mutex_trylock must not be called from interrupt context, a robustness

> > can be added to this function by throwing a warning if it is called in

> > interrupt context.

> > It would help to make debugging easier in case of undesired calling of this

> > function.

> 

> Or you run with lockdep enabled and not make this thing slower for

> everybody.

Got the point. thanks for making it clear and consideration.
diff mbox series

Patch

diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index 858a075..fe1cace 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -1176,7 +1176,10 @@  void __sched mutex_lock_io(struct mutex *lock)
  */
 int __sched mutex_trylock(struct mutex *lock)
 {
-	bool locked = __mutex_trylock(lock);
+	bool locked;
+
+	WARN_ONCE(in_irq(), "%s wrongly called in irq context", __func__);
+	locked = __mutex_trylock(lock);

 	if (locked)
 		mutex_acquire(&lock->dep_map, 0, 1, _RET_IP_);