Thread (16 messages) 16 messages, 4 authors, 2007-07-05

Re: [RFC/PATCH] debug workqueue deadlocks with lockdep

From: Ingo Molnar <hidden>
Date: 2007-07-04 12:22:22
Also in: lkml

* Johannes Berg [off-list ref] wrote:
quoted
quoted
@@ -257,7 +260,9 @@ static void run_workqueue(struct cpu_wor

 		BUG_ON(get_wq_data(work) != cwq);
 		work_clear_pending(work);
+		lock_acquire(&cwq->wq->lockdep_map, 0, 0, 0, 2, _THIS_IP_);
 		f(work);
+		lock_release(&cwq->wq->lockdep_map, 0, _THIS_IP_);
                                                   ^^^
Isn't it better to call lock_release() with nested == 1 ?
Not sure, Ingo?
well, in this case the lock/unlock should nest perfectly (i.e. it should 
always be balanced perfectly), so indeed calling with nested==1 leads to 
stricter checking.

non-nested unlocks occur when people do stuff like:

	spin_lock(&lock1);
	spin_lock(&lock2);
	spin_unlock(&lock1);
	spin_unlock(&lock2);

the first unlock is not 'nested perfectly'. Now for the workqueue 
dep_map this shouldnt be a legal combination, right?

	Ingo
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help